c语言改错题及答案_第1页
c语言改错题及答案_第2页
c语言改错题及答案_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语百改错题及答案【篇一:c语言二级上机(t填空,改错,编程)题库及答案】100套题目(每套题目包含3道题:一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题)二级c语言上机试题汇编淤第01套:给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下

2、的blankl.c中。不得增行或删行,也不得更改程序的结构!给定源程序:#includestdio.hvoidfun(unsignedlong*n)unsignedlongx=0,i;intt;i=1;while(*n)/*found*/t=*n%_1/*found*/if(t%2!=_2_)x=x+t*i;i=i*10;*n=*n/10;/*found*/*n=_3_;main()(unsignedlongn=-1;while(n99999999|n0)(printf(pleaseinput(0n100000000):);scanf(%ld,n);fun(n);printf(ntheresu

3、ltis:%ldn,n);【参考答案】100x解题思路:第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10第二处:判断是否是奇数,所以应填:0。第三处:最后通形参n来返回新数x,所以应填:x。*给定程序modi1.c中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includestdio.hdoublefun(intn)(doubleresult=1.0;/*found*/ifn=0return1.0;while(n1n170)/

4、*found*/result*=n-returnresult;main()(intn;printf(inputn:);scanf(%d,n);printf(nn%d!=%lfnn,n,fun(n);if(n=0)解题思路:第一处:条件语句书写格式错误,应改为:第二处:语句后缺少分号。*请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。例如,若输入字符串-1234,则函数把它转换为整数值-1234。函数fun中给出的语句仅供参考。注意:部分源程序存在文件progl.c文件中请勿改动主函数main和其它函数中的任何内容,仅在函数fun

5、的花括号中填入你编写的若干语句。给定源程序:#includestdio.h#includestring.hlongfun(char*p)main()/*主函数*/chars6;voidnono();longn;printf(enterastring:n);gets(s);n=fun(s);printf(%ldn,n);nono();voidnono()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。file*fp,*wf;inti;chars20;longn;fp=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i10;i+)fscanf

6、(fp,%s,s);n=fun(s);fprintf(wf,%ldn,n);fclose(fp);fclose(wf);解题思路:本题是将一个数字字符串转换为一个整数。参考答案二:longfun(char*p)(/*以下代码仅供参考*/inti,len,t;/*len为串长,t为正负标识*/longx=0;len=strlen(p);if(p0=-)(t=-1;len-;p+;elset=1;/*以下完成数字字符串转换为一个数字*/while(*p)x=x*10-48+(*p+);returnx*t;*/注意:由于nono()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省

7、略nono()淤第02套:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的blank1.c中。不得增行或删行,也不得更改程序的结构!给定源程序:#includestdio.hvoidfun(char*s,inta,doublef)(/*found*/_1fp;charch;fp=fopenfile1.txt,w);fprintf(fp,%s%d%fn,s,a,f);fclose(fp);fp=fopenfile

8、1.txt,r);printf(ntheresult:nn);ch=fgetc(fp);/*found*/while(!feof(_2_)/*found*/putchar(_3_);ch=fgetc(fp);putchar(n);fclose(fp);main()chara10=hello!;intb=12345;doublec=98.76;fun(a,b,c);【参考答案】(1)file*(2)fp(3)ch解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显7K在屏帛上。第一处:定义文本文件类型变量,所以应填:file*O第二处:判断文件是否结束,所以应填:fp。第三处:

9、显示读出的字符,所以应填:ch。*给定程序modi1.c中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includestdio.hvoidfun(char*s)inti,j;for(i=0,j=0;si!=0;i+)if(si=0si=9)/*found*/sj=si;/*found*/sj=0;main()(charitem80;printf(nenterastring:);gets(item);printf(nnthe

10、stringis:%sn,item);fun(item);printf(nnthestringofchangingis:%sn,item);【参考答案】s:j+:=s:i:;s:j:=0;解题思路:第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字符串的位置,所以应改为:sj+=si;。第二处:置新字符串的结束符,所以应改为:sj=0;.*请编写函数fun,函数的功能是:将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,二维数组中的数据为:wwwwssss【篇二:C语言程序改错题库】一、程序改错共138题(共计1380分)第2题(10

11、.0分)/*第1题(10.0分)/*功能:根据整型形参计算如下公式的值:y=1+1/3+1/5+1/7+.+1/(2m-3)*/#includestdio.hdoublefun(intm)/*found*/doubley=1int/*found*/y+=1.0/(2i-3);return(y);voidmain(void)intn;clrscr();printf(entern:);scanf(%d,n);printf(ntheresultis%1fn,fun(n);getch();答案:*found*/for(i=3;im;i+)1) .doubley=1;2).for(i=3;i=m;i+)

12、或for(i=3;im+1;i+)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。*/#includestdio.h#definen20voidfun(inta,intn)inti,j,t,p;for(j=0;jn-1;j+)/*found*/p=jfor(i=j;in;i+)/*found*/if(aiap)/*found*/p=j;t=ap;ap=aj;aj=t;main()intan=9,6,8,3,-1,i,m=5;printf(排序前的数据:);for(i=0;im;i+)printf(%d,ai);printf(n);fun(a,m);printf(排序后的数据:);fo

13、r(i=0;im;i+)printf(%d,ai);printf(n);getch();答案:1).p=j;2).if(aiap)或if(apai)3).p=i;第3题(10.0分)/*功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。*/#includestdio.h#includestring.hvoidmain()charstr100,*p,*q,*r,c;printf(输入字符串:);gets(str);/*found*/for(p=str;p;p+)for(q=r=p;*q;q+)if(*r*q)r=q;/*found*/if(r=p)/*

14、found*/c=r;*r=*p;*p=c;for(p=str;*p;p+)for(q=p;*p=*q;q+);strcpy(p+1,q);printf(结果字符串:snn,str);getch();答案:1).for(p=str;*p;p+).if(r!=p)3).c=*r;第4题(10.0分)/*功能:编写程序,求矩阵(3行3列)与5的乘积例如:输入下面的矩阵:100200300400500600700800900程序输出:50010001500200025003000350040004500*/#includestdio.hintfun(intarray33)/*found*/inti;

15、j;/*found*/for(i=1;i3;i+)for(j=0;j3;j+)/*found*/arrayij=arrayij/5;main()(inti,j;intarray33=(100,200,300,(400,500,600,(700,800,900;clrscr();for(i=0;i3;i+)(for(j=0;j3;j+)printf(%7d,arrayij);printf(n);fun(array);printf(convertedarray:n);for(i=0;i3;i+)(for(j=0;j3;j+)printf(%7d,arrayij);printf(n);getch()

16、;答案:1).inti,j;2).for(i=0;i3;i+)3).arrayij=arrayij*5;第5题(10.0分)/*功能:用起泡法对连续输入的十个字符排序后按从小到大的次序输出.*/#definen10#includestdio.h#includestring.hmain()(inti;charstrn;/*found*/for(i=0;in;i+)scanf(%c,stri);/*found*/sort(strn);for(i=0;in;i+)printf(%c,stri);printf(n);sort(charfor(i=0;in-j;i-)/*found*/if(strist

17、ri+1)(strn)(inti,j;chart;for(j=1;jn;j+)/*found*/t=stri;stri=stri+1;stri+1=t;答案:1).for(i=0;in;i+)scanf(%c,stri);2).sort(str);3).for(i=0;in-j;i+)4).if(stristri+1)或if(stri+1stri)第6题(10.0分)/*功能:读入一行英文文本,将其中每个单词的最后一个字母改成大写,然后输出此文本行(这里的单词”是指由空格隔开的字符串)。例如:若输入“iamastudenttotaketheexamination.,则应输出“iamastude

18、nttotaketheexamination.。”*/#includeconio.h#includestdio.h#includectype.h#includestring.hup1st(char*p)(/*found*/integerk=0;for(;*p;p+)if(k)(/*found*/if(*p=)(k=0;/*found*/*(p-1)=toupper(*(p-1);elseif(*p!=)k=1;*(p-1)=toupper(*(p-1);main()(charchrstr81;clrscr();printf(npleaseenterastring:);gets(chrstr);

