程序改错练习题
/*---------------------------------------------------- 【程序改错】第1题
------------------------------------------------------ 功能:输入一行字符,分别统计出其中英文字母、空格、数字
和其它字符的个数。
----------------------------------------------------*/ #include
char c;
int letters=0,space=0,digit=0,others=0; printf(\ /**********FOUND**********/ while((c=getchar())=='\\n') {
/**********FOUND**********/
if(c>='a'&&c<='z'&&c>='A'&&c<='Z') letters++;
/**********FOUND**********/ else if(c=!' ') space++;
else if(c>='0'&&c<='9') digit++; else
others++; }
printf(\others=%d\\n\ space,digit,others); }
答案:
=======(答案1)=======
while((c=getchar())!='\\n') =======(答案2)=======
if( c>='a'&&c<='z' || c>='A'&&c<='Z' ) =========或=========
if( c<='z'&&c>='a' || c>='A'&&c<='Z' ) =========或=========
if( c <= 'z' && c >= 'a' || c >= 'A' && c<='Z' ) =======(答案3)======= else if(c==' ')
/*---------------------------------------------------- 【程序改错】第2题
------------------------------------------------------ 功能:实现交换两个整数的值。
例如:给a和b分别输入3和6 ,输出为a=6 b=3
----------------------------------------------------*/ #include
/**********FOUND**********/ void fun (int a, b) {
int t;
/**********FOUND**********/
t=a;
/**********FOUND**********/ a=b;
/**********FOUND**********/ b=t; }
main() {
int a,b;
printf(\ fun(&a,&b);
printf(\}
答案:
=======(答案1)======= void fun (int *a,int *b) =========或========= fun (int *a,int *b) =======(答案2)======= t=*a;
=======(答案3)======= *a=*b;
=======(答案4)======= *b=t;
/*---------------------------------------------------- 【程序改错】第3题
------------------------------------------------------ 功能:在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。
----------------------------------------------------*/ #include
int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; printf(\array:\\n\
/**********FOUND**********/ scanf(\
printf(\ for(i=0;i /**********FOUND**********/ for(i=N-1;i>=0;i--) if(number<=a[i]) /**********FOUND**********/ a[i]=a[i-1]; else { a[i+1]=number; /**********FOUND**********/ exit; } if(number printf(\ for(i=0;i printf(\ printf(\} 答案: =======(答案1)======= scanf(\=======(答案2)======= for(i=N-2;i>=0;i--) =========或========= for(i=N-2;0<=i;i--) =======(答案3)======= a[ i + 1 ]=a[i]; =======(答案4)======= break; /*---------------------------------------------------- 【程序改错】第4题 ------------------------------------------------------ 功能:读取7个数(1-50)的整数值,每读取一个值,程序打 印出该值个数的*。 ----------------------------------------------------*/ #include int i,a,n=1; /**********FOUND**********/ while(n<7) { do { scanf(\ } /**********FOUND**********/ while(a<1&&a>50); /**********FOUND**********/ for(i=0;i<=a;i++) printf(\ printf(\ n++; } } 答案: =======(答案1)======= while(n<=7) =========或========= while(n<8) =======(答案2)======= while(a<1||a>50); =========或========= while(a>50||a<1); =======(答案3)======= for(i=1;i<=a;i++) /*---------------------------------------------------- 【程序改错】第5题 ------------------------------------------------------ 功能:求1到10的阶乘的和。 ----------------------------------------------------*/ #include int i; float s=0; float fac(int n); /**********FOUND**********/ for(i=1;i<10;i++) /**********FOUND**********/ s=fac(i); printf(\} float fac(int n) { /**********FOUND**********/ int y=1; int i; for(i=1 ;i<=n;i++) y=y*i; /**********FOUND**********/ return; } 答案: =======(答案1)======= for(i=1;i<=10;i++) =========或========= for(i=1;10>=i;i++) =========或========= for(i=1;i<11;i++) =========或========= for(i=1;11>i;i++) =======(答案2)======= s= s + fac(i) ; =========或========= s+=fac(i); =========或========= s=fac(i)+s; =======(答案3)======= float y=1.0; =========或========= float y=1; =======(答案4)======= return y; =========或========= return(y); =========或========= return (y); /*---------------------------------------------------- 【程序改错】第6题 ------------------------------------------------------ 题目:下列给定程序中函数fun的功能是:用选择法对数组中的n个元素进行升序排列。 ----------------------------------------------------*/ #include void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /***********FOUND***********/ p = j for (i = j;i < n; i++) if(a[i] < a[p]) /***********FOUND***********/ p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } } main() { int a[N]={9,6,8,3,-1},i, m = 5; printf(\排序前的数据:\ for(i = 0;i < m;i++) printf(\ printf(\ fun(a,m); printf(\排序后的数据:\ for(i = 0;i < m;i++) printf(\ printf(\} 答案: =======(答案1)======= p=j ; =======(答案2)======= p=i; /*---------------------------------------------------- 【程序改错】第7题 ------------------------------------------------------ 功能:用起泡法对10个整数从小到大排序。 ----------------------------------------------------*/ #include /**********FOUND**********/ void sort(int x,int n) { int i,j,t; for(i=0;i /**********FOUND**********/ for(j=0;j /**********FOUND**********/ if(x[i]>x[i+1]) { t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } main() { int i,n,a[100]; printf(\ scanf(\ for(i=0;i scanf(\ /**********FOUND**********/ sort(n,a); printf(\ for(i=0;i<=n-1;i++) printf(\ printf(\} 答案: =======(答案1)======= void sort(int *x,int n) =========或========= void sort(int x[],int n) =======(答案2)======= for(j=0;j< n -1 -i ;j++) =========或========= for(j=0; n -1 -i >j;j++) =========或========= for(j=0;j for(j=0;n-( 1 + i )>j;j++) =========或========= for(j=0;j<= n -2 -i ;j++) =======(答案3)======= if(x[j]>x[ j + 1 ]) =========或========= if(x[ j + 1] /*---------------------------------------------------- 【程序改错】第8题 ------------------------------------------------------ 功能:在一个一维整型数组中找出其中最大的数及其下标。 ---------------------------------------------------*/ #include /**********FOUND**********/ float fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a; } return max; } void main() { int a[N],i,max,p=0; printf(\ for(i=0;i /**********FOUND**********/ get(\ /**********FOUND**********/ m=fun(a,p,N); printf(\} 答案: =======(答案1)======= int fun(int *a,int *b,int n) =======(答案2)======= *b=c-a; =======(答案3)======= scanf(\=========或========= scanf(\=======(答案4)======= max=fun(a,&p,N); /*---------------------------------------------------- 【程序改错】第9题 ------------------------------------------------------ 功能:判断字符ch是否与str所指串中的某个字符相同; 若 相同,什么也不做,若不同,则将其插在串的最后。 ----------------------------------------------------*/ #include /**********FOUND**********/ void fun(char str, char ch ) { while ( *str && *str != ch ) str++; /**********FOUND**********/ if ( *str == ch ) { str [ 0 ] = ch; /**********FOUND**********/ str[1] = '0'; } } main( ) { char s[81], c ; printf( \ gets ( s ); printf (\Please enter the character to search : \); c = getchar(); fun(s, c) ; printf( \} 答案: =======(答案1)======= void fun(char *str, char ch ) =======(答案2)======= if ( *str == '\\0' ) =======(答案3)======= str[1] = '\\0'; /*---------------------------------------------------- 【程序改错】第10题 ------------------------------------------------------ 功能:有一数组内放10个整数,要求找出最小数和它的下标, 然后把它和数组中最前面的元素即第一个数对换位置. ----------------------------------------------------*/ #include int i,a[10],min,k=0; printf(\ for(i=0;i<10;i++) /***********FOUND***********/ scanf(\ for(i=0;i<10;i++) printf(\ min=a[0]; /***********FOUND***********/ for(i=3;i<10;i++) /***********FOUND***********/ if(a[i]>min) { min=a[i]; k=i; } /***********FOUND***********/ a[k]=a[i]; a[0]=min; printf(\ for(i=0;i<10;i++) printf(\ printf(\} 答案: =======(答案1)======= scanf(\=======(答案2)======= for(i=1;i<10;i++) =========或========= for(i=0;i<10;i++) =========或========= for(i=1;i<=9;i++) =========或========= for(i=0;i<=9;i++) =======(答案3)======= if(a[i] =======(答案4)======= a[k]=a[0]; /*---------------------------------------------------- 【程序改错】第11题 ------------------------------------------------------ 功能:判断m是否为素数,若是返回1,否则返回0。 ----------------------------------------------------*/ #include /**********FOUND**********/ void fun( int n) { int i,k=1; if(m<=1) k=0; /**********FOUND**********/ for(i=1;i /**********FOUND**********/ if(m%i=0) k=0; /**********FOUND**********/ return m; } void main() { int m,k=0; for(m=1;m<100;m++) if(fun(m)==1) { printf(\ if(k%5==0) printf(\ } } 答案: =======(答案1)======= int fun( int m) =========或========= fun( int m) =======(答案2)======= for(i=2;i =========或========= for(i=2;m>i;i++) =========或========= for(i=2;i<=m-1;i++) =========或========= for(i=2;m-1>=i;i++) =======(答案3)======= if( m%i == 0 ) k=0; =======(答案4)======= return k; /*---------------------------------------------------- 【程序改错】第12题 ------------------------------------------------------ 题目:下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。 例如:给字符串s输入:AAaaBBbb123CCcccd,则应输出:upper=6,lower=8。 ----------------------------------------------------*/ #include /***********FOUND***********/ void fun ( char *s, int a, int b ) { while ( *s ) { if ( *s >= 'A' && *s <= 'Z' ) /***********FOUND***********/ *a=a+1 ; if ( *s >= 'a' && *s <= 'z' ) /***********FOUND***********/ *b=b+1; s++; } } main( ) { char s[100]; int upper = 0, lower = 0 ; printf( \ gets ( s ); fun ( s, & upper, &lower ); printf( \lower ); } 答案: =======(答案1)======= void fun ( char *s, int *a, int *b ) =======(答案2)======= *a=*a+1; =======(答案3)======= *b=*b+1; /*---------------------------------------------------- 【程序改错】第13题 ------------------------------------------------------ 功能:求两个形参的乘积和商数,并通过形参返回调用程序。 例如:输入:61.82 和 12.65,输出为:c = 782.023000 d = 4.886957 ----------------------------------------------------*/ #include /**********FOUND**********/ void fun ( double a, b, double *x, double *y ) { /**********FOUND**********/ x = a * b; /**********FOUND**********/ y = a / b; } main ( ) { double a, b, c, d; printf ( \ scanf ( \ fun ( a , b, &c, &d ) ; printf (\} 答案: =======(答案1)======= void fun ( double a, double b, double *x, double *y ) =======(答案2)======= *x = a * b; =======(答案3)======= *y = a / b; /*---------------------------------------------------- 【程序改错】第14题 ------------------------------------------------------ 功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。max代表最高分,min 代表最低分,avg代表平均分。 ----------------------------------------------------*/ #include /***********FOUND***********/ float a[8],min,max,avg; printf(\ for(i=0;i<=9;i++) { printf(\ /***********FOUND***********/ scanf(\ } max=min=avg=a[0]; for(i=1;i<=9;i++) { /***********FOUND***********/ if(min min=a[i]; if(max avg=avg/10; printf(\} 答案: =======(答案1)======= float a[10] min max avg; =======(答案2)======= scanf(\=========或========= scanf(\ =======(答案3)======= if (min>a[i]) =========或========= if (a[i] /*---------------------------------------------------- 【程序改错】第15题 ------------------------------------------------------ 功能:将6个数按输入时顺序的逆序进行排列. ----------------------------------------------------*/ #include int i; char change,*p1,*p2; for(i=0;i /***********FOUND***********/ *p1=p+i; *p2=p+(m-1-i); change=*p1; *p1=*p2; *p2=change; } } main( ) { int i; /***********FOUND***********/ char p,num[6]; for(i=0;i<=5;i++) /***********FOUND***********/ scanf(\ p=&num[0]; /***********FOUND***********/ sort(*p,6); for(i=0;i<=5;i++) printf(\} 答案: =======(答案1)======= p1=p+i; p2=p+(m-1-i); =======(答案2)======= char *p,num[6]; =======(答案3)======= scanf(\=======(答案4)======= sort(p,6); /*------------------------------------------------ 【程序改错】第16题 -------------------------------------------------- 功能:编写函数fun,求两个整数的最小公倍数,然后用主 函数main()调用这个函数并输出结果,两个整数由 键盘输入。 ------------------------------------------------*/ #include int fun(int m,int n) { int i; /**********FOUND**********/ if (m=n) { i=m; m=n; n=i; } for(i=m;i<=m*n;i+=m) /**********FOUND**********/ if(i%n==1) return(i); return 0; } main() { unsigned int m,n,q; printf(\ scanf(\ /**********FOUND**********/ q==fun(m,n); printf(\} 答案: =======(答案1)======= if (m ======(答案2)======= if(i%n==0) =======(答案3)======= q=fun(m,n); /*---------------------------------------------------- 【程序改错】第17题 ------------------------------------------------------ 功能:请编写函数fun,对长度为8个字符的字符串,将8个字符按降序排列。 例如:原来的字符串为CEAedcab,排序后输出为edcbaECA。 ----------------------------------------------------*/ #include void fun(char *s,int num) { /**********FOUND**********/ int i;j; char t; for(i=0;i /**********FOUND**********/ for(j=i;j /**********FOUND**********/ if(s[i]>s[j]) { t=s[i]; s[i]=s[j]; s[j]=t; } } main() { char s[10]; printf(\输入8个字符的字符串:\ gets(s); fun(s,8); printf(\} 答案: =======(答案1)======= int i,j; =======(答案2)======= for(j=i+1;j /*---------------------------------------------------- 【程序改错】第18题 ------------------------------------------------------ 功能:求两数平方根之和,作为函数值返回。 例如:输入12和20,输出结果是:y = 7.936238。 ----------------------------------------------------*/ #include /**********FOUND**********/ double fun (double *a, *b) { double c; /**********FOUND**********/ c = sqr(a)+sqr(b) ; /**********FOUND**********/ return a; } main ( ) { double a, b, y; printf ( \ scanf (\ y = fun (&a, &b); printf (\} 答案: =======(答案1)======= double fun (double *a, double *b) =======(答案2)======= c = sqrt(*a)+sqrt(*b) ; =========或========= c = sqrt(*b)+sqrt(*a) ; =======(答案3)======= return c; =========或========= return(c); =========或========= return sqrt(*b)+sqrt(*a); =========或========= return sqrt(*a)+sqrt(*b); /*---------------------------------------------------- 【程序改错】第19题 ------------------------------------------------------ 功能:实现两个字符串的连接。 例如:输入dfdfqe和12345时,则输出dfdfqe12345. ----------------------------------------------------*/ #include char s1[80],s2[80]; void scat(char s1[],char s2[]); gets(s1); gets(s2); scat(s1,s2); puts(s1); } void scat (char s1[],char s2[]) { int i=0,j=0; /**********FOUND**********/ while(s1[i]= ='\\0') i++; /**********FOUND**********/ while(s2[j]= ='\\0') { /**********FOUND**********/ s2[j]=s1[i]; i++; j++; } /**********FOUND**********/ s2[j]='\\0'; } 答案: =======(答案1)======= while( s1[i] != '\\0' ) =========或========= while(s1[i]) =========或========= while( s1[i] != 0 ) =======(答案2)======= while( s2[j] != '\\0' ) =========或========= while(s2[j]) =========或========= while( s2[j] != 0 ) =======(答案3)======= s1[i]=s2[j]; =======(答案4)======= s1[i]='\\0'; =========或========= *(s1+i)='\\0'; =========或========= s1[i]=0; /*---------------------------------------------------- 【程序改错】第20题 ------------------------------------------------------ 功能:将一个字符串中的大写字母转换成小写字母。 例如:输入aSdFG输出为asdfg。 ----------------------------------------------------*/ #include /**********FOUND**********/ bool fun(char *c) { if(*c<='Z'&&*c>='A')*c-='A'-'a'; /**********FOUND**********/ fun= c; } main() { /**********FOUND**********/ char s[81],p=s; gets(s); while(*p) { *p=fun(p); /**********FOUND**********/ puts(*p); p++; } putchar('\\n'); } 答案: =======(答案1)======= char fun(char *c) =======(答案2)======= return *c; =========或========= return (*c); =========或========= return(*c); =======(答案3)======= char s[81],*p=s; =======(答案4)======= putchar(*p); =========或========= printf(\ /*---------------------------------------------------- 【程序改错】第21题 ------------------------------------------------------ 功能:求100以内(包括100)的偶数之和. ----------------------------------------------------*/ #include /**********FOUND**********/ int i,sum=1; /**********FOUND**********/ for(i=2;i<=100;i+=1) sum+=i; /**********FOUND**********/ printf(\} 答案: =======(答案1)======= int i,sum=0; =======(答案2)======= for(i=2;i<=100;i+=2) =======(答案3)======= printf(\ /*---------------------------------------------------- 【程序改错】第22题 ------------------------------------------------------ 功能:统计出若干个学生的平均成绩,最低分以及得最低分的 人数。 例如:输入10名学生的成绩分别为92,87,68,56,92,84, 67,75,92,66,则输出平均成绩为77.9,最低高分为 56,得最低分的人数为1人。 ----------------------------------------------------*/ #include float fun(float array[],int n) { int i;float sum=0,ave; Min=array[0]; for(i=0;i if(Min>array [i]) Min=array [i]; /**********FOUND**********/ sum=+array [i]; } /**********FOUND**********/ ave=sum\\n; for(i=0;i /**********FOUND**********/ if(array [i]=Min) J++; return(ave); } main( ) { float a[10],ave; int i=0; for(i=0;i<10;i++) scanf(\ ave=fun(a,10); printf(\ printf(\ printf(\} 答案: =======(答案1)======= sum+=array[i]; =========或========= sum=sum+array [i]; =======(答案2)======= ave=sum/n; =======(答案3)======= if(array [i]==Min) J++; /*---------------------------------------------------- 【程序改错】第23题 ------------------------------------------------------ 功能:将s所指字符串的反序和正序进行连接形成一个新串放 在t所指的数组中。 例如:当s所指的字符串的内容为\时,t所指数组中 的内容为\。 ----------------------------------------------------*/ #include /**********FOUND**********/ void fun (char s, char t) { int i, d; /**********FOUND**********/ d = len(s); /**********FOUND**********/ for (i = 1; i /**********FOUND**********/ t[2*d] = '/0'; } main() { char s[100], t[100]; printf(\ scanf(\ fun(s, t); printf(\} 答案: =======(答案1)======= void fun (char s[],char t[]) =========或========= void fun (char *s,char *t) =======(答案2)======= d = strlen(s); =======(答案3)======= for (i = 0; i =========或========= t[ i + d ] = 0; /*---------------------------------------------------- 【程序改错】第24题 ------------------------------------------------------ 功能:实现3行3列矩阵的转置,即行列互换。 ----------------------------------------------------*/ #include int i,j,t; for(i=0;i /**********FOUND**********/ scanf(\ for(i=0;i for(j=0;j printf(\ printf(\ } for(i=0;i /**********FOUND**********/ for(j=0;j /**********FOUND**********/ a[i][j]=t; a[i][j]=a[j][i]; /**********FOUND**********/ t=a[j][i]; } for(i=0;i for(j=0;j printf(\ printf(\ } } main() { int b[3][3]; fun(b,3); } 答案: =======(答案1)======= scanf(\=========或========= scanf(\=======(答案2)======= for(j=0;jj;j++) =========或========= for(j=0;j<=i;j++) =========或========= for(j=0;i>=j;j++) =========或========= for(j=i+1;j =========或========= for(j=i+1;j<=n-1;j++) =========或========= for(j=i;j<=n-i;j++) =======(答案3)======= t=a[i][j]; =======(答案4)======= a[j][i]=t; /*---------------------------------------------------- 【程序改错】第25题 ------------------------------------------------------ 功能:以下程序输出前六行杨辉三角形,既 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ………… ………… ----------------------------------------------------*/ #include /***********FOUND***********/ void fun(int a,int n); { int i, m, t, k; for(i=0; i /***********FOUND***********/ m=0; for(k=i+1; k main() { int b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i; system(\ for(i=0; i printf(\ printf(\ fun(b,n); for(i=0; i printf(\ printf(\} 答案: =======(答案1)======= void fun(int *a, int n) =======(答案2)======= m=i; /*---------------------------------------------------- 【程序改错】第28题 ------------------------------------------------------ 功能:以下程序把两个数按由大到小的顺序输出来. ----------------------------------------------------*/ #include /***********FOUND***********/ swap( int *p1,*p2) { int p; p=*p1; *p1=*p2; *p2=p; } main( ) { int a,b, *p,*q; printf(\ /***********FOUND***********/ scanf(\ p=&a; q=&b; if(a printf(\ /***********FOUND***********/ printf(\} 答案: =======(答案1)======= swap( int *p1,int *p2) =========或========= void swap( int *p1,int *p2) =======(答案2)======= scanf(\=======(答案3)======= printf(\=========或========= printf(\ /*---------------------------------------------------- 【程序改错】第29题 ------------------------------------------------------ 功能:编写函数fun计算下列分段函数的值: x*x+x x<0且x≠-3 f(x)= x*x+5x 0≤x<10且x≠2及x≠3 x*x+x-1 其它 ----------------------------------------------------*/ #include /**********FOUND**********/ double y /**********FOUND**********/ if (x<0 ||x!=-3.0) y=x*x+x; else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0) y=x*x+5*x; else y=x*x+x-1; /**********FOUND**********/ return x; } main() { double f; float x; printf(\ scanf(\ f=fun(x); printf(\ } 答案: =======(答案1)======= float y; =======(答案2)======= if (x<0 && x!=-3.0) =======(答案3)======= return y; /*---------------------------------------------------- 【程序改错】第30题 ------------------------------------------------------ 题目:下列给定程序中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。 例如:若给a输入字符串:ABCDEFGKHIJK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。 ----------------------------------------------------*/ #include void fun(char *p, char *b) { int i, k=0; while(*p) { i=1; while( i<=3 && *p ) { /***********FOUND***********/ b[k]=p; k++; p++; i++; } if(*p) { /***********FOUND***********/ b[k++]=\ } } b[k]='\\0'; } main() { char a[80],b[80]; printf(\ gets(a); printf(\ puts(a); fun(a,b); printf(\ puts(b); printf(\} 答案: =======(答案1)======= b[k]=*p; =======(答案2)======= b[k]=' ';k++;