程序改错2
【程序改错-1】
题目:在一个一维整型数组中找出其中最大的数及其下标。程序中共有4条错误语句,请改正错误。『错误答案』:
1 int fun(int *a,int *b,int n)
2 *b=c-a;}
3 scanf("%d",&a[i]);
4 max=fun(a,&p,N); 【程序改错-2】
题目:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。程序中共有4条错误语句,请改正错误。
『错误答案』:
1 scanf("%d",p++);
2 max=p;
3 if(★max★==★arr ★)
4 for(i=0;i
for(p=arr;p 『Turbo C——程序改错』【程序改错-3】 题目:用起泡法对10个整数从小 到大排序。程序中共有4条错误语句,请改正错误。 『错误答案』: 1 void sort(int *x,int n) 2 for(j=0;j<★n★-1★-i★;j++) 或 for(j=0;★n★-1 ★-i★>j;j++) 或 for(j=0;j ★)>j;j++) 3 if(x[j]>x[★j★+★1★]) 或 if(x[★j★+★1]★ 4 sort(a,n); 『Turbo C——程序改错』【程序改错-4】 题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。程序中共有4条错误语句,请改正错误。 『错误答案』: 1 scanf("%d",&number); 2 for(i=N-2;i>=0;i--) 或 for(i=N-2;0<=i;i--) 3 a[★i★+★1 ★]=a[i]; 4 break;} 『Turbo C——程序改错』【程序改错-5】 题目:将一个字符串中第m个字符开始的全部字符复制成为另一 个字符串。 程序中共有4条错误语句,请改正错误。 『错误答案』: 1 { char *p1,*p2; 或{ char *p2,*p1; 2 p1= ★str1★+★m★ -1; 或 p1=-1+★str1★+★m★; 3 while(*p1) 4 strcopy(str1,str2,m); 【程序改错-6】 题目:以下程序的功能是求如下表达式:请改正程序中的错误,使程序能得到正确的运行结果。 『错误答案』: 1 scanf("%d",&n); 2 float fun(int n) 3 for(i=1;i<=n;i++) 或 for(i=1;n>=i;i++) 或 for(i=1;i for(i=1;n+1>i;i++) 4 s+=1.0/t 或 s=★s★+★1.0★/(float)t; 或 s=★s★ +★1.0★/t; 或 s+=1.0/(float)t 【程序改错-7】 题目:下面程序的功能是利用二维数组输出如图所示的图形。请改正程序中的错误,使程序能得到正确的运行结果。『错误答案』: 1 #define N 7 2 a[i][j]=' '; 3 z=z-1; 或 z--; 或 z=-1+z; 或 z=(n+1)/2-1; 或 z=(1+n)/2-1 4 printf("%c",a[i][j]); 【程序改错-8】 题目:输入一行英文文本,将每一 个单词的第一个字母变成大『错误 答案』: 1 fun(char *p) 或 fun(char p[]) 2 while(*p!='\0') 或 while(*p) 3 k=1;} 4 p++; 或 p=1+p; 或 ++p; 或 p=p+1; 【程序改错-9】 题目:将一个字符串中的大写字母 转换成小写字母。 例如:输入aSdFG输出为 asdfg。 『错误答案』: 1 char fun(char *c) 2 return *c; 或 return (*c); 或 return(*c); 3 { char s[81],*p=s; 4 putchar(*p); 或 printf("%c",*p); 【程序改错-10】 题目:将若干学生的档案存放在一 个文件中,并显示其内容。错误答 案』: 1 { struct student *p 2 FILE *fp; 3 for(p=stu;p<★stu★ +★3★;p++) 或 for(p=stu;★ stu★+★3★>p;p++) 或 for(p=stu;p<=★stu★+★2 ★;p++) 或 for(p=stu;★stu★+ ★2★>=p;p++) 4 printf("%4d %-10s %4d\n",(*p) .num ,p->name,(*p).age); 【程序改错-11】 题目:下列给定程序中,函数fun 的功能是:判断m是否为素数,若 是返回1,否则返回0。主函数的 功能是:按每行5个输出1-100 之间的全部素数。『错误答案』: 1 int fun( int m) 或 fun( int m) 2 for(i=2;i for(i=2;m>i;i++) 或 for(i=2;i<=m-1;i++) 或 for(i=2;m-1=>i;i++) 3 if(★m%i★==★0★) k=0; 4 return k; 或 return(k); 【程序改错-12】 题目:函数fun的功能是:用下面 的和式求圆周率的近似值。直 到最后一项的绝对值小于 等于0.0001。 错误答案』: 1 #include "math.h" 2 float s=0,t=1,p=1; 或 float s=0,p=1,t=1; 或 float p=1,s=0,t=1; 或 float p=1,t=1,s=0; 或 float t=1,p=1,s=0; 或 float t=1,s=0,p=1; 3 while(fabs(t)>1e-4) 或 while(0.0001 while(1e-4 while(fabs(t)>0.0001) 4 printf("pi=%f\n",★ s★*★4★); 【程序改错-13】 题目:下列给定程序中,函数fun 的功能是:求1到10的阶乘的 和。主函数和fun函数中, 各有两个错误,\『错误答案』: 1 for(i=1;i<=10;i++) 或 for(i=1;10>=i;i++) 或 for(i=1;i<11;i++) 或 for(i=1;11>i;i++) 2 s=★s★+★fac(i)★; 或 s+=fac(i); 3 float y=1.0; 或 float y=1; 4 return y; 或 return(y); 或 return (y); 【程序改错-14】 题目:函数fun的功能是:求1到 20的阶乘的和。请改正程序中的错 误,使它能得出正确的结果。 『错误答案』: 1 t=1; 或 t=1.0; 2 t=★t★*★j★; 或 t*=j; 3 s=★s★+★t★; 或 s+=t; 4 printf("jiecheng=%f\n",s); 【程序改错-15】 题目:函数fun的功能是:输出 Fabonacci数列的前20项,要求变 量类型定义成浮点型,输出 时只输出整数部分,输出项 数不得多于或少于20。 『错误答案』: 1 printf("%8.0f",f1); 或 printf("%f",f1); 2 for(i=1;i<20;i++) 或 for(i=1;20>i;i++) 或 for(i=2;i<=20;i++) 或 for(i=2;20>=i;i++) 或 for(i=1;i<=19;i++) 或 for(i=1;19>=i;i++) 3 f1=f2; 4 f2=f3; 【程序改错-16】 题目:函数fun的功能是:根据整 型形参m的值,计算如下公式的值。 1 1 1 t = 1- —— - —— - ... - —— 2x2 3x3 mxm 『错误答案』: 1 for(i=2;i<=m;i++) 或 for(i=2;m>=i;i++) 或 2 y-=1.0/(i*i); 或 y=y-1.0/(i*i); 或 3 return y; 或 return (y); 【程序改错-17】 题目:函数fun的功能是:实现交 换两个整数的值。例如给a和b 分别输入3和6 ,输出为 a=6 b=3『错误答案』: 1 void fun (int *a,int *b) 或 fun (int *a,int *b) 2 t=*a; 3 *a=*b; 4 *b=t; 【程序改错-18】 题目:函数fun的功能是:计算并 输出k以内最大的10个能被13 或17整除的自然数之和。k 的值由主函数传入,若k的值 为500,则函数值为4622。 请更改程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 while (★(2<=k)★&& ★(mc<10)★) 或 while (★(k>=2) ★&&★(10 2 if (★(★k%17★==★ 0)★||★(k%13★==★0)★) 或 if !((k%17!=0)&&(k%13!=0)) 3 k--; 4 return m; 或 return(m); 【程序改错-19】 题目:函数fun的功能是:计算正 整数num的各位上的数字之积。 例如,输入252,则输出应 该是20。『错误答案』: 1 long k=1; 2 num/=10; 或 num=num/10; 3 scanf("%ld",&n); 4 printf("\n%ld\n",fun(n)); 【程序改错-20】 题目:已知一个数列从第0项开始 的前三项分别为0、0、1,以 后的各项都是其相邻的前 三项的和。下列给定程序中, 函数fun的功能是:计算并 输出该数列的前n项的平方根 之和sum,n的值通过形参传 入。 『错误答案』: 1 double fun (int n) 2 sum=1.0; 3 s2=1.0; 4 for(k=4;k<=n;k++) 或 for(k=4;n>=k;k++) 【程序改错-21】 题目:函数fun的功能是:根据以 下公式求π值,并作为函数值 返回。例如,给指定精度的 变量eps输入0.0005时,应当 输出Pi=3.140578。 『错误答案』: 1 t=1; 或 t=1.0; 2 while (t>eps) 或 while (eps 或 while (eps<=t) 3 t=t*n/(2*n+1); 或 1.0*n/(2*n+1)*t 4 return (2*s); 或 return(2*s); 或 return (s*2); 或 return(s*2); 【程序改错-22】 题目:函数fun的功能是:求出两 个非零正整数的最大公约数, 并作为函数值返回。例如, 若给num1和num2分别输入49 和21,则输出的最大公约数 为7。 请改正程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 a=b; 2 b=t; 3 r=a%b;} 4 return b; 或 return (b); 或 return(b); 【程序改错-23】 题目:在主函数中从键盘输入若干 个数放入数组中,用0结束输 入并放在最后一个元素中。 下列给定程序中,函数fun的 功能是:计算数组元素中值 为正数的平均值(不包括0)。 例如,数组中元素的值依次 为39,-47,21,2,-8,15, 0,则程序的运行结果为 19.250000。 请改正程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 double sum=0.0; 2 while(★s[i]★!=★0 ★) 或 while!(s[i]==0) 或 while!(0==s[i]) 3 sum/=c; 或 sum=sum/c; 4 return sum; 或 return (sum); 【程序改错-24】 题目:fun函数的功能是:先从键 盘上输入一个3行3列矩阵的各 个元素的值,然后输出主对 角线上的元素之和sum。 请改正程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 sum=0; 2 scanf("%d",&a[i][j]); 3 sum=★sum★+★ a[i][i]★; 或 sum+=a[i][i]; 4 printf("sum=%d\n",sum); 【程序改错-25】 题目:fun函数的功能是:给定n 个实数,输出平均值,并统计 在平均值以下(含平均值) 的实数个数。例如,n=6时, 输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值 为40.828335,在平均值以 下的实数个数应为3。 请改正程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 float xa=0; 或 float xa=0.0; 2 for(j=0;j for(j=0;n>j;j++) 或 for(j=0;n-1>=j;j++) 或 for(j=0;j<=n-1;j++) 3 for(j=0;j for(j=0;n>j;j++) 或 for(j=0;j<=n-1;j++) 或 for(j=0;n-1>=j;j++) 4 return c; 或 return (c); 【程序改错-26】 题目:fun函数的功能是:找出大 于m的最小素数,并将其作为 函数值返回。 请改正程序中的错误,使它 能得出正确的结果。 『错误答案』: 1 for(k=2;k for(k=2;i>k;k++) 2 if(★i%k★==★0★) break; 3 if(i<=k) 或 if(k>=i) 或 if(★k★==★i★) 4 return i; 或 return (i); 或 return(i); 【程序改错-27】 题目:fun函数的功能是:实现3 行3列矩阵的转置,即行列互换。 请改正程序中的错误,使它能得出正确的结果。 『错误答案』: 1 scanf("%d",&a[i][j]); 2 for(j=0;jj;j++) 或 for(j=0;j<=i;j++) 或 for(j=0;i>=j;j++) 或 for(j=i+1;j for(j=i;j 3 t=a[i][j]; 4 a[j][i]=t; 【程序改错-28】 题目:fun函数的功能是:求一个 3行4列矩阵的外框的元素值之 和,注意,矩阵四个角上的元素不能重复加。例如,矩阵 元素为1,2,3,4,5,6,7,8,9,10,11,12时,四 框元素值之和应为65。 请改正程序中的错误,使它能得出正确的结果。 『错误答案』: 1 int i,j,s,s1=0,s2=0,s3=0,s4=0; 2 s2=★s2★+★ a[m-1][j]★; 或 s2+=a[m-1][j]; 3 for(i=1;i for(i=1;m-1>i;i++) 或 for(i=1;-1+m>i;i++) 或 for(i=1;i<=m-2;i++) 或 for(i=1;m-2>=i;i++) 4 s=s1+s2+s3+s4; 【程序改错-29】 题目:fun函数的功能是:实现两个字符串的连接。 例如:输入dfdfqe和12345时,则输出dfdfqe12345. 请改正程序中的错误,使它能得出正确的结果。 『错误答案』: 1 while(★s1[i]★!=★'\0'★)i++; 或 while!(s1[i]=='\0')i++; 2 while(★s2[j]★!=★'\0'★) 或 while!(s2[j]=='\0') 3 s1[i]=s2[j]; 4 s1[i]='\0'; 【程序改错-30】 题目:将字符串s中最后一次出现的子字符串t1替换成字符串t2, 所形成的新串放在w所指的数组中,在此处,要求t1和t2 所指字符串的长度相同。 例如,当s所指字符串中的内容为"abcdabfabc",t1中的 内容为"ab",t2中的内容为"99"时,结果w所指数组中的 内容应为"abcdabf99c"。 请改正程序中的语法错误,使它能运行出正确的结果。 『错误答案』: 1 while (*w) 或 while (*w!=0) 或 while (*w!='\0') 或for (;*w;) 或 for (;*w!='\0';) 2 if ( ★*r★ == ★*p ★ ) { r++; p++; } 3 if (★ *r ★==★ '\0'★ ) a = w; 或 if (★ *r ★==0 ) a = w; 4 *a=*r; 【程序改错-31】 题目:将s所指字符串的反序和正序进行连接形成一个新串放在 t所指的数组中。 例如:当s所指的字符串的内容为"ABCD"时,t所指数组中 的内容为"DCBAABCD"。 请改正程序中的语法错误,使它能运行出正确的结果。『错误答案』: 1 void fun (char s[],char t[]) 或 void fun (char t[],char s[]) 2 d = strlen(s); 3 for (i = 0; i 或 for (i = 0; d>i; i++) 或 for (i = 0; i<=d-1; i++) 或 for (i = 0; d-1>=i; i++) 4 t[★2★*★d★] = '\0'; 【程序改错-249】 题目:下面程序的功能是:从键盘 输入十个学生的成绩,统计最 高分,最低分和平均分。max 代表最高分,min代表最低分, avg代表平均分。 『错误答案』: 1 float a[10],min,max,avg; 2 scanf("%f",&a[i]); 3 max=min=avg=a[0]; 4 if (min>a[i]) 【程序改错-250】 题目:以下程序输出前六行杨辉三 角形,既 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ………… ………… 『错误答案』: 1 for(i=0;i<6;i++) 或 for(i=0;i<=5;i++) 2 for(k=0;k<5-i;k++) 3 if(j==0||j==i) 4 a[i][j]=a[i-1][j-1]+a[i-1][j]; 或 a[i][j]=a[i-1][j]+a[i-1][j-1] ; 【程序改错-251】 题目:有一数组内放10个整数,要 求找出最小数和它的下标,然后 把它和数组中最前面的元素即第 一个数对换位置. 『错误答案』: 1 scanf("%d",&a[i]); 2 for(i=1;i<10;i++) 或 for(i=0;i<10;i++) 或 for(i=1;i<=9;i++) 或 for(i=0;i<=9;i++) 3 if(a[i] 4 a[k]=a[0]; 【程序改错-253】 题目:有一数组内放10个整数,要 求找出最小数和它的下标,然后 把它和数组中最前面的元素即第 一个数对换位置. 『错误答案』: 1 for(i=1;i<10;i++) 或 for(i=1;i<=9;i++) 2 float score[10],aver; 3 scanf("%f", &score[i]); 4 aver=average(score); 【程序改错-254】 题目:一个已排好序的一维数组, 输入一个数number,要求按原来 排序的规律将它插入数组中. 『错误答案』: 1 for(i=0;i<10;i++) 或 for(i=0;i<=9;i++) 2 end=a[9]; 3 if(number>end) a[10]=number; 4 if(a[i]>number) 【程序改错-255】 题目:用"起泡法"对输入的十个字 符排序后按从小到大的次序输出. 『错误答案』: 1 scanf("%s", str); 2 sort(str); 3 for(i=0;(i ');i++) 4 if(str[i]>str[i+1]) 【程序改错-256】 题目:以下程序把两个数按由大到 小的顺序输出来. 『错误答案』: 1 swap( int *p1,int *p2) 2 scanf("%d%d",&a,&b); 3 p1=&a;p2=&b; 4 printf("max=%d,min=%d\n",*p1, *p2); 【程序改错-257】 题目:将6个数按输入时顺序的逆 序进行排列. sort(*p,6); for(i=0;i<=5;i++) printf("%d",num[i]); } 『错误答案』: 1 p1=p+i; p2=p+(m-1-i); 2 char *p,num[6]; 3 scanf("%d",&num[i]); 【程序改错-258】 题目:用指针作函数参数,编程序 求一维数组中的最大和最小的元 素值. 『错误答案』: 1 void maxmin(int arr[ ],int *pt1,int *pt2,int n) 2 *pt1=*pt2=arr[0]; 3 if(arr[i]>*pt1) 4 p1=&a;p2=&b; 程序改错 ================================================== 题号:7471 /*------------------------------------------------------ 【程序改错】:只允许修改错误代码,其他代码不允许修改! -------------------------------------------------------- 功能:计算正整数num的各位上的数字之积。 例如:若输入:252,则输出应该是:20。 若输入:202,则输出应该是:0。 ------------------------------------------------------*/ #include num/=10; 【或】 num=num/10; 位置 3: } while(num) ; 【或】 while(num!=0) 题号:7383 /*------------------------------------------------------ 【程序改错】:只允许修改错误代码,其他代码不允许修改! -------------------------------------------------------- 功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。例如:输入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 程序改错题 (注意:每小题只有1行有错误,答题时请指出错误位置并给出改正结果)1. 输出计算结果。 main() { int a=b=10; a+=b+5; b*=a+=10; printf("%d%d\n",a,b); } 2. 输出计算结果。 #include 输出程序运行结果。 #include 程序改错C
程序改错题
c语言程序改错