19、printf(nnbeforechanging:n%s,chrstr);up1st(chrstr);printf(nafterchanging:n%s,chrstr);答案:1) .intk=0;2) .if(*p=)3) .*(p-1)=toupper(*(p-1);第7题(10.0分)/*功能:在一个一维整型数组中找出其中最大的数及其下标*/#definen10/*found*/floatfun(int*a,int*b,intn)(int*c,max=*a;max=*c;/*found*/b=c-a;returnmax;voidmain(void)(intan,i,max,p=0;prin

20、tf(pleaseenter10integers:n);for(i=0;in;i+)/*found*/get(%d,ai);*found*/m=fun(a,p,n);printf(max=%d,position=%d,max,p);答案:1).intfun(int*a,int*b,intn)2).*b=c-a;3).scanf(%d,ai);或scanf(%d,a+i);4).max=fun(a,p,n);第8题(10.0分)/*功能:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换,输出数组元素。*/voidmain(void)(inta10;voidinp

21、ut();voidoutput();voidmax_min();input(a,10);max_min(a,10);output(a,10);voidinput(int*arr,intn)(int*p,i;p=arr;printf(pleaseenter10integers:n);for(i=0;in;i+)/*found*/scanf(%d,p);voidmax_min(int*arr,intn)(int*min,*max,*p,t;min=max=arr;for(p=arr+1;parr+n;p+)/*found*/if(*p*max)max=p;elseif(*p*min)min=p;*

22、/t=*arr;*arr=*min;*min=t;/*foundif(max=arr)max=min;t=*(arr+n-1);*(arr+n-1)=*max;*max=t;voidoutput(int*arr,intn)int*p,i;p=arr;printf(thechangedarrayis:n);/*found*/while(i=0;in;i+)printf(%3d,*p+);printf(n);答案:1).scanf(%d,p+);或scanf(%d,arri);或scanf(%d,p+i);或scanf(%d,arr+i);2).if(*p*max)或if(*max*p)3).if

