int i,j=0,n=0;
/**********ERROR**********/ while(a[n]=='\\0')n++; n--;
/**********ERROR**********/ while(a[n]!='*')n--;
for(i=0;i<=n;i++) a[j++]=a[i]; /**********ERROR**********/ a[j]='0'; }
【参考答案】while(a[n]!='\\0')n++; while(a[n]=='*')n--; a[j]='\\0';
【程序改错】题目:定义一个N×N的二维数组,并在键盘给数组元素赋值。
请编写程序使数组右下半三角元素中的值全部置成0。
并以矩阵形式输出该数组,例如,如果a数组中的值为
1 5 6 8 8 5 3 7 12 4 10 3 6 8 7 13
则重新赋值后a数组中的值应为 1 5 6 0 8 5 0 0 12 0 0 0 0 0 0 0 #include /**********ERROR**********/ for(j=N-i;j /**********ERROR**********/ a[i][j]==0; } main() { int a[N][N],i,j; printf(\产生一个4*4矩阵\ for(i=0;i { for(j=0;j printf(\ printf(\ } fun(a); printf(\输出变化后的数组:\\n\ for(i=0;i { /**********ERROR**********/ for(j=0;j<=N;j++) printf(\ printf(\ } } 参考答案for(j=N-1-i;j scanf(\ for(j=0;j 【程序改错】功能:八进制转换为十进制。 #include \ main() { /**********ERROR**********/ char p,s[6]; int n; p=s; gets(p); /**********ERROR**********/ n==0; /**********ERROR**********/ while(*(p)=='\\0') { n=n*8+*p-'0'; p++; } printf(\ } 参考答案char *p,s[6]; n=0; while(*(p)!='\\0') 【程序改错】题目:定义一个4×4的二维数组a,数组元素的值由键盘输入, 输出主对角线元素的最大值。 如:输入 2 3 5 7 6 6 7 3 3 7 5 7 1 3 5 7 输出:主对角线元素的最大值是7 #include \ #define N 4 11 int fun(int a[N][N]) {int i,max; /**********ERROR**********/ max==a[0][0]; for(i=0;i /**********ERROR**********/ if(a[i][i] main( ) { int array[N]={10,7,19,29,4,0,7,35,-16,21},min; /***********ERROR***********/ min=maxmin(int array,int N); printf(\ 【参考答案】 【程序改错】功能:求一个3行4列矩阵的外围元素之和。 例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11, main() {int a[N][N],i,j; printf(\给数组元素赋值:\\n\ for(i=0;i /**********ERROR**********/ scanf(\ printf(\ printf(\输出原数组:\\n\ for(i=0;i /**********ERROR**********/ printf(\主对角线元素的最大值是%d\\n\ } 【参考答案】max=a[0][0]; if(a[i][i]>max) scanf(\ printf(\主对角线元素的最大值是%d\\n\ 【程序改错】功能:编程序求一维数组中的最大和最小的元素值. #include /***********ERROR***********/ int maxmin(int arr[ ],n) { int i,min; /***********ERROR***********/ max=min=0; for(i=1;i /***********ERROR***********/ if(arr[i] return min; } 12时, 四框元素值之和应为65。 #include \ int fun(int a[3][4],int m,int n) { /**********ERROR**********/ int i,j,s,s1=s2=s3=s4=0; for(j=0;j s1=s1+a[0][j]; /**********ERROR**********/ s2=s2+a[m][j]; } /**********ERROR**********/ for(i=0;i s3=s3+a[i][0]; s4=s4+a[i][n-1]; } /**********ERROR**********/ s=s1-s2-s3-s4; return s; } main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; printf(\ } 参考答案int i,j,s,s1=0,s2=0,s3=0,s4=0; s2=s2+a[m-1][j]; for(i=1;i 【程序改错】题目:以下函数用于实现字符串的拷贝。#include \ void copystring(char *from, char *to) { for( ; *from!='\\0'; from++, to++) /**********ERROR**********/ 12 to=from; /**********ERROR**********/ to='\\0'; } main() { char p1[10]={\ copystring(p1,p2); printf(\ } 参考答案*to=*from; *to='\\0'; 【程序改错】功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输 出主对角线上的元素之和sum。 #include int a[3][3],sum; int i,j; /**********ERROR**********/ a=0; for(i=0;i<3;i++) for(j=0;j<3;j++) /**********ERROR**********/ scanf(\ for(i=0;i<3;i++) /**********ERROR**********/ sum=sum+a[i][j]; /**********ERROR**********/ printf(\ } main() { fun(); } 【参考答案】sum=0; scanf(\ sum=sum+a[i][i]; printf(\ 【程序改错】题目:将一个数组中的值按逆序重新存放。 例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 程序中共有4条错误语句,请改正错误。 #include \ #define N 5 main() { int a[N],i,temp; printf(\:\\n\ for(i=0;i /**********ERROR**********/ scanf(\ printf(\:\\n\ for(i=0;i { temp=a[i];a[i]=a[N-1-i];a[N-1-i]=temp; } printf(\,array a:\\n\ for(i=0;i 【参考答案】scanf(\ for (i=0;i 【程序改错】功能:将若干学生的档案存放在一个文件中,并显示其内容。 #include struct student stu[3]={{001,\ {002,\ {003,\ #include /**********ERROR**********/ struct student p; /**********ERROR**********/ file fp; int i; if((fp=fopen(\ { printf(\ return; } /**********ERROR**********/ for(*p=stu;p fwrite(p,sizeof(struct student),1,fp); 13 fclose(fp); fp=fopen(\ printf(\ for(i=1;i<=3;i++) { fread(p,sizeof(struct student),1,fp); /**********ERROR**********/ scanf(\ } fclose(fp); } 【参考答案】struct student *p; FILE *fp; for(p=stu;p printf(\%-10s M\\n\,p->name,(*p).age); 【程序改错】题目:将二维数组中每个元素的值乘以3。 如:原数组 1 2 3 新数组 3 6 9 4 5 6 12 15 18 7 8 9 21 24 27 程序中共有4条错误语句,请改正错误。 #include /**********ERROR**********/ for(i=0;i /**********ERROR**********/ a[i][j]=3; } void main() { int a[N][N]={ {1,2,3},{4,5,6},{7,8,9} }; int i,j; printf(\输出原数组\\n\ for(i=0;i {/**********ERROR**********/ for(j=0;j printf(\ printf(\ } fun(a); printf(\输出新数组\\n\ for(i=0;i /**********ERROR**********/ printf(\ printf(\ } } 【参考答案】for(i=0;i 【程序改错】功能:以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的 最大的n。 #include \ #include \ main() { int n,s; /**********ERROR**********/ s==n=0; /**********ERROR**********/ while(s>1000) { ++n; s+=n*n; } /**********ERROR**********/ printf(\ } 答案:s=n=0; while(s<=1000) printf(\ 【程序改错】功能:将整型数组中所有小于0的元素放到所有大于0的元素的前 面(要求只能扫描数组一次)。 #include \ #define Max 100 void fun(int a[],int n) { /**********ERROR**********/ int i=5;j=n-1,temp; while(i while(a[i]<0) i++; while(a[j]>=0) /**********ERROR**********/ j++; /**********ERROR**********/ if(i>j) { temp=a[i]; a[i]=a[j]; 14 a[j]=temp; } } } void main() { static a[]={1,-3,-1,3,2,4,-4,5,-5,-2},n=10,i; fun(a,n); for(i=0;i<10;i++) printf(\ } 答案:int i=0,j=n-1,temp; j- -; if(i 【程序改错】功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。 例如:输入10名学生的成绩分别为92,87,68,56,92,84,67, 75,92,66,则输出平均成绩为77.900002,最低高分为56.000000,得最 低分的人数为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]; /**********ERROR**********/ sum=+array [i]; } /**********ERROR**********/ ave=sum\\n; for(i=0;i /**********ERROR**********/ 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(\ } 答案:sum+=array[i]; ave=sum/n; if(array[i]==Min) J++; 【程序改错】功能:计算数组元素中值为正数的平均值(不包括0)。 例如:数组中元素的值依次为39,-47,21,2,-8,15,0, 则程序的运行结果为19.250000。 #include /**********ERROR**********/ int sum=0.0; int c=0,i=0; /**********ERROR**********/ while(s[i] =0) { if (s[i]>0) { sum+=s[i]; c++; } i++; } /**********ERROR**********/ sum\\=c; /**********ERROR**********/ return c; } main() { int x[1000];int i=0; do { scanf(\ while(x[i++]!=0); printf(\ } 答案:double sum=0; while(s[i]!=0) sum/=c; return sum; 【程序改错】功能:首先把b所指字符串中的字符按逆序存放, 然后将a所指字 符串中的字符和b所指字符串中的字符,按排列的顺序交叉 合并到c所指数组中,过长的剩余字符接在c所指 15