次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。 #include \ #include \ void fun (long s, long *t) { int d; long sl=1;
/**********ERROR**********/ t = 0; while ( s > 0) { d = s;
/**********ERROR**********/ if (d%2 == 0) {
*t = d * sl + *t; sl *= 10; }
/**********ERROR**********/ s \\= 10; } } main() {
long s, t;
printf(\ fun(s, &t);
printf(\ } 答案*t = 0; if(d%2) s /= 10;
【程序改错】功能:m个人的成绩存放在score数组中,请编写函数fun,
它的功能是:将高于和等于平均分的人数作为函数值返回,
将高于和等于平均分的分数放在above所指的数组中。
程序中共有4条错误语句,请改正错误。 #include
int fun(float score[], int m, float above[]) {
/**********ERROR**********/ float av=1; int i,n=0; for(i=0;i /**********ERROR**********/ av\\=m; for(i=0;i if (av<=score[i]) above[n++]=score[i]; /**********ERROR**********/ return above; } main( ) { int i, n; float score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ,above[9] ; /**********ERROR**********/ n =int fun(score, 9, above) ; printf( \ for (i = 0 ; i < n ; i++) printf(\\above[i]) ; } 答案float av=0; av=av/m; return n; n = fun(score,9,above) ; 【程序改错】功能:以下程序把两个数按由大到小的顺序输出来. #include \ /***********ERROR***********/ void swap( int *p1,*p2) { int p; p=*p1; *p1=*p2; *p2=p; } main( ) { int a,b, *p,*q; printf(\ /***********ERROR***********/ scanf(\ p=&a; q=&b; if(a printf(\ /***********ERROR***********/ printf(\ } 答案swap( int *p1,int *p2) scanf(\ printf(\ 【程序改错】功能:编写函数fun求1000以内所有8的倍数之和。 26 #include \ #define N 1000 int fun(int m) { /**********ERROR**********/ int s=0;i; /**********ERROR**********/ for(i=1;i>N;i++) /**********ERROR**********/ if(i/m==0) s+=i; return s; } main() { int sum; sum=fun(8); printf(\以内所有%d的倍数之和为:%d\\n\} 答案int s=0,i; for(i=1;i 【程序改错】功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。 k的值由主函数传入。 #include int m=0,mc=0; /**********ERROR**********/ while ((k>=2)||(mc<10)); { /**********ERROR**********/ if((k=0)||(k=0)) { m=m+k; mc++; } /**********ERROR**********/ k++; } /**********ERROR**********/ return ; } main() { printf(\ } 答案:1.while((2<=k)&&(mc<10)) 2.if(k==0||k==0) 3.k--; 4.return m; 【程序改错】功能:将整型数组中所有小于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]; 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 【程序改错】题目:以下程序的功能是:对输入的一行字符中的数字字符按它们的字面值进行累加,输出此累加和。 # include /***********ERROR***********/ int a,s; /***********ERROR***********/ while((ch==getchar())!='\\n') 27 if(isdigit(ch)) { a=ch-'0'; s=s+a; } /***********ERROR***********/ printf(\ } 【参考答案】int a,s=0; while((ch=getchar())!='\\n') printf(\ 【程序改错】题目:从键盘上输入一个3行3列的矩阵的各个元素的值, 输出辅对角线元素之和。 #include /**********ERROR**********/ void fun(int a[N][N]) {/**********ERROR**********/ int i,sum; for(i=0;i /**********ERROR**********/ sum=a[i][N-1-i]; /**********ERROR**********/ return sum } main() {int a[N][N],y,i,j; for(i=0;i scanf(\ y=fun(a); printf(\ 【参考答案】char i++ 0 %s 【程序改错】功能:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1- -- - -- - ... - -- 2x2 3x3 mxm 例如:若m=5,则应输出:0.536389 #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=y-1.0/i/i; return(y); 【程序改错】功能:判断m是否为素数,若是返回1,否则返回0。 #include int i,k=1; if(m<=1) k=0; /**********ERROR**********/ for(i=1;i /**********ERROR**********/ if(m%i=0) k=0; /**********ERROR**********/ return m; } void main() { int m,k=0; for(m=1;m<100;m++) if(fun(m)==1) { printf(\ if(k%5==0) printf(\ } } 【参考答案】fun( int m) for(i=2;m>i;i++) if(0==m%i) k=0; return k; 【程序改错】题目:输入一个字符串, 输出其中的大写字符。例如输入abcdAbCD输出ACD #include 28 #include /***********ERROR***********/ void fun(char p[],n) {int i; for(i=0;i /***********ERROR***********/ if(p[i]>='A'||p[i]<='Z') /***********ERROR***********/ printf(\ } main() {char str[80]; int n; printf(\ gets(str); printf(\ puts(str); n=strlen(str); fun(str,n); printf(\ } 【参考答案】void fun(char p[], int n) if(p[i]>=65&&p[i]<=90) printf(\ 【程序改错】题目:以下函数功能,完成字符串的复制。 #include \ #include \ void f(char *p) { char str[10],*p1; strcpy(str,\ /**********ERROR**********/ p1=*str; for(;*p++=*p1++;); } main( ) { /**********ERROR**********/ char a[20],p=a; f(p); puts(p); } 【参考答案】p1=str; char a[20],*p=a; 【程序改错】功能:实现3行3列矩阵的转置,即行列互换。 #include \ void fun(int a[3][3],int n) { int i,j,t; for(i=0;i /**********ERROR**********/ scanf(\ for(i=0;i for(j=0;j for(i=0;i /**********ERROR**********/ for(j=0;j /**********ERROR**********/ a[i][j]=t; a[i][j]=a[j][i]; /**********ERROR**********/ t=a[j][i]; } for(i=0;i for(j=0;j void main() { int b[3][3]; fun(b,3); } 【参考答案】scanf(\ for(j=0;j 【程序改错】功能:在字符串str中找出ASCII码值最小的字符,将其放在第一 个位置上,并将该字符前的原字符串顺序向后移动。#include \ #include \ void fun(char *p) { char min,*q=p;int i=0; min=p[i]; while(p[i]!=0) { if(min>p[i]) 29 { min=p[i]; /**********ERROR**********/ p=p+i; } i++; } /**********ERROR**********/ while(q /**********ERROR**********/ *q=(q-1); q--; } p[0]=min; } main() { char str[80]; printf(\ printf(\ fun(str); printf(\ } 【参考答案】q=p+i; while(q>p) *q=*(q-1); 【程序改错】功能:在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。 #include int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; printf(\array:\\n\ /**********ERROR**********/ scanf(\ printf(\ for(i=0;i /**********ERROR**********/ for(i=N-1;i>=0;i--) if(number<=a[i]) /**********ERROR**********/ a[i]=a[i-1]; else { a[i+1]=number; /**********ERROR**********/ exit; } if(number 【参考答案】scanf(\ for(i=N-2;i>=0;i- -) a[i+1]=a[i]; break; 【程序改错】题目:任意输入10个数,输出其中的最大数; 并且要求最大数与第一个位置上的数互换后,输出这10个数。 程序中共有4条错误语句,请改正错误。 #include /**********ERROR**********/ void max(int a[],int n) main() { int a[N],i; for(i=0;i scanf(\ for(i=0;i printf(\ printf(\ /**********ERROR**********/ max(int a,int N); for(i=0;i printf(\ } void max(int a[],int n) { int max,i,p=0,t; /**********ERROR**********/ max=a[i]; for(i=0;i 答案void max(int a[],int n); 30