23、(max=arr)4).for(i=0;in;i+)或for(i=0;ni;i+)或for(p=arr;parr+n;)或for(i=0;i=n-1;i+)或for(i=0;n-1=i;i+)或for(p=arr;p=arr+n-1;)或for(p=arr;arr+n-1=p;)第9题(10.0分)/*【篇二:c语言上机题库改错】中,函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元

24、素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到lowhigh,查找结束。请改正程序中的错误,使它能得出正确结果。*/#includestdio.h#definen10/*error*/voidfun(inta,intm)intlow=0,high=n-1,mid;while(low=high)mid=(low+high)/2;if(mamid)high=mid-1;/*error*/elseif(m=amid)low=mid+1;elsereturn(mid);return(-1);main()(inti,an=(-3,4,7,9,1

25、3,45,67,89,100,180,k,m;printf(a数组中的数据如下:);for(i=0;in;i+)printf(%d,ai);printf(enterm:);scanf(%d,m);k=fun(a,m);if(k=0)printf(m=%d,index=%dn,m,k);elseprintf(notbefound!n);【改错1J正确【学生答案】voidfun(inta,intm)【参考答案】fun(inta,intm)【改错2】错误【学生答案】elseif(m=amid)【参考答案】elseif(mamid)elseif(amidm)elseif(m-amid0)elseif(

26、amid-m0)elseif(m-amid)elseif(!(amid=m)=/*给定程序modi.c中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。*/#includestdio.hintfun(inta,intb)(intr,t;if(ab)/*error*/(a=t;b=a;t=a;r=a%b;while(r!=0)(a=b;b=r;r=a%b;/*error*/return(a);ma

27、in()(intnum1,num2,a;printf(inputnumlnum2:);scanf(%d%d,num1,num2);printf(num1=%dnum2=%dnn,num1,num2);a=fun(num1,num2);printf(themaximuncommondivisoris%dnn,a);【改错1】错误【学生答案】(a=t;b=a;t=a;【参考答案】(t=a;a=b;b=t;(t=b;b=a;a=t;【改错2】错误【学生答案】return(a);【参考答案】return(b);returnb;=/*给定程序modi.c中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。*/#includestdio.hintfun(unsignedn,int*zero)(intcount=0,max=0,t;do(t=n%10;/*error*/if(t=0)count+;if(maxt)max=t;n=n/10;while

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论