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;
【程序改错】题目:定义一个5×5的二维数组a,请编写程序使数组第2行、第4行
元素值为2,其它元素值为1,并输出如图所示二维数组。
1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 #include /**********ERROR**********/ if(i=1||i=3) a[i][j]=2; else a[i][j]=1; } main() {/**********ERROR**********/ int a[N][N],i;j; fun(a); for(i=0;i for(j=0;j printf(\ /**********ERROR**********/ printf(\ } } 【参考答案】#define N 5 if(i==1||i==3) int a[N][N],i,j; printf(\ 【程序改错】题目:调用fun函数。从键盘上输入一个整 数给变量n,求1-n之间的奇数和。如n输入8,和为16。 #include /***********ERROR***********/ int fun( k) {int m=0; while(k>=1 ) { /***********ERROR***********/ if(k%2==0) m=m+k; k--;} return m;} main() {int n; /***********ERROR***********/ scanf(\ printf(\ } 答案:int fun(int k) if(k%2==1) scanf(\ 【程序改错】功能:已知一个数列从第0项开始的前三项分别为0、0、1,以 后的各项都是其相邻的前三项的和。下列给定程序中, 函数fun的功能是:计算并输出该数列的前n项的平方根 之和sum,n的值通过形参传入。 例如:当n=10时,程序的输出结果应为23.197745。 #include /**********ERROR**********/ fun (int n) { double sum,s0,s1,s2,s; int k; /**********ERROR**********/ sum=0.0; if(n<=2) sum=0.0; s0=0.0; s1=0.0; /**********ERROR**********/ s2=0.0; /**********ERROR**********/ for(k=4;k>n;k++) { s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; 21 } return sum; } main() { int n; a[i][j]=a[i-1][j-1]+a[i-1][j]; 【程序改错】题目:定义一个N×N的二维数组,并在键盘给数组元素赋值。 请编写程序使数组左上半三角元素中的值全部置成0。 并以矩阵形式输出该数组,例如,如果a数组中的 scanf(\ printf(\ } 答案:fun (int n) sum=1.0; s2=1.0; for(k=4;k<=n;k++) 【程序改错】题目:打印出以下的杨辉三角形(要求打印出10行),请改正程序中的错误,使它能得出正确 的结果。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 #include \ #define N 10 main() {int a[N][N]; int i,j; for(i=0;i<10;i++) { /***********ERROR***********/ a[1][1]=1;a[0][i]=1; } for(i=2;i<10;i++) /***********ERROR***********/ for(j=1;j<10;j++) /***********ERROR***********/ a[i][j]=a[i][j-1]+a[i][j]; for(i=0;i<10;i++) /*打印杨辉三角形*/ { for(j=0;j<=i;j++) printf(\ printf(\ } 答案:a[i][0]=1;a[i][i]=1; for(j=1;j 值为 1 5 6 8 8 5 3 7 12 4 10 3 6 8 7 13 则重新赋值后a数组中的值应为 0 0 0 0 0 0 0 7 0 0 10 3 0 8 7 13 #include /**********ERROR**********/ for(j=0;j int a[N][N],i,j; printf(\产生一个4*4矩阵\ for(i=0;i printf(\ printf(\ } fun(a); printf(\输出变化后的数组:\\n\ for(i=0;i printf(\ printf(\ } 22 } 答案:int i,j; for(j=0;j<=N-1-i;j++) a[i][j]=0; scanf(\ 【程序改错】功能:写一个函数,求一个字符串的长度,在main函数中输入字 符串,并输出其长度。 #include \ #include \ main() { int len; /**********ERROR**********/ char *str[20]; printf(\ scanf(\ /**********ERROR**********/ len==length(str); printf(\ } int length(p) char *p; { int n; n=0; /**********ERROR**********/ while(*p=='\\0') { n++; p++; } return n; } 答案:char str[20]; len=length(str); while(*p!='\\0') 【程序改错】题目: 下列给定程序中 , 函数 fun 的功能是 : 从字符串 S 中删除所有小写字母 'c' 。 请改正程序中的错误 , 使它能计算出正确的结果。 #include for(i=j=0;s[i]!='\\0';i++) /***********ERROR***********/ if(s[i]=='c') /***********ERROR***********/ s[i]=s[j++]; /***********ERROR***********/ s[i]='\\0'; } main() { char s[80]; printf(\输入一个字符串: \ gets (s); printf(\原字符串为: \ puts(s); fun(s); printf(\删除字符c后的字符串为 : \ puts (s); 答案:if(s[i]!='c') s[j]=s[i]; s[j]='\\0'; 【 程 序 改 错 】 题 目 : 已 知 数 组 a[10]={3,8,6,5,4,4,2,9,9,7}, 计算数组下标为奇数且数组元素是偶数的元素之和, 并统计满足条件的元素的个数。 程序中共有4条错误语句,请改正错误。 #define N 10 #include \ int fun(int a[]) { int i,sum=0,n=0; for(i=0;i sum+=a[i]; /**********ERROR**********/ n=+1; } printf(\元素个数是: %d\ /**********ERROR**********/ return n; } main() { int a[N]={3,8,6,5,4,4,2,9,9,7},i,n=0,sum; printf(\输出数组元素:\ for(i=0;i /**********ERROR**************/ sum=int fun(int a); printf(\和是: %d\ } 答案:if(i%2&&a[i]%2==0) n+=1; 23 return sum; sum=fun(a); 【程序改错】功能:求两数平方根之和,作为函数值返回。 例如:输入12和20,输出结果是:y = 7.936238。 #include \ #include \ printf(\ 【程序改错】功能:某个公司采用公用电话传递数据,数据是四位的整数,在 传递过程中是加密的,加密规则如下:每位数字都加上5, 然后除以10的余数代替该位数字。再将新生成数据#include \ /**********ERROR**********/ double fun (double *a, *b) { double c; /**********ERROR**********/ c = sqr(a)+sqr(b) ; /**********ERROR**********/ return a; } main ( ) { double a, b, y; clrscr( ); printf ( \a & b : \scanf (\&a, &b ); y = fun (&a, &b); printf (\ 答案:double fun (double *a, double *b) c = sqrt(*a)+sqrt(*b) ; return c; 【程序改错】题目:下列给定程序中函数 fun 的功能是 : 将字符串中的内容按逆序输出 , 但不改变宇符串中的内容。例如 , 若字符串为abcd, 则应输出 dcba #include /***********ERROR***********/ void fun (char a) {int i=strlen(a)-1; /***********ERROR***********/ while(a[i] ) { /***********ERROR***********/ printf(\ i--; } } main () { char s[10]=\ printf(\处理前字符串 =%s\\n 处理后字符串 =\ fun(s); printf(\ 答案:void fun (char *a) while(i>=0 ) 的第一 位和第四位交换,第二位和第三位交换。 #include \ main() { int a,i,aa[4],t; printf(\输入一个四位整数:\ /**********ERROR**********/ scanf(\ aa[0]=a; /**********ERROR**********/ aa[1]=a0; aa[2]=a00/100; aa[3]=a/1000; /**********ERROR**********/ for(i=0;i<3;i++) { aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) { t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf(\ 答案:scanf(\ aa[1]=a0/10; for(i=0;i<=3;i++) 【程序改错】功能:实现交换两个整数的值。 #include \ /**********ERROR**********/ void fun (int a, b) { int t; /**********ERROR**********/ t=a; /**********ERROR**********/ a=b; /**********ERROR**********/ b=t; 24 } main() { int a,b; printf(\ fun(&a,&b); printf(\ 答案:void fun (int *a,int *b) t=*a; *a=*b; *b=t; 【程序改错】功能:先将在字符串s中的字符按正序存放到t串中,然后把s中的 字符按逆序连接到t串的后面。 #include /**********ERROR**********/ for(i=1;i /**********ERROR**********/ t[k+i]=s[k-i]; /**********ERROR**********/ t[k]='\\0'; } main() { char s[100],t[100]; printf(\ fun(s,t); printf(\ 答案:for(i=0;i 【程序改错】题目: 下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若有相同,统计此字符出现的次数。 #include /***********ERROR***********/ int fun(char str, char ch) { /***********ERROR***********/ int i,n=0; while(str[i] ) { /***********ERROR***********/ if(str[i]!=ch) n++; i++; } return n;} main() { char s[81],n,c; printf(\请输入一个字符串:\\n\ gets(s); printf(\输出一个字符串:\\n\ puts(s); printf(\请输入一个字符:\ c=getchar(); n=fun(s,c); printf(\字符%c出现的次数 %d\\n\ } 答案:int fun(char str[], char ch) int i=0,n=0; if(str[i]==ch) 【程序改错】功能:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1- -- - -- - ... - -- 2x2 3x3 mxm #include double y=1.0; int i; /**********ERROR**********/ for(i=2;i /**********ERROR**********/ y-=1/(i*i); /**********ERROR**********/ return m; } main() { int n=5; printf(\ } 答案:for(i=2;i<=m;i++) y-=1.0/(i*i); return y; 【程序改错】功能:将长整型数中每一位上为奇数的数依 25