2017年全国计算机等级考试C语言上机考试题库学生练习用第21套至第40套第二十一套1、程序填空给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为abs5def126jkm8,程序执行后的输出结果为22。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-----------------------------------------------------------------------------------------------------------------#includestdio.h#includestring.h#includectype.hintfun(char*s){intsum=0;while(*s){/**********found**********/if(isdigit(*s))sum+=*s-__1__;/**********found**********/__2__;}/**********found**********/return__3__;}main(){chars[81];intn;printf(\nEnterastring:\n\n);gets(s);n=fun(s);printf(\nTheresultis:%d\n\n,n);}-----------------------------------------------------------------------------------------------------------------【参考答案】(1)48(2)s++(3)sum【解题思路】本题是把字符串中是数字字符转换成对应的数值并进行累加。填空1:'0'字符对应的ASCII码值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填48。填空2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填s++。填空3:返回累加和sum,所以应填sum。2、程序修改下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-----------------------------------------------------------------------------------------------------------------#includestdio.h#includeconio.h#includestdlib.hintfun(intk){intm=0,mc=0,j;while((k=2)&&(mc10)){/*************found**************/if((k%13=0)||(k%17=0)){m=m+k;mc++;}k--;/*************found**************/returnm;}voidmain(){system(CLS);printf(%d\n,fun(500));}-----------------------------------------------------------------------------------------------------------------【参考答案】(1)if((k%13==0)||(k%17==0))(2)}returnm;【解题思路】(1)C语言中,x能被y整除的表示方法是x%y==0,而不是题目中所表示的x%y=0。所以,if((k%13=0)||(k%17=0))修改后的结果应该是答案所示信息。(2)程序中缺少程序完整所需的},此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失}的错误信息是Compoundstatementmissing}infunctionfun。3、程序设计编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如,若n为1000时,程序输出应为:s=153.909064。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。-----------------------------------------------------------------------------------------------------------------#includemath.h#includestdio.hdoublefun(intn){}main()/*主函数*/{voidNONO();printf(s=%f\n,fun(1000));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen(in.dat,r);wf=fopen(out.dat,w);for(i=0;i10;i++){fscanf(fp,%d,&n);s=fun(n);fprintf(wf,%f\n,s);}fclose(fp);fclose(wf);}-----------------------------------------------------------------------------------------------------------------【参考答案】doublefun(intn){doublesum=0.0;inti;for(i=21;i=n;i++)if((i%3==0)&&(i%7==0))sum+=i;returnsqrt(sum);}【解题思路】本题考查算术运算的算法,首先利用一个for循环判断小于n且能同时被3和7整除的整数,并将满足条件的整数累加到sum,之后调用sqrt函数计算sum的平方根,并作为函数的返回值。第二十二套1、程序填空给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter'a':3timesletter's':3times请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-----------------------------------------------------------------------------------------------------------------#includestdio.h#includestring.h#includectype.hvoidfun(char*s){intk[26]={0},n,i,max=0;charch;while(*s){if(isalpha(*s)){/**********found**********/ch=tolower(__1__);n=ch-'a';/**********found**********/k[n]+=__2__;}s++;/**********found**********/if(maxk[n])max=__3__;}printf(\nAftercount:\n);for(i=0;i26;i++)if(k[i]==max)printf(\nletter\'%c\':%dtimes\n,i+'a',k[i]);}main(){chars[81];printf(\nEnterastring:\n\n);gets(s);fun(s);}-----------------------------------------------------------------------------------------------------------------【参考答案】(1)*s(2)1(3)k[n]【解题思路】本题统计字符串中各字母的个数,建立了一个包括26个整型变量的数组,用来存储每个字母的个数。填空1:isalpha函数的作用是判断当前字符是否为字母,tolower函数的作用是将当前字母转换为小写字母,所以应填*s。填空2:把该字母出现的个数累加到指定的数组中,所以应填1。填空3:max用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填k[n]。2、程序修改下列给定程序中,函数fun的功能是:求S的值。例如,当k为10时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-----------------------------------------------------------------------------------------------------------------#includestdlib.h#includeconio.h#includestdio.h#includemath.h/*************found**************/fun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n=k){w=2.0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n++;}/*************found**************/returns}voidmain(){system(CLS);printf(%f\n,fun(10));}-----------------------------------------------------------------------------------------------------------------【参考答案】(1)floatfun(intk)(2)returns;【解题思路】(1)此处为函数定义错误,根据返回值的类型可知函数类型标识符应为float。(2)语法错误。3、程序设计请编写函数fun,其功能是:计算并输出下列多项式的值。例如,当n=10时,函数值为0.909091。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。-----------------------------------------------------------------------------------------------------------------#includeconio.h#includestdio.h#includestdlib.hdoublefun(intn){}voidmain(){FILE*wf;system(CLS);printf(%f\n,fun(10));/******************************/wf=fopen(out.dat,w);fprintf(wf,%f,fun(10));fclose(wf);/**********