请改正程序中的错误,使它能得出正确的结果。 /*------------------------------------------------------*/
注意:不可以增加或删除程序行,也不可以更改程序的结构。 /*------------------------------------------------------*/ fun() { int n,j;
double s=0.0,t=1.0; for(n=1;n<=20;n++) {
/**********FOUND**********/ s=1;
for(j=1;j<=n;j++)
/**********FOUND**********/ t=t*n;
/**********FOUND**********/ s+t=s; }
/**********FOUND**********/ printf(\"jiecheng=%d\\n\
} main() { fun(); } 答案:
1). t=1; 或 t=1.0; 2). t=t*j; 或 t*=j; 3). s=s+t; 或 s+=t;
4). printf(\"jiecheng=%lf\\n\ 或 printf(\"jiecheng=%f\\n\
〖第2题〗『程序改错』(10分)
题目:给定程序MODI1.C中函数 fun 的功能是: 用选择法对数组中的n个元素按 从小到大的顺序进行排序。 #include for (j = 0 ;j < n-1 ;j++) {/**********FOUND**********/ p=j for (i = j;i < n; i++) /**********FOUND**********/ if(a[i] >a[p]) /**********FOUND**********/ p=j; t=a[p] ; a[p]=a[j] ; a[j]=t;} } void main() { int a[N]={9,6,8,3,-1},i, m = 5; printf(\"排序前的数据:\") ; for(i = 0;i < m;i++) printf(\"%d \fun(a,m); printf(\"排序后的数据:\") ; for(i = 0;i < m;i++) printf(\"%d \} 答案: 1). p = j; 2). if(a[i] < a[p]) 或 if(a[p] > a[i]) 3). p = i; 〖第3题〗『程序改错』(10分) 题目:编写函数fun,求两个整数的最小公倍数, 然后用主函数main()调用这个函数并输出结果 ,两个整数由键盘输入。 #include \"stdio.h\" void main() { unsigned int m,n,q; printf(\"m,n=\"); scanf(\"%d,%d\ /**********FOUND**********/ q==fun(m,n); printf(\"p(%d,%d)=%d\} 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); } 答案: 1). q=fun(m,n); 2). if (m 〖第4题〗『程序改错』(10分) 题目:下列程序中,函数fun的功能是: 找出一个大于给定整数m且紧随m的素数, 并作为函数值返回。 #include /**********FOUND**********/ { int i;k; for(i=m+1;;i++){ for(k=2;k/**********FOUND**********/ if(i%k!=0) break; /**********FOUND**********/ if(k=i) return(i); } } void main() { int n; printf(\"\\nPlease enter n:\"); scanf(\"%d\ printf(\"%d\\n\} 答案: 1). { int i,k; 2). if(i%k==0) 3). if(k==i) 或 if(k>=i) 〖第5题〗『程序改错』(10分) 题目:打印出如下杨辉三角形(要求打印出6行). 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include\"stdio.h\" void main() { int i,j; int a[6][6]; printf(\"\\n\"); /**********FOUND**********/ for(i=1;i<6;i++) { a[i][0]=1; a[i][i]=1; } /**********FOUND**********/ for(i=1;i<6;i++) for(j=1;j/**********FOUND**********/ a[i][i]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<6;i++) { /**********FOUND**********/ for(j=0;jprintf(\"%5d\ printf(\"\\n\"); } } 答案: 1). for(i=0;i<6;i++) 或 for(i=0;i<=5;i++) 2). for(i=2;i<6;i++) 或 for(i=2;i<=5;i++) 3). a[i][j]=a[i-1][j-1]+a[i-1][j]; 4). for(j=0;j<=i;j++) 或 for(j=0;i>=j;j++) 或 for(j=0;j〖第6题〗『程序改错』(10分) 题目:给定程序MODI1.C中函数 fun 的功能是: 计算正整数num的各位上的数字之积。 例如,若输入:252,则输出应该是:20。 若输入:202,则输出应该是:0。 #include /**********FOUND**********/ {long k=1 do { k*=num%10 ; /**********FOUND**********/ num\\=10; /**********FOUND**********/ } while(!num) ; return (k) ; } void main( ) { long n ; printf(\"\\Please enter a number:\") ; scanf(\"%ld\printf(\"\\n%ld\\n\} 答案: 1). {long k=1; 2). num/=10; 或 num=num/10; 3). } while(num) ; 或 } while(num!=0) ; 〖第7题〗『程序改错』(10分) 题目:猴子吃桃问题:猴子第一天摘下若干个桃子, 当即吃了一半,还不过瘾,又多吃了一个, 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 #include\"stdio.h\" void main() { int day,x1,x2; day=9; /**********FOUND**********/ x2==1; while(day>0) /**********FOUND**********/ { x1=(x2+1)/2; x2=x1; /**********FOUND**********/ day++; } printf(\"the total is %d\\n\} 答案: 1). x2=1; 2). {x1=(x2+1)*2; 3). day--; 或 day-=1; 或 day=day-1; 〖第8题〗『程序改错』(10分) 题目:一个5位数,判断它是不是回文数。 即12321是回文数,个位与万位相同,十位与千位相同。 #include\"stdio.h\" void main( ) { /**********FOUND**********/ long ge,shi,qian;wan,x; scanf(\"%ld\ /**********FOUND**********/ wan=x%10000; qian=x%10000/1000; shi=x%100/10; ge=x%10; /**********FOUND**********/ if(ge==wan||shi==qian) printf(\"this number is a huiwen\\n\"); else printf(\"this number is not a huiwen\\n\"); } 答案: 1). long ge,shi,qian,wan,x; 2). wan=x/10000; 3). if(ge==wan&&shi==qian) if(shi==qian&&ge==wan) 〖第9题〗『程序改错』(10分) 题目:编写函数fun求20以内所有5的倍数之积。 #define N 20 #include \"stdio.h\" void main() 或 { int sum; sum=fun(5); printf(\"%d以内所有%d的倍数之积为: %d\\n\} int fun(int m) { /**********FOUND**********/ int s=0,i; for(i=1;i /**********FOUND**********/ s=*i; return s; } 答案: 1). int s=1,i; 2). if(i%m==0) 3). s=s*i 或 s=i*s 或 s*=i 〖第10题〗『程序改错』(10分) 题目:请编写一个函数fun,函数的功能是: 统计出若干个学生的平均成绩, 最低分以及得最低分的人数。 例如,输入10名学生的成绩分别为 92,87,68,56,92,84,67,75,92,66,则 输出平均成绩为77.9,最低分为56,得最低分的人数为1人。 #include \"stdio.h\" float Min=0; int J=0; float fun(float array[],int n) { int i;float sum=0,ave; Min=array[0]; for(i=0;i /**********FOUND**********/ ave=sum\\n; for(i=0;i return(ave); } void main( ) { float a[10],ave; int i=0; printf(\"Input 10 scores:\\n\"); for(i=0;i<10;i++) scanf(\"%f\ ave=fun(a,10); printf(\"ave=%f\\n\ printf(\"min=%f\\n\ printf(\"Total:%d\\n\} 答案: 1). sum+=array[i];} 或 sum=sum+array[i]; } 2). ave=sum/n; 3). if(array[i]==Min) J++; 或 if(Min==array[i]) J++; 〖第11题〗『程序改错』(10分) 题目:有一数组内放10个整数,要求求出平均值,并打印. #include float average(float array[10]) { int i; float aver,sum=array[0]; /***********FOUND***********/ for(i=0;i<10;i++) sum=sum+array[i]; aver=sum/10.0; return(aver); } void main( ) { /***********FOUND***********/ int score[10],aver ; int i; printf(\"input 10 scores:\\n\"); for(i=0;i<10;i++) /***********FOUND***********/ scanf(\"%f\printf(\"\\n\"); /***********FOUND***********/ aver=average(score[10]); printf(\"average score is %5.2f\} 答案: 1). for(i=1;i<10;i++) 或 for(i=1;i<=9;i++) 2). float score[10],aver; 3). scanf(\"%f\ 4). aver=average(score); 〖第12题〗『程序改错』(10分) 题目:利用递归方法求5!。 #include printf(\"5!=%d\\n\} int fact(int j) { int sum; /**********FOUND**********/ if(j=0) /**********FOUND**********/ sum=0; else sum=j*fact(j-1); /**********FOUND**********/ return j; 答案: 1). if(j==0) 或 if(j==0 || j==1) 或 if(j==1 || j==0) 2). sum=1; 3). return sum;} 或 return(sum);} 或 return (sum);} 〖第13题〗『程序改错』(10分) 题目:编写函数求2!+4!+6!+8!+10+12!+14!。 #include \"stdio.h\" long sum(int n) { /**********FOUND**********/ int i,j long t,s=0; /**********FOUND**********/ for(i=2;i<=n;i++) {t=1; for(j=1;j<=i;j++) t=t*j; s=s+t;} /**********FOUND**********/ return(t); } void main() { printf(\"this sum=%ld\\n\ 答案: 1). int i,j; 2). for(i=2;i<=n;i=i+2) 或 for(i=2;i<=n;i+=2) 或 for(i=2;i<=n;i++,i++) 3). return(s); 〖第14题〗『程序改错』(10分) 题目:下列给定程序中,函数fun的功能是: 判断m是否为素数,若是返回1,否则返回0。 主函数的功能是:按每行5个输出1-100之间的全部素数。 #include /**********FOUND**********/ void fun( int n) { int i,k=1; if(m<=1) k=0; /**********FOUND**********/ for(i=1;i /**********FOUND**********/ return m; } void main() { int m,k=0; for(m=1;m<100;m++) if(fun(m)==1) { printf(\"%4d\ if(k%5==0)printf(\"\\n\"); } } 答案: 1).int fun( int m) 或 fun( int m) 2).for(i=2;i 〖第15题〗『程序改错』(10分) 题目:求100以内(包括100)的偶数之和. #include \"stdio.h\" void main() { /**********FOUND**********/ int i,sum=1; /**********FOUND**********/ for(i=2;i<=100;i+=1) sum+=i; /**********FOUND**********/ printf(\"Sum=%d \\n\";sum); } 答案: 1). int i,sum=0; 2). for(i=2;i<=100;i+=2) 或 for(i=2;i<=100;i=i+2) 3). printf(\"Sum=%d \\n\ 〖第16题〗『程序改错』(10分) 题目:用起泡法对10个整数从小到大排序。 程序中共有4条错误语句,请改正错误。 #include /**********FOUND**********/ void sort(int x,int n) { int i,j,k,t; for(i=0;i { t=x[j];x[j]=x[j+1];x[j+1]=t;} } void main() { int i,n,a[100]; printf(\"please input the length of the array:\\n\"); scanf(\"%d\ for(i=0;i 1). void sort(int *x,int n) 或 void sort(int x[],int n) 2).for(j=0;j 题目:函数fun的功能是:求出两个非零正整数 的最大公约数,并作为函数值返回。 例如,若给num1和num2分别输入49和21,则 输出的最大公约数为7。 #include /**********FOUND**********/ a=t; } r=a%b; while(r!=0) { a=b; b=r; /**********FOUND**********/ r=a/b;} /**********FOUND**********/ return a; } void main() { int num1,num2,a; printf(\"Input two numbers:\\n\"); scanf(\"%d%d\ a=fun(num1,num2); printf(\"the maximum common divisor is %d\\n\\n\} 答案: 1). a=b; 2). b=t; 3). r=a%b;} 4). return b; 或 return (b); 或 return(b); 〖第18题〗『程序改错』(10分) 题目:请编写一个函数fun,函数的功能是: 求出N×M整型数组的最小元素及其所在的行坐标 及列坐标(如果最小元素不唯一,选择位置在最前面的一个)。 如:输入的数组为: 9 2 3 4 15 6 12 1 9 10 11 2 求出的最小数为1,行坐标为2,列坐标为#define N 4 #define M 3 #include { int a[N][M],i,j,min,row,col; printf(\"input a array:\"); for(i=0;i printf(\"max=%d,row=%d,col=%d\} int fun(int array[N][M]) { int min,i,j; min=array [0][0]; Row=0; Col=0; for(i=0;i return(min); } 答案: 1). {for(j=0;j 〖第19题〗『程序改错』(10分) 题目:求n!,n值由键盘输入。 程序中共有4条错误语句,请改正错误。 #include /**********FOUND**********/ int t; printf(\"please input n(n>=0):\"); /**********FOUND**********/ scanf(\"%d\ i=1; /**********FOUND**********/ t=0; while(i<=n) /**********FOUND**********/ { t+=i; i++; } printf(\"%d!=%f\} 答案: 1). 2). 3). 4). float t; 或 double t; scanf(\"%d=1.0; 或 t=1; { t*=i; 或 { t=t*i; 因篇幅问题不能全部显示,请点此查看更多更全内容