数组的尾部。
例如:当a所指字符串中的内容为“abcdefg”,b所指字符串中的
内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1
efg”;而当a所指字符串中的内容为“1234”,b所指字符
串中的内容为“abcdefg”时,c所指数组中的内容应该为
“1g2f3e4dcba”。 #include \ #include \ #include \
void fun( char *a, char *b, char *c ) {
int i , j; char ch; i = 0;
j = strlen(b)-1;
/**********ERROR**********/ while ( i > j ) {
ch = b[i]; b[i] = b[j]; b[j] = ch; i++; j--; }
/**********ERROR**********/ while ( *a &&*b ) {
if ( *a ) { *c = *a; c++;
/**********ERROR**********/ a+; } if ( *b ) { *c = *b; c++; b++; } } *c = 0; } main() {
char s1[100],s2[100],t[200];
printf(\ scanf(\
printf(\ scanf(\ fun( s1, s2, t );
printf(\ }
答案:while(i 【程序改错】功能:一球从100米高度自由落下,每次落地后反跳回原高度的 一半;再落下,求它在第10次落地时,共经过多少米? 第10次反弹多高? #include \ main() { /**********ERROR**********/ float sn=100.0;hn=sn/2; int n; /**********ERROR**********/ for(n=2;n<10;n++) { sn=sn+2*hn; /**********ERROR**********/ hn=hn%2; } printf(\ printf(\ } 答案:float sn=100.0,hn=sn/2; for(n=2;n<=10;n++) hn=hn/2; 【程序改错】题目:定义一个4×4的二维数组a,请编写程序使数组四周元素值为2, 其它元素值为1。 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 2 #include void fun(int a[N][N]) {/**********ERROR**********/ int i;j; for(i=0;i /**********ERROR**********/ 16 if(i==0&&i==N-1&&j==0&&j==N-1) a[i][j]=2; else /**********ERROR**********/ a[i][j]==1; } main() { int a[N][N],i,j; fun(a); printf(\输出此数组:\\n\ for(i=0;i for(j=0;j /**********ERROR**********/ scanf(\ printf(\ } } 答案:int i,j; if(i==0||i==N-1||j==0||j==N-1) a[i][j]=1; printf(\ 【程序改错】功能:用指针作函数参数,编程序求一维数组中的最大和最小的 元素值. #include \ #define N 10 /***********ERROR***********/ void maxmin(int arr[ ],int *pt1, *pt2, n) { int i; /***********ERROR***********/ *pt1=*pt2=&arr[0]; for(i=1;i /***********ERROR***********/ if(arr[i]<*pt1) *pt1=arr[i]; if(arr[i]<*pt2) *pt2=arr[i]; } } main( ) { int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; /***********ERROR***********/ *p1=&a;*p2=&b; maxmin(array,p1,p2,N); printf(\ } 答案:void maxmin(int arr[ ],int *pt1,int *pt2,int n) *pt1=*pt2=arr[0]; if(arr[i]>*pt1) *pt1=arr[i]; p1=&a;p2=&b; 【程序改错】功能:将一个数字字符串转换为一个整数(不得调用C语言提供的 将字符串转换为整数的函数)。 例如:若输入字符串\,则函数把它转换为整数值 -1234。 #include \ long fun ( char *p) { int i=1; long n=0; /**********ERROR**********/ if(p=='-') { p++; i=-1; } else if(*p=='+') p++; while(*p>='0' && *p<='9') n=10*n + *p++ - '0'; /**********ERROR**********/ return n+i; } main() { char s[6]; long n; printf(\ gets(s); /**********ERROR**********/ n == fun(s); printf(\ } 答案:if(*p=='-') return n*i; n = fun(s); 【程序改错】题目:定义一个4×4的二维数组b,数组元素的值由键盘输入, 输出其中的最大值及所在的行、列下标。 #include \ int hang,lie; /**********ERROR**********/ int fun(int b[4][4]) main() { int b[4][4],i,j,max; 17 printf(\给数组元素赋值:\\n\ for(i=0;i<4;i++) for(j=0;j<4;j++) /**********ERROR**********/ scanf(\ printf(\输出4×4的矩阵:\\n\ for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(\ printf(\ } max=fun(b); printf(\ } int fun(int b[4][4]) { /**********ERROR**********/ int i,j,max; for(i=0;i<4;i++) for(j=0;j<4;j++) /**********ERROR**********/ if(max>b[i][j]) { max=b[i][j]; hang=i; lie=j; } return max; } 答案:int fun(int b[4][4]); scanf(\ int i,j,max=b[0][0]; if(max 【程序改错】功能:将6个数按输入时顺序的逆序进行排列. #include \ void sort(char *p,int m) { int i; char change,*p1,*p2; for(i=0;i /***********ERROR***********/ *p1=p+i; *p2=p+(m-1-i); change=*p1; *p1=*p2; *p2=change; } } main( ) { int i; /***********ERROR***********/ char p,num[6]; for(i=0;i<=5;i++) /***********ERROR***********/ scanf(\ p=&num[0]; /***********ERROR***********/ sort(*p,6); for(i=0;i<=5;i++) printf(\ } 答案:p1=p+i; p2=p+(m-1-i); char *p,num[6]; scanf(\ sort(p,6); 【程序改错】功能:有1、2、3、4个数字,能组成多少个互不相同且无重复数 字的三位数?都是多少? #include \ main() { int i,j,k; /**********ERROR**********/ printf(\ /**********ERROR**********/ for(i=1;i<=5;i++) for(j=1;j<5;j++) for (k=1;k<5;k++) { /**********ERROR**********/ if (i!=k||i!=j||j!=k) printf(\ } } 答案:printf(\ for(i=1;i<5;i++) if (i!=k&&i!=j&&j!=k) 【程序改错】题目:输出fibonacci数列前20项中,下标为奇数的元素之和。 已知前两项的值分别为1,1。从第三项开始后一项是前两项之和。 运行结果:sum=10945 #include 18 long a[20]={1,1},sum; sum=fun(a); printf(\ } /**********ERROR**********/ fun(long a[20]) { /**********ERROR**********/ long i,sum; for(i=2;i<20;i++) /**********ERROR**********/ a[i]=a[i]+a[i-1]; clrscr( ); for ( i=0; i 参考答案m=i; for(k=i;k 【程序改错】题目:定义一个3×3的二维数组b,数组元 for(i=0;i<20;i++) { printf(\ if((i+1)%5==0) printf(\ /**********ERROR**********************/ if(i%2==1) sum=a[i]; } return sum; } 答案:long fun(long a[20]) long i,sum=0; a[i]=a[i-1]+a[i-2]; if(i%2==1) sum+=a[i]; 【程序改错】功能:求出数组中最大数和次最大数,并把最大数和a[0]中的数 对调、次最大数和a[1]中的数对调。 #include \ #include \ #define N 20 int fun ( int * a, int n ) { int i, m, t, k ; for(i=0;i<2;i++) { /**********ERROR**********/ m=0; /**********ERROR**********/ for(k=1;k /**********ERROR**********/ if(a[k]>a[m]) k=m; t=a[i];a[i]=a[m];a[m]=t; } } main( ) { int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i; 素的值由键盘输入, 输出其中的最小值及所在的行下标。 #include \ int hang; int fun(int b[3][3] ); main() { int b[3][3],i,j,min; printf(\给数组元素赋值:\\n\ for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\ printf(\输出3×3的矩阵:\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\ printf(\ } min=fun(b); printf(\ } int fun(int b[3][3]) { /**********ERROR**********/ int i,j,min; for(i=0;i<3;i++) for(j=0;j<3;j++) /**********ERROR**********/ if(min min=b[i][j]; /**********ERROR**********/ hang=j; } /**********ERROR**********/ return hang; } 【参考答案】int i,j,min=b[0][0]; 19 if(min>b[i][j]) hang=i; return min; 【程序改错】功能:利用二维数组输出如图所示的图形。 ******* ***** *** * *** ***** ******* #include char a[N][N]; int i,j,z; for(i=0;i /**********ERROR**********/ a[i][j]=; z=0; for(i=0;i<(N+1)/2;i++) { for(j=z;j /**********ERROR**********/ z=0; for(i=(N+1)/2;i for(j=z;j for(i=0;i for(j=0;j /**********ERROR**********/ printf(\ printf(\ } } 【参考答案】#define N 7 a[i][j]=' '; z=z-1; printf(\ 【程序改错】题目:输入0-9之间的数字字符,以#为结束(输入数字字符时不要用任何间隔。) 求数字字符的字面值的平均值。例如:输入1234# 平均值为2.5000000。 #include float sum=0; int n=0; char x; printf(\输入0-9之间的数字字符:\ scanf(\ do { /***********ERROR***********/ sum+=x-0; printf(\ n++; scanf(\ } /***********ERROR***********/ while(x=='#') ; /***********ERROR***********/ printf(\ } 【参考答案】sum+=x-'0'; while(x!='#') ; printf(\ 【程序改错】题目:假定输入的字符串中只包含字母和*号。编写程序只删除字符串的后面*号。 例如,******ACF*F*G****,删除后,字符串中的字符为******ACF*F*G 程序中共有3条错误语句,请改正错误。 #include void fun(char a[]) { int i,j=0,n=0; /**********ERROR**********/ while(a[n]=='\\0')n++; 20