第1题 【程序改错】
功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的 字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为: “EDCBAABCDE”。
------------------------------------------------------*/
#include
void fun (char *s, char *t) {
/**********FOUND**********/ int i;
sl = strlen(s);
for (i=0; i /**********FOUND**********/ t[i] = s[sl-i]; for (i=0; i /**********FOUND**********/ t[2*sl] = \} main() { char s[100], t[100]; printf(\ fun(s, t); printf(\} 答案: 1). int i,sl; 2). t[i] = s[sl-i-1]; 3). t[2*sl] = '\\0'; 或 t[2*sl] = 0; 第2题 【程序改错】 功能:求出以下分数序列的前n项之和。和值通过函数值返回main 函数。 2/1+3/2+5/3+8/5+13/8+21/13 …… 例如:若n = 5,则应输出:8.391667。 ------------------------------------------------------*/ #include /**********FOUND**********/ fun ( int n ) { int a, b, c, k; double s; s = 0.0; a = 2; b = 1; for ( k = 1; k <= n; k++ ) { /**********FOUND**********/ s = (double)a / b; c = a; a = a + b; b = c; } /**********FOUND**********/ return c; } main( ) { int n = 5; printf( \} 答案: 1). double fun(int n) 2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或 s=s+a/(double)b; 3). return s; 第3题 【程序改错】 功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获 得m个随机整数,函数sortpb将这m个随机整数从小到大排序。 例如:若输入整数7,则应输出:3 10 17 28 32 36 47。 ------------------------------------------------------*/ #include \#include sortpb ( int n, int *a ) { /**********FOUND**********/ int i, j, p, t for ( j = 0; j < n-1 ; j++ ) { p = j; for ( i = j + 1; i < n ; i ++ ) /**********FOUND**********/ if ( a[p] > a[j] ) p = i; /**********FOUND**********/ if ( p == j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } double rnd ( ) { static t = 29, c = 217, m = 1024, r = 0; r =( r*t + c )%m; return( ( double )r/m ); } getarr( int n, int *x ) { int i; for( i = 1; i <= n; i++, x++ ) *x = ( int )( 50*rnd() ); } putarr( int n, int *z ) { int i; for( i = 1; i <= n; i++, z++ ) { printf( \ if ( !( i ) ) printf( \ } printf(\} main() { int aa[20], n; printf( \ scanf( \ getarr( n, aa ); printf( \ sortpb( n, aa ); printf( \} 答案: 1). int i, j, p, t; 2). if ( a[p] > a[i] ) p = i; 3). if ( p != j ) 第4题 【程序改错】 -------------------------------------------------------- 功能:以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的 最大的n。 ------------------------------------------------------*/ #include int n,s; /**********FOUND**********/ s==n=0; /**********FOUND**********/ while(s>1000) { ++n; s+=n*n; } /**********FOUND**********/ printf(\} 答案: 1). s=n=0; 2). while(s<=1000) 3). printf(\ 第5题 【程序改错】 -------------------------------------------------------- 功能:求出a所指数组中最大数和次最大数(规定最大数和次最大 数不在a[0]和a[1]中),依次和a[0]、a[1]中的数对调。 例如:数组中原有的数:7、10、12、0、3、6、9、11、5、8, 输出的结果为:12、11、7、0、3、6、9、10、5、8。 ------------------------------------------------------*/ #include void fun ( int * a, int n ) { int k,m1,m2,max1,max2,t; max1=max2= -32768; m1=m2=0; for ( k = 0; k < n; k++ ) if ( a[k]>max1 ) { max2 = max1; m2 = m1; max1 = a[k]; m1 = k; } /**********FOUND**********/ else if( a[k]>max1 ) { max2 = a[k]; m2 = k; } /**********FOUND**********/ t = a[0]; a[m1]=a[0]; a[m1] = t; /**********FOUND**********/ t = a[1]; a[m2]=a[1]; a[m2] = t; } main( ) { int b[N]={7,10,12,0,3,6,9,11,5,8}, n=10, i; for ( i = 0; i for ( i=0; i 答案: 1). else if( a[k]>max2 ) 2). t = a[0]; a[0]=a[m1]; a[m1] = t; 3). t = a[1]; a[1]=a[m2]; a[m2] = t; 第6题 【程序改错】 -------------------------------------------------------- 功能:读入一个整数k(2≤k≤10000),打印它的所有质因子(即 所有为素数的因子)。 例如:若输入整数:2310,则应输出:2、3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。 ------------------------------------------------------*/ #include \#include /**********FOUND**********/ isPrime(integer n ) { int i, m; m = 1; for ( i = 2; i < n; i++ ) /**********FOUND**********/ if ( n%i ) { m = 0; break; } /**********FOUND**********/ return n ; } main( ) { int j, k; printf( \ scanf( \