C语言程序改错题 下载本文

第1题 【程序改错】

功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的 字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为: “EDCBAABCDE”。

------------------------------------------------------*/

#include #include #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 #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 #include \main() {

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 #include #define N 20

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( \