C语言程序改错——答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

程序改错--------------------------------------------------------请改正程序中的错误,使它能得出正确的结果。注意:不可以增加或删除程序行,也不可以更改程序的结构。------------------------------------------------------*/题目1:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49和21,则输出的最大公约数为7。intfun(inta,intb){intr,t;if(ab){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;m100;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;im;i++)/**********FOUND**********/if(m%i=0)k=0;/**********FOUND**********/returnm;}答案:1).intfun(intm)或fun(intm)2).for(i=2;im;i++)或for(i=2;mi;i++)或for(i=2;i=m-1;i++)或for(i=2;m-1=i;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;i20;i++)或for(i=1;20i;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;i10;i++)/***********FOUND***********/scanf(%d,a[i]);for(i=0;i10;i++)printf(%d,a[i]);min=a[0];/***********FOUND***********/for(i=3;i10;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;i10;i++)printf(%d,a[i]);printf(\nk=%d\nmin=%d\n,k,min);return0;}答案:1).scanf(%d,&a[i]);2).for(i=1;i10;i++)或for(i=0;i10;i++)或for(i=1;i=9;i++)或for(i=0;i=9;i++)3).if(a[i]min)4).a[k]=a[0];题目5:函数fun的功能是:求1到20的阶乘的和。请改正程序中的错误,使它能得出正确的结果。voidfun(void){intn,j;floats=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,s);}intmain(void){fun();return0;}答案:1).t=1;或t=1.0;2).t=t*j;或t*=j;3).s=s+t;或s+=t;4).printf(jiecheng=%f\n,s);题目6:fun函数的功能是:给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数。例如,n=6时,输入23.5,45.67,12.1,6.4,58.9,98.4所得平均值为40.828335,在平均值以下的实数个数应为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[]={23.5,45.67,12.1,6.4,58.9,98.4};printf(%d\n,fun(x,6));return0;}答案:1).floatxa=0;或floatxa=0.0;2).for(j=0;jn;j++)或for(j=0;nj;j++)或for(j=0;n-1=j;j++)或for(j=0;j=n-1;j++)3).for(j=0;jn;j++)或for(j=0;nj;j++)或for(j=0;j=n-1;j++)或for(j=0;n-1=j;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:以下程序输出前六行杨辉三角形,即111121133114641……………………intmain(void){staticinta[6][6];inti,j,k;/***********FOUND***********/for(i=1;i=6;i++)/***********FOUND***********/{for(k=0;k5+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;i6;i++)或for(i=0;i=5;i++)2).for(k=0;k5-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。请改正程序中的语法错误,使它能运行出正确的结果。#includeconio.h#includestdio.h#includestring.hintfun(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(t

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功