C语言程序改错答案.docx
- 文档编号:18028958
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:94
- 大小:403.83KB
C语言程序改错答案.docx
《C语言程序改错答案.docx》由会员分享,可在线阅读,更多相关《C语言程序改错答案.docx(94页珍藏版)》请在冰点文库上搜索。
C语言程序改错答案
C语言程序改错——答案(总49页)
程序改错
--------------------------------------------------------
请改正程序中的错误,使它能得出正确的结果。
注意:
不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
题目1:
函数fun的功能是:
求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49和21,则输出的最大公约数为7。
intfun(inta,intb)
{
intr,t;
if(a
{
t=a;
/**********FOUND**********/
b=a;
/**********FOUND**********/
a=t;
}
r=a%b;
while(r!
=0)
{
a=b;
b=r;
/**********FOUND**********/
r=a/b;
}
/**********FOUND**********/
returna;
}
intmain(void)
{
intnum1,num2,a;
scanf("%d%d",&num1,&num2);
a=fun(num1,num2);
printf("themaximumcommondivisoris%d\n\n",a);
return0;
}
答案:
1).a=b;
2).b=t;
3).r=a%b;}
4).returnb;或return(b);或return(b);
题目2:
下列给定程序中,函数fun的功能是:
判断m是否为素数,若是返回1,否则返回0。
主函数的功能是:
按每行5个输出1-100之间的全部素数。
请改正程序中的4个错误,使它能得出正确的结果。
intmain(void)
{
intm,k=0;
for(m=1;m<100;m++)
if(fun(m)==1)
{
printf("%4d",m);k++;
if(k%5==0)printf("\n");
}
return0;
}
/**********FOUND**********/
voidfun(intn)
{
inti,k=1;
if(m<=1)k=0;
/**********FOUND**********/
for(i=1;i /**********FOUND**********/ if(m%i=0)k=0; /**********FOUND**********/ returnm; } 答案: 1).intfun(intm)或fun(intm) 2).for(i=2;i 3).if(m%i==0)k=0; 4).returnk; 题目3: 函数fun的功能是: 输出Fabonacci数列的前20项,要求变量类型定义成浮点型,输出时只输出整数部分,输出项数不得多于或少于20。 请改正程序中的4个错误,使它能得出正确的结果。 voidfun(void) { inti; floatf1=1,f2=1,f3; /**********FOUND**********/ printf("%8d",f1); /**********FOUND**********/ for(i=1;i<=20;i++) { f3=f1+f2; /**********FOUND**********/ f2=f1; /**********FOUND**********/ f3=f2; printf("%8.0f",f1); } printf("\n"); } intmain(void) { fun(); return0; } 答案: 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; 题目4: 有一数组内放10个整数,要求找出最小数和它的下标,然后把它和数组中最前面的元素即第一个数对换位置。 intmain(void) { inti,a[10],min,k=0; printf("\npleaseinputarray10elements\n"); for(i=0;i<10;i++) /***********FOUND***********/ scanf("%d",a[i]); for(i=0;i<10;i++) printf("%d",a[i]); min=a[0]; /***********FOUND***********/ for(i=3;i<10;i++) /***********FOUND***********/ if(a[i]>min) { min=a[i]; k=i; } /***********FOUND***********/ a[k]=a[i]; a[0]=min; printf("\naftereschange: \n"); for(i=0;i<10;i++)printf("%d",a[i]); printf("\nk=%d\nmin=%d\n",k,min); return0; } 答案: 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]; 题目5: 函数fun的功能是: 求1到20的阶乘的和。 请改正程序中的错误,使它能得出正确的结果。 voidfun(void) { intn,j; floats=,t=; 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",s); } intmain(void) { fun(); return0; } 答案: 1).t=1;或t=; 2).t=t*j;或t*=j; 3).s=s+t;或s+=t; 4).printf("jiecheng=%f\n",s); 题目6: fun函数的功能是: 给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数。 例如,n=6时,输入,,,,,所得平均值为,在平均值以下的实数个数应为3。 请改正程序中的错误,使它能得出正确的结果。 intfun(floatx[],intn) { intj,c=0; /**********FOUND**********/ floatj=0; /**********FOUND**********/ for(j=0;j<=n;j++) xa+=x[j]; xa=xa/n; printf("ave=%f\n",xa); /**********FOUND**********/ for(j=0;j<=n;j++) if(x[j]<=xa)c++; /**********FOUND**********/ returnxa; } intmain(void) { floatx[]={,,,,,}; printf("%d\n",fun(x,6)); return0; } 答案: 1).floatxa=0;或floatxa=; 2).for(j=0;j 3).for(j=0;j 4).returnc;或return(c); 题目7: 函数fun的功能是: 计算正整数num的各位上的数字之积。 例如,输入252,则输出应该是20。 请改正程序中的错误,使它能得出正确的结果。 longfun(longnum) { /**********FOUND**********/ longk; do { k*=num%10; /**********FOUND**********/ num\=10; }while(num); returnk; } intmain(void) { longn; printf("\nPleaseenteranumber: "); /**********FOUND**********/ scanf("%ld",n); /**********FOUND**********/ printf("\n%ld\n",fun(longn)); return0; } 答案: 1).longk=1; 2).num/=10;或num=num/10; 3).scanf("%ld",&n); 4).printf("\n%ld\n",fun(n)); 题目8: 以下程序输出前六行杨辉三角形,即 1 11 121 1331 14641 ………… ………… intmain(void) { staticinta[6][6]; inti,j,k; /***********FOUND***********/ for(i=1;i<=6;i++) /***********FOUND***********/ { for(k=0;k<5+i;k++) printf(""); for(j=0;j<=i;j++) { /***********FOUND***********/ if(j==0&&j==i) a[i][j]=1; else /***********FOUND***********/ a[i][j]=a[i-1][j-1]+a[i][j-1]; printf(""); printf("%-3d",a[i][j]); } printf("\n"); } return0; } 答案: 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).elsea[i][j]=a[i-1][j-1]+a[i-1][j]; 题目9: 将字符串s中最后一次出现的子字符串t1替换成字符串t2,所形成的新串放在w所指的数组中,在此处,要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为"abcdabfabc",t1中的内容为"ab",t2中的内容为"99"时,结果w所指数组中的内容应为"abcdabf99c"。 请改正程序中的语法错误,使它能运行出正确的结果。 #include<> #include<> #include<> intfun(char*s,char*t1,char*t2,char*w) { inti;char*p,*r,*a; strcpy(w,s); /**********FOUND**********/ while(w) { p=w;r=t1; while(*r) /**********FOUND**********/ if(*r=*p){r++;p++;} elsebreak; /**********FOUND**********/ if(*r=='/0')a=w; w++; } r=t2; while(*r) { /**********FOUND**********/ a=*r; a++;r++;} } intmain(void) { chars[100],t1[100],t2[100],w[100]; clrscr(); printf("\nPleaseenterstringS: ");scanf("%s",s); printf("\nPleaseentersubstringt1: ");scanf("%s",t1); printf("\nPleaseentersubstringt2: ");scanf("%s",t2); if(strlen(t1)==strlen(t2)) { fun(s,t1,t2,w); printf("\nTheresultis: %s\n",w); } elseprintf("\nError: strlen(t1)! =strlen(t2)\n"); return0; } 答案: 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; 题目10: 以下程序的功能是求如下表达式: 请改正程序中的错误,使程序能得到正确的运行结果。 #include<> intmain(void) { intn; floatfun(); printf("Pleaseinputanumber: "); /**********FOUND**********/ print("%d",n); printf("%10.6f\n",fun(n)); return0; } /**********FOUND**********/ fun(intn) { inti,j,t; floats; s=0; /**********FOUND**********/ while(i=1;i<=n;i++); { t=0; for(j=1;j<=i;j++) t=t+j; /**********FOUND**********/ =s+1/t; } returns; } 答案: 1).scanf("%d",&n); 2).floatfun(intn) 3).for(i=1;i<=n;i++)或for(i=1;n>=i;i++)或for(i=1;i 4).s+=t或s=s+(float)t;或s=s+t;或s+=(float)t 题目11: fun函数的功能是: 找出大于m的最小素数,并将其作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 intfun(intm) { inti,k; for(i=m+1;;i++) { /**********FOUND**********/ for(k=1;k /**********FOUND**********/ if(i%k! =0)break; /**********FOUND**********/ if(k /**********FOUND**********/ returnk; } } intmain(void) { intn; scanf("%d",&n); printf("%d\n",fun(n)); return0; } 答案: 1).for(k=2;kk;k++) 2).if(i%k==0)break; 3).if(i<=k)或if(k>=i)或if(k==i) 4).returni;或return(i); 题目12: 用起泡法对10个整数从小到大排序。 程序中共有4条错误语句,请改正错误。 /**********FOUND**********/ voidsort(intx,intn) { inti,j,k,t; for(i=0;i /**********FOUND**********/ for(j=0;j /**********FOUND**********/ if(x[i]>x[i+1]) {t=x[j];x[j]=x[j+1];x[j+1]=t;} } intmain(void) { inti,n,a[100]; printf("pleaseinputthelengthofthearray: \n"); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); /**********FOUND**********/ sort(n,a); printf("outputthesortedarray: \n"); for(i=0;i<=n-1;i++) printf("%5d",a[i]); printf("\n"); return0; } 答案: 1).voidsort(int*x,intn) 2).for(j=0;j 3).if(x[j]>x[j+1])或if(x[j+1] 4).sort(a,n); 题目13: 以下程序把两个数按由大到小的顺序输出来. /***********FOUND***********/ swap(int*p1,*p2) { intp; p=*p1; *p1=*p2; *p2=p; } intmain(void) { inta,b,*p1,*p2; printf("inputa,b: "); /***********FOUND***********/ scanf("%d%d",a,b); /***********FOUND***********/ *p1=&a;*p2=&b; if(a printf("a=%d,b=%d\n",a,b); /***********FOUND***********/ printf("max=%d,min=%d\n",p1,p2); return0; } 答案: 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); 题目14: 有一数组内放10个整数,要求找出最小数和它的下标,然后把它和数组中最前面的元素即第一个数对换位置. floataverage(floatarray[10]) { inti; floataver,sum=array[0]; /***********FOUND***********/ for(i=0;i<10;i++) sum=sum+array[i]; aver=sum/; return(aver); } intmain(void) { /***********FOUND***********/ intscore[10],aver; inti; printf("input10scores: \n"); for(i=0;i<10;i++) /***********FOUND***********/ scanf("%f",score); printf("\n"); /***********FOUND***********/ aver=average(score[10]); printf("averagescoreis%5.2f",aver); return0; } 答案: 1).for(i=1;i<10;i++)或for(i=1;i<=9;i++) 2).floatscore[10],aver; 3).scanf("%f",&score[i]); 4).aver=average(score); 题目15: 为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。 intmain(void) { inta[10]; voidinput(); voidoutput(); voidmax_min(); input(a,10); max_min(a,10); output(a,10); return0; } voidinput(int*arr,intn) { int*p,i; p=arr; printf("pleaseenter10integers: \n"); for(i=0;i /**********FOUND**********/ scanf("%d",p); } voidmax_min(int*arr,intn) { int*min,*max,*p,t; min=max=arr; for(p=arr+1;p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 改错 答案