




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2017年全国计算机等级考试C语言上机考试题库学生练习用第21套至第40套第二十一套1、程序填空给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为abs5def126jkm8,程序执行后的输出结果为22。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #include #include int fun(char *s) int sum=0; while(*s) /*found*/ 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:判断完一个字符之后,将字符串指针移到下一个位置,所以应填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(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)程序中缺少程序完整所需的,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失的错误信息是Compound 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();void 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+) 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请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件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) printf(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用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最大次数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+; /*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#includedouble 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)。本程序首先定义了和变量及循环变量,然后运用一个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; 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 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时,程序的输出结果应为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 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的花括号中填入你编写的若干语句。-#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,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(double 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)double (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 #include /*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 longer 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,移动后,字符串中的内容应该是DEFGHIJKABC。注意:部分源程序在文件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 string 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个字符放到最后一个字符中*/ 【解题思路】本题应采用循环左移的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。第二十五套1、程序填空程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!-#include #define N 5typedef struct student long sno; char name10; float score3; STU;void fun(char *filename) FILE *fp; int i, j; STU sN, t;/*found*/ fp = fopen(filename, _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(filename, wb);/*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); printf(nnThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,tj.sno, ); 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, ); for (i=0; i (3)fwrite【解题思路】填空1:题目中要求从形参filename所指的文件中读入学生的数据,以此可以看出本空应该填写rb。填空2:此处的if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写。填空3:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。2、程序修改下列给定程序中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。字符串的长度最长允许为79。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!-#include #include void fun ( char s, int n ) char a80 , *p; int i;/*found*/ s=p; for(i=0; in; i+) ai=*; do ai=*p; i+; /*found*/ while(*p+) ai=0; strcpy(s,a);main() int n; char s80; printf(nEnter a string : ); gets(s); printf(nThe string %sn,s); printf(nEnter n ( number of * ) : ); scanf(%d,&n); fun(s,n); printf(nThe string after insert : %s n ,s);-【参考答案】(1)p=s;(2)while(*p+);【解题思路】(1)指针p应指向s,所以应改为p=s;。(2)循环等待,当while循环执行一次,临时变量p应该指向字符串的下一位置,所以应改为while(*p+);。3、程序设计请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把09岁年龄段的人数放在d0中,把1019岁年龄段的人数放在d1中,把2029岁年龄段的人数放在d2中,依此类推,把100岁(含100岁)以上年龄的人数都放在d10中。结果在主函数中输出。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。-#include # define N 50# define M 11void fun(int *a, int *b) double rnd() static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return(double)r/m);void main() FILE *wf; int ageN, i,dM; int bN=32,45,15,12,86,49,97,3,44,52,17,95,63; for(i=0; iN; i+) agei=(int)(115*rnd(); /*产生一个随机的年龄数组*/ printf(The original data :n); for(i=0; iN; i+) printf(i+1)%10=0? %4dn:%4d,agei); /*每行输出10个数*/ printf(nn); fun(age,d); for(i=0; i10; i+) printf(%4d-%4d :%4dn, i*10, i*10+9,di); printf(Over 100 : %4dn,d10);/*/ wf=fopen(out.dat,w); fun(b,d); for(i=0; i10; i+) fprintf(wf,%4d-%4d :%4dn, i*10, i*10+9,di); fprintf(wf,Over 100 : %4d,d10); fclose(wf);/*/-【参考答案】void fun(int *a,int *b) int i,j; for(j=0;jM;j+) bj=0; /*数组b初始化为0*/ for(i=0;i=100) b10+; /*如果年龄大于等于100,b10自增1*/ else bai/10+; /*如果年龄小于100,则将其分别统计到bai/10中*/【解题思路】本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用是使b中的所有元素值都为0。这个循环不能省略,因为若未对b中的元素赋初值,则它们的值是不可预测的。第2个循环的作用是分别统计a中各年龄段的人数。当ai100时,按题意要将其统计到b10中。else的作用是如果年龄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酸液酸酐膜蒸发结晶技术考核试卷及答案
- 果菜汁生产线维护工艺考核试卷及答案
- 稀土矿物干燥强化工艺考核试卷及答案
- 家用通风系统安装验收流程工艺考核试卷及答案
- 化纤浆粕冷却工艺考核试卷及答案
- 米浆粘度控制工艺考核试卷及答案
- 喷漆均匀性检验工艺考核试卷及答案
- 生物基溶解工艺考核试卷及答案
- 2025年社会工作者之初级社会综合能力综合检测试卷A卷含答案-
- 雕刻机刀具磨损度检测工艺考核试卷及答案
- IT设备维修申请表
- 郑州市第四中学新初一分班(摸底)语文模拟试题(5套带答案)
- 2-第二章-各向异性材料的应力-应变关系
- 医院防爆反恐应急预案
- 云南省安全员C证考试题库及答案
- 死亡待遇申请表
- 集中供热管网系统一次网的调节方法
- 无线充电技术在汽车上的应用
- 马工程《刑法学(下册)》教学课件 第17章 危害国家安全罪
- 11科室临床路径、单病种管理目录
- 《廉洁从业》企业文化培训课件
评论
0/150
提交评论