《2017年全国计算机等级考试C语言上机考试题库-21-40套.doc》由会员分享,可在线阅读,更多相关《2017年全国计算机等级考试C语言上机考试题库-21-40套.doc(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、优质文本2017年全国计算机等级考试C语言上机考试题库学生练习用第21套至第40套第二十一套1、程序填空给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为abs5def126jkm8,程序执行后的输出结果为22。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #include #include int fun(char *s) int sum=0; while(*s) /*foun
2、d*/ if( isdigit(*s) ) sum+= *s- _1_ ;/*found*/ _2_; /*found*/ return _3_ ;main() char s81; int n; printf(nEnter a string:nn); gets(s); n=fun(s); printf(nThe result is: %dnn,n);-【参考答案】(1)48 (2)s+ (3)sum【解题思路】此题是把字符串中是数字字符转换成对应的数值并进行累加。填空1:0字符对应的ASCII码值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填48。填空2:
3、判断完一个字符之后,将字符串指针移到下一个位置,所以应填s。填空3:返回累加和sum,所以应填sum。2、程序修改以下给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,假设k的值为500,那么函数的值为4622。请改正程序中的错误,使它能得出正确的结果。注意:局部源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #include #include int fun(int k) int m=0,mc=0, j; while(k=2)&(mc10) /*found*/ if(
4、k%13=0)|(k%17=0) m=m+k;mc+; k-;/*found*/ return m;void main()system(CLS); printf(%dn ,fun(500);-【参考答案】(1)if(k%13=0)|(k%17=0)(2) return m;【解题思路】(1)C语言中,x能被y整除的表示方法是x%y0,而不是题目中所表示的x%y0。所以,if(k%130)|(k%170)修改后的结果应该是答案所示信息。(2)程序中缺少程序完整所需的,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比方丧失的错误信息是Compou
5、nd statement missing in function fun。3、程序设计编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如,假设n为1000时,程序输出应为:s153.909064。注意:局部源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的假设干语句。-#include #include double fun( int n)main() /* 主函数 */ void NONO (); printf(s =%fn, fun ( 1000) ); NONO();vo
6、id NONO ()/* 本函数用于翻开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n ; double s; fp = fopen(in.dat,r) ; wf = fopen(out.dat,w) ; for(i = 0 ; i 10 ; i+) fscanf(fp, %d, &n) ; s = fun(n) ; fprintf(wf, %fn, s) ; fclose(fp) ; fclose(wf) ;-【参考答案】 double fun(int n) double sum=0.0; int i; for(i=21;i=n;i+)
7、 if(i%3=0)&(i%7=0) sum+=i; return sqrt(sum); 【解题思路】此题考查算术运算的算法,首先利用一个for循环判断小于n且能同时被3和7整除的整数,并将满足条件的整数累加到sum,之后调用sqrt函数计算sum的平方根,并作为函数的返回值。第二十二套1、程序填空给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:lettera:3timesletters:3times请在程序的下画线处填入正确的内容并把下画线删除,使程
8、序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #include #include void fun(char *s) int k26=0,n,i,max=0; char ch; while(*s) if( isalpha(*s) ) /*found*/ ch=tolower(_1_); n=ch-a;/*found*/ kn+= _2_ ; s+;/*found*/ if(maxkn) max= _3_ ; printf(nAfter count :n); for(i=0; i26;i+) if (ki=max) prin
9、tf(nletter %c : %d timesn,i+a,ki);main() char s81; printf(nEnter a string:nn); gets(s); fun(s);-【参考答案】(1)*s (2)1 (3)kn【解题思路】此题统计字符串中各字母的个数,建立了一个包括26个整型变量的数组,用来存储每个字母的个数。填空1:isalpha函数的作用是判断当前字符是否为字母,tolower函数的作用是将当前字母转换为小写字母,所以应填*s。填空2:把该字母出现的个数累加到指定的数组中,所以应填1。填空3:max用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最
10、大次数max,那么把该次数赋值给max,所以应填kn。2、程序修改以下给定程序中,函数fun的功能是:求S的值。 例如,当k为10时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注意:局部源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #include #include #include /*found*/fun(int k) int n; float s, 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+
11、; /*found*/ return svoid main() system(CLS); printf(%fn ,fun(10);-【参考答案】(1)float fun(int k)(2)return s;【解题思路】(1)此处为函数定义错误,根据返回值的类型可知函数类型标识符应为float。(2)语法错误。3、程序设计请编写函数fun,其功能是:计算并输出以下多项式的值。 例如,当n10时,函数值为0.909091。注意:局部源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的假设干语句。-#include#include#incl
12、udedouble fun(int n) void main() FILE *wf; system(CLS); printf(%fn,fun(10);/*/ wf=fopen(out.dat,w); fprintf(wf,%f,fun(10); fclose(wf);/*/-【参考答案】double fun(int n) int i; double s=0.0; for(i=1;i=n;i+) s=s+1.0/(i*(i+1); /*求级数的和*/ return s;【解题思路】此题要求级数的和,由多项式的形式可知,应使用循环语句实现,循环的通项为1/n(n+1)。本程序首先定义了和变量及循环
13、变量,然后运用一个for语句求出级数的和,最后将和变量s返回。第二十三套1、程序填空给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #include #define N 5#define M 8void fun(char (*ss)M) char *psN,*tp; int i,j,k; for(i=0; iN
14、; i+) psi=ssi; for(i=0; iN-1; i+) /*found*/ k= _1_ ; for(j=i+1; jN; j+)/*found*/ if(strlen(psk) strlen(_2_) ) k=j;/*found*/ tp=psi; psi=psk; psk= _3_ ; printf(nThe string after sorting by length:nn); for(i=0; iN; i+) puts(psi);main() char chNM=red,green,blue,yellow,black; int i; printf(nThe original
15、 stringnn); for(i=0;iN;i+)puts(chi); printf(n); fun(ch);-【参考答案】(1)i (2)psj (3)tp【解题思路】此题是按字符串的长短进行排序。填空1:外循环每循环一次,k应保存当前的i值,所以应填i。填空2:使用内循环对i1后面的字符串长度进行比拟,所以应填psj。填空3:此处的作用是交换两个变量的值,所以应填tp。2、程序修改一个数列从0项开始的前3项:0、0、1,以后的各项都是其相邻的前3项之和。以下给定的程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n10时,程序的输出结果应为
16、23.197745。请改正程序中的错误,使它能得出正确的结果。注意:局部源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #include #include #include /*found*/fun(int n) double sum, s0, s1, s2, s; int k; sum=1.0; if (n=2) sum=0.0; s0=0.0; s1=0.0; s2=1.0; for (k=4;k=n;k+) s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; /*found*/ return
17、 sumvoid main()int n; system(CLS); printf(Input N=); scanf(%d,&n); printf(%fn,fun(n);-【参考答案】(1)double fun(int n)(2)return sum;【解题思路】(1)根据函数的返回值可知函数fun应定义为double类型。(2)语法错误,缺分号。3、程序设计请编写函数fun,它的功能是计算以下级数和,和值由函数值返回。 例如,当n10,x0.3时,函数值为1.349859。注意:局部源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写
18、的假设干语句。-#include#include#include#includedouble fun(double x, int n) void main() FILE *wf; system(CLS); printf(%f ,fun(0.3,10);/*/ wf=fopen(out.dat,w); fprintf(wf,%f,fun(0.3,10); fclose(wf);/*/-【参考答案】double fun(double x,int n) int i; double s=1.0,s1=1.0; for(i=1;i=n;i+) s1=s1*i; /*各项中的阶乘*/ s=s+pow(x,
19、i)/s1; /*按公式求出*/ return s;【解题思路】程序定义了变量s1和s,s1表示每项的分母(即各项的阶乘),s存放累加和。循环语句控制累加的次数,在循环体中进行阶乘和累加操作,累加的结果存入s中。此处使用了求乘方函数pow(x,i),其含义是求x的i次方的值。第二十四套1、程序填空给定程序中,函数fun的功能是:根据形参i的值返回某个函数的值。当调用正确时,程序输出:x15.000000,x23.000000,x1*x1+x1*x2=40.000000。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include double f1(dou
20、ble x) return x*x; double f2(double x, double y) return x*y; /*found*/_1_ fun(int i, double x, double y) if (i=1)/*found*/ return _2_(x); else/*found*/ return _3_(x, y);main() double x1=5, x2=3, r; r = fun(1, x1, x2); r += fun(2, x1, x2); printf(nx1=%f, x2=%f, x1*x1+x1*x2=%fnn,x1, x2, r);-【参考答案】(1)d
21、ouble (2)f1 (3)f2【解题思路】填空1:本空函数fun的返回值,根据return可知,不管返回的是f1还是f2,它们的返回值均为double型的,故此空应该填写double。填空2:因为函数fun的功能是根据形参i的值返回某个函数的值,当i等于1时,应该返回的是f1。填空3:如果不满足if的话,应该返回的是f2。2、程序修改以下给定程序中,函数fun的功能是:比拟两个字符串,将长的字符串的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:局部源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #incl
22、ude /*found*/double fun(char *s,char *t) int s1=0,t1=0; char *ss,*tt; ss=s; tt=t; while(*ss) s1+; /*found*/(*ss)+; while(*tt) t1+;/*found*/(*tt)+; if(t1s1)return t; elsereturn s;void main() char a80,b80; printf(nEnter a string : ); gets(a); printf(nEnter a string again: ); gets(b); printf(nThe longe
23、r is :nn%sn, fun(a,b);-【参考答案】(1)char *fun(char *s,char *t)(2)ss+;(3)tt+;【解题思路】(1)在主函数的输出语句中,函数fun是以字符串格式输出的,所以定义函数时应为char *fun( char *s,char *t)。(2)和(3)这里是地址加1,而不是内容加1,所以改为ss+和tt+。3、程序设计请编写函数fun,其功能是:移动字符串中的内容,移动的规那么是把第1m个字符,平移到字符串的最后,把第m1到最后的字符移到字符串的前部。例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是D
24、EFGHIJKABC。注意:局部源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的假设干语句。-#include #include #define N 80void fun (char *w,int m) void main() FILE *wf; char aN= ABCDEFGHIJK,bN= ABCDEFGHIJK; int m; printf(The origina string :n); puts(a); printf(nnEnter m: ); scanf(%d,&m); fun(a,m); printf(nThe str
25、ing after moving :n); puts(a); printf(nn);/*/ wf=fopen(out.dat,w); fun(b,3); fprintf(wf,%s,b); fclose(wf);/*/-【参考答案】void fun (char *w,int m) int i,j; char t; for(i=1;i=m;i+) /*进行m次的循环左移*/ t=w0; for(j=1;wj!=0;j+) /*从第2个字符开始以后的每个字符都依次前移一个字符*/ wj-1=wj; wj-1=t; /*将第1个字符放到最后一个字符中*/ 【解题思路】此题应采用循环左移的算法,多层循
26、环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。第二十五套1、程序填空程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:局部源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #def
27、ine N 5typedef struct student long sno; char name10; float score3; STU;void fun(char *) FILE *fp; int i, j; STU sN, t;/*found*/ fp = fopen(, _1_); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; iN-1; i+) for (j=i+1; jN; j+)/*found*/ if (si.sno _2_ sj.sno) t = si; si = sj; sj = t; fp = fopen(, w
28、b);/*found*/ _3_(s, sizeof(STU), N, fp); fclose(fp);main() STU tN= 10005,ZhangSan, 95, 80, 88, 10003,LiSi, 85, 70, 78, 10002,CaoKai, 75, 60, 88, 10004,FangFang, 90, 82, 87, 10001,MaChao, 91, 92, 77, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), 5, fp); fclose(fp); print
29、f(nnThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,tj.sno, tj.name); for (i=0; i3; i+) printf(%6.2f , tj.scorei); printf(n); fun(student.dat); printf(nnThe data after sorting :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); -