《2022年福建省宁德市全国计算机等级考试C语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年福建省宁德市全国计算机等级考试C语言程序设计模拟考试(含答案).docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年福建省宁德市全国计算机等级考试 C语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1.下列程序的运行结果是O#define P(A) printf(%d,A)main() intj,a=l,2,3,4,5,6,7,i=5;for(j=3;j l;j-) switch(j) case 1 :case 2 P(ai+);break;case 3 : P(ai);)2 .设有以下定义和语句:int a32= 1,2,3,4,5 ,*p3;p0=al;则*(p0+l)所代表的数组元素是【】。3 .以下程序的运行结果是【】。#include long fib (i
2、nt g) switch (g) case 0: return 0;#include #define N 16typedef struct(char num10;int s;STREC;int fun (STREC * a, STREC * b, inti, int h )void main ()(STREC sN=“GA0051 85,“GA003176 ,“GA002”,69 ,“GA004”,85, GAOO r96, “GA007/2, “GA008”,64, “GA006”,87, “GAO 1 5”,85,“GA013”,94 ,“GAO 12”,64 ,“GA014:91,“GA
3、O 11 ”,90,“GAO 17”,64,“GAO18”,64,“GA016,72;STREC hN;int i, n, low, high, t;printf (Enter 2 integer number low & high:);scanf (%d%d&low, &high);if (high low)t=high;high=low;low=t;n=fun(s,hjow, high);printf (The students data between %d%d: n low, high);for(i=0;iprintf (%s %4dn hi.num9 hi.s);printf (“r
4、T);)25.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同 时ASCH码值为奇数的字符外,其余的字符都删除,串中剩余字符所形 成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为 ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素的下标为 奇数,因此必须删除;而字符A的ASCII码值为奇数,所在数组中的下 标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应 是ACEG。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号 中填人所写的若干语句。试题程序:#include#include#
5、include#includevoid proc(char*str, char t)(void main(char str100, t100;system(CLS);printf(nnPlease enter string str :);scanf(%S, str);proc(str, t);printf(MnThe result iS : %snn, t);请编写一个函数voidproc (intm, intk, int xx),该函数的功能是将大 于整数m且紧靠m的k个非素数存人所指的数组中。例如,若输入: 10 5 (即M=10, k=5),则应输出:12 1415 16 18o注意:部
6、分源程序 给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函 数proc ()的花括号中填入所编写的若干语句。试题程序:U tndtxic Vtdlib. hU include woid procimt tn. mt k. mtvod nwuM )me mnu1000TtnywimtpraitR *nPlMe mter two mtcgem proctm. nprbirf(eKd pnntf(eB )t请编写一个函数proc (),它的功能是:根据以下公式求7c的值(要求 满足精度0 . 0005,即某项小于0 . 005时停止迭代)ox/2-l +1/3+1 * 2/(3 *
7、 5)+1 2 3/(3 5 7)+1* 2*3* 4 / (3 5 7 9) + + 1 *23*n/(35*7 (2n+l)程序运行后,如果输入精度0 . 0005,则程序输出3 .140578。注意: 部分源程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:二 include include include double proc( double eps)void main( (double s:printf( MnPleasc enter a prccixion: * );scanf( *%!(* &s) g
8、prind(MnPi= %lfn ,proc(s) g28.编写函数fun(),其功能是计算:p_ yln 4 1b( 2) ilns作为函数值返回。在C语言中可调用log(n)函数求ln(n)o log函数的引用说明为:double log(double x)。例如,若m的值为20,则fun()函数值为6. 506583。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括 号中填入你编写的若干语句。试题程序: mdudc h) s include B tncltidr 9 rndudr Vmath. h Ajublr funraid mam (
9、)ywtem ( 9CLS ) pntit( * K fn H fuM20) 29.请编写一个函数voidproc (char*tt, intpp),统计在tt字符串中a” 到,”26个字母各自出现的次数,并依次放在pp所指数组中。例如, 当输入字符串abcdefghxyzabcdee后,程序的输 出结果应该是: o注意:部分源程序给出如下。请勿改 动main ()函数和其他函数中的任何内容,仅在函数proc ()的花括号 中填入所编写的若干语句。试题程序:/ include U mclude Vadio. h2* ihdude Vzdlibu hvoid proc i戈.procilor (
10、k,0 k S include Vzdio. hvoid procint abi long Ciywtcfnt *CLS* )ipnntf(*Input bie)i人&bh proc(eb&c tpnntf( The rrBult ib( KMna *c)四、2.程序修改题(10题)31 .下列给定程序中,函数fun()的功能是计算并输出high以内的素数 之和。high由主函数传给fun()函数。若high的值为100,则函数的值 为 1060。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #includ
11、e #include int fun(int high)(int sum=0, n=0, j, yes ;while(high =2) yes=l ;for(j=2 ; j IKE/不不,、个不不小小个不不不不ci个个不不不小不不个个个不/ifhigh%j=0 yes=0 ;break ;)/k!k!。*1k!k! /不不不不不不不不不不不不不tmind不不不不不不不不不不不不不不/if(yes=0) sum+=high ;n+ ;)high-;)return sum ;) main()(clrscr();printf(u%dnn, fun(lOO);32 .下列给定程序中,函数fun的功能是
12、按以下递归公式求函数值。Fun(n)=需皿例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。请改正程序中的错误,使它能得到正确结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include fun(int n);int c ;/。*1 *1*kL* *1 si* /不不不不不不不不不不不不不tm md不不不不不不不不+不不不不不/ if(n=l) c=15 ;elsec=fun(n-l)*2 ;return(c); main()(int n ;printf(nEnter n :);scanf(n%dn, &n);printf(nThe re
13、sult : %dnnn, fun(n);33 .下列给定程序中,函数fun()的功能是:根据整型参数m,计算如下公式的值。y=l/(100xl00)+l/(200x200)+l/(300x300)+.+l/(mxm)例如,若m=2000,则应输出0.000160。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include / 7,1kJ 7,/不不不不不不不不不不不不不me不不不不不不不不不不不不不不/fun (int m) double y=0, d;int i;/*1kL*kIx kL*/不不不
14、不下不不不不不不不不Tciind不不不不不不不不不不不不不不/for (i=100, i =m, i+=100) d= (double) i* (double) i;y+=L 0/d;)return (y);)main () int n=2000;clrscr();printf(nnThe result is %lfnffun(n);34.下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制 到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用 fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串 b中的内容则为ABC DEF GHI JKO请改正
15、程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include void fun (char *p, char *b) int i, k=0;while (*p)/ vt*vt*1/个不不不不不不不不不不不不tci inri不不不不不不不不不不不不不可不/1=1;/ri/不不不不不不不不不不不不不ci me不不不不不不不不不不不不不不不/while (i 3| *P) bk=*p;k+; p+; i+;)if (*P)/ vt*vt*1/不不不不下不不不不不不不tci inrl不、不不不不不不不不不不、下不/bk=-; bk=0
16、;)main () char a80,b80;printf (Enter a string: ); gets (a);printf (The original string:);puts (a);fun (a,b);printf(nnThe string after insert space: ); puts(b); printf(nnn ”); )35.下列给定程序中,函数fun()的功能是:根据以下公式求n的值,并 作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输 出 Pi=3.140578。n/2=l+l/3+l/3*2/5+l/3*2/5*3/7+l/3*2/5*
17、3/7*4/9case 1: case2: return 1;return (fib(g-1 )+fib(g-2);)main() long k;k=fib(5);printf(nk=%dn,k);)4 .设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结占C,口 八、o5 .测试的目的是暴露错误,评价程序的可靠性;而 的目的是发现 错误的位置并改正错误。6 .阅读下面语句,则程序的执行结果是【】。#include nstdio.hnmain() int a=-l,b=l,k;if(+a0)&!(b-=0)printf(d,%d,a,b);else printf(n%d,%dnn,
18、b,a);7 .下列程序可以判断输入的年份是不是闰年。#includemain() int Jeap;scanf(n%dn,&year);if(year%4)leap=0;else if(year%100);请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#includedouble fun(double eps)double s,t; int n=t;s=0.0;/kIIKE/不不,、个不不小小个不不不不ci个个不不不小不不个个个不/ t=l;/ kL* *1* kL* vl* kI* kL
19、* *1* vl* vl*vL* /不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不/while(t eps) s+=t;t=t*n/(2*n+l); n+;/ 7,7,7,7,017,7,7,7,7,7,/小小小不不不小不不不不小小tciind不不不不不不不不不不不不不不/return (s);main() double x;printf(nnPlease enter a precision:);scanf(n%lf&x);printf(nnPi=%lfn fun(x);)36 .给定程序MODH . C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内
20、容。例如,若字符串为abed,则应输出:deba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!12 345 6include / found/ fun (char a) if (*a)(fun(a*l);found/7 printf(w%cn *a);910111213148 !)main ()(char s(10nabcdw;printf (处理前字符串Tsn处理后字 符串,s);fun(s); printf(=n);37 .给定程序中,函数fun()的功能是:使数组中的元素的值增加10倍。改正其中的错误,使它能得出正确的结果
21、。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include iht m10;void fun(void)(intj;printf(HIn subfunc after callingnn);for(j=0;j 10;j+)/kL* vL* vl# kL*1 kL*kL* vl* *1 kL* vl* vl* *1 vl*/不不不不不不不不不不不不tciind不不不不不不不不不不不不不不不不不不不不不不/ printf(n%3dmj*10);) main() int i;printf(nIn main before callingnn); fo
22、r (i=0; i 10; i+)(mi=i;printf(n%3dmi);)fun ();printf(nnln main after callingnn);for (i=0; i 10; i+)printf(%3d,mi);getch ();)38 .下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个 黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球, 但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。 请改正程序中的错误,使它能得出正确的结果。注童:不要改动main函数,不得增行或
23、删行,也不得更改程序的姑构。 试题程序:#include int fun ()int i,j,k, sum=0;printf (nnThe result: nn n);/i/不干不个不干不个个不不不不不Tcii nc不不个不干不个不可不不个个不不/for (i=0; i =3; i+) for (j=l;j=l&k=6) sum=sum+l;printf (nred: %4d white: %4dblack: %4dn,i,j,k);)return sum;)main () int sum;sum=fun ();printf (nsum=%4dnn t sum); )39 .下列给定程序中函数
24、fun()的功能是:将长整型数中每一位上为奇数 的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。 例如当s中的数为87653142时,t中的数为7531。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include void fun (long s, long *t)int d ;long sl=l ;/7 7 7,7,7,1 7”7 7,7 77 *1,T”/不小不不不小不不小不不小小tciind不不不不不不不不不不不个不不/t二o;while(s 0) d=s%10 ;/ 1
25、*vl#/ .卜/卜卜if(d%2=0)*仁d*sl+*t ;sl*=10 ;)s/=10 ;) main() long s, t;clrscr();printf(unPlease enter s :) ; scanf(n%ldn, &s);fun(s, &t);printf(nThe result is : %ldnn, t);)40.下列给定程序是建立一个带头结点的单向链表,并用随机函数为各 结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域 为偶数的值累加起来,并作为函数值返回。其累加和通过函数值返回main()函数。例如,若n=5,则应输出8.391667。请改正程
26、序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include #include typedef struct aa int data;struct aa *next;NODE;int fun(NODE *h) int sum=O;NODE *P;/7, 7,7” 7,7,7,1/不小小小小不小不小不tm n不不不不不不不小不不/p二h;while(P- next) if(p- data%2=0) sum+=p- data;/ 7,7,7,17,7,1*。17, 7,1*7,7,/小小小不不不不小不不tm n不不不小不不不不小不/p=
27、h- next;) return sum;)NODE *creatlink(int n)(NODE *h, *p, *s, *q ;int i, x;h=p=(NODE *)malloc(si zeof(NODE);for(i=l; i data=rand()%16;s- next=p- next;p- next=s;p=p-next;)p- next=NULL;return h;)outlink(NODE *h, FILE *Pf)NODE *p;p=h- next;fprintf(Pf, unnTHE LIST:nn HEAD);while(P) (fprintf(Pf, %d,p- da
28、ta); p=p- next;)fprintf(pf, nnn);)outresult(int s, FILE *pf)(fprintf(Pf, nnThe sum of even numbers : %dn s);)main()(NODE *head; int even;head=creatlink(l 2);head- data=9000;outlink(head, stdout);even=fun(head);printf(nnThe result :nn); outresult(even, stdout); )五、程序改错题(2题)下列给定程序中函数fun ()的功能是:求出如下分数序
29、列的前n项之 和,结果通过函数值返回。2 3 5 8 13 21 1 2 3 S R 11例如,若n=5,则应输出8 . 391667。请改正程序中的错误,使其得出 正确的结果。注意:不要改动main ()函数,不得增行或删行,也不 得更改程序的结构!试题程序:0 iftclude V yddlih h KU include Veomex h s mcludrluf - ouM . fun (mt a)IAt 二 2. hl. c ki double - 0. Oi forth* hkV-tMk/ ) / kxmd /bi bib*ctEurnC imid nruiti ()int n*Si
30、system () pfintf ( e nTbe slue ct function 由% fa. fun ()下列给定程序中,函数proc ()的功能是:计算并输出下列级数的前N 项之和SN,直到SN+1大于q为止。q的值通过形参传人。SN=2 / 1+3 Z2+4/3+ (N+l) /N例如,若q的值为57,则函数值为59 .593612。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main0函数,不得增行或删行,也不得更改程序的结构。试题程序:g indude 冬 itKiudecociio, b ,inciudc V Mdxx h / found double proc(
31、double q ini hi double,ug力 0| whi)e( wq)/ louad ,unuum+Cn+ I )/m/ foufUl return Mivniraid fMin( *yMn( *CLS*) pnntfC e K(n、proc8),i六、操作题(2题)43.以下程序运行后的输出结果是int a=5 ;fun (int B) static int a=10 ;a+=b+ ;printf(%d, A); main() int c=20 ;fun(C),a+C+ ,printf(%dn, A);)44.请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不 得调用
32、C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing nanchang ( 为回车键),函数将返回 nanjing o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include char *fun(char *S, char *t)( ) main()(char a20, b10, *p, *q ;int i ;printf(Input 1th string :);gets(a);printf(Input 2th string :);get
33、s(b);printf(%s”, fun(a, b);)参考答案else if(year%400)leap=O;elseleap=l;if()printf(%d 年是闰年”,year);elseprintf ( %d 年不是闰年n”, year);)8 .以下程序的功能是从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。#include main()FILE *fp; char ch;fp=fopen();ch=fgetc(fp);while(!feof(fp) putchar(ch); ch=fgetc(fp); putcharCn1) ;fclose(fp);9 .以
34、下程序运行后的输出结果是【】。main()chars=9876*p;for(p=s;p s+2;p+)printf(n%snn,p);)10 .在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中 的作用是将测试数据传送给被 测试的模块,并品示被测试模块所产生的结果。 1.5 55 5解析 分析程序执行过程,第一次循环时,i=3, i=5,因为switch。), 所以执行case 3,调用P(ai)=P(a4)=P(5),输出5 :第二次循环时, j=2, i=4,因为 switch(2),所以执行 case2,调用 P(ai+) :P(a4)=P(5),
35、 输出5,之后i自加等于5。2.allall解析:P是一个指针数组,P指向数组alO*(pO+l) 代表数组3.k=5k=5解析:由题可知fib(O)的值为0, fib和fib(2)的值为1,因 此,fib(3)=fib(2)+fib(l) =2;fib(4)=fib(3)+fib(2)=3;fib(5)=fib(4)+fib(3)=5 o 4.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是 比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树 中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点, 若n为偶数,则在该二叉树中有n/2个叶子结点以及n/
36、2-l个度为2的 结点,还有1个是度为1的结点若n为奇数,则在该二叉树中有n/2+l 个叶子结点以及n/2个度为2的结点,没有度为1的结点。本题中,完 全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个 叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以, 本题的正确答案为350。5.调试调试6.101,0解析:与运算两边的语句必须同时为真时,结果才为真。当执行 完if(+a0)&!(b&,且 strcpy(al, you)把 you 复制到 al中,故输出 a 为are & you。12 .D13 .C学号是学生表S的主键,课号是课程表C的主键,所以选课表SC
37、的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课 号,所以选择C项。14.B15.B16 .C解析:sort函数的功能实际上是对数组中奇数位置上的数进行从大到小排序。排序后的结果应该为9, 2, 7, 4, 5, 6, 3, 8, 1, 10o17.C18.B 19.C20. A其方法是将要删除节点的上一个节点的next指向要删除节点的下 一个节点,然后释放将要删除的节点,所以选项A正确。故本题答案为 A选项。iit STREI STRR, biistim 4富 ”11修布归中tort)i,m.”一 .:1 *;,分 ftA的学生4不止一个rrlum is【解析】要得到分数最高的学
38、生数据,首先应检查每一个学生的数 据,得到学生的最高成绩。成绩最高的学生不止一个,将每一个学生 的成绩与最高成绩相比较,得出最高成绩学生的个数,将成绩最高的 学生记录放在指定数组中通过形参返回。成绩最高的学生个数由函数 值返回给主函数。【解析】题目中要求不能用C语言中提供的求字符串长度的函数,可以通过移动字符串指针来计算字符串的长度。定义2个变量分别存放2个字符串的长度,最后比较2个字符串的长度,返回相对较长的那一个字 符串。【解析】按照题目中要求,求出能整除X且不是奇数的各整数。首先 判断小于等于整数X的所有偶数是否能被X整除,将能被X整除的奇 数放入数组PP中。最后将数组PP中元素的个数返回到主函数当中。24.int fun (STREC *a, STREC *b, int 1, int h)(int i, j =0;for(i=0; b Wif (ai.s=l&ai.s=h)/*将分数高于1,低于h的学生记录存入结构体数组b中*/bj+=ai;return j;/*返回分数范围内的学生人数*/)本题使用循环判断结构实现题目要求。循环语句用于遍历结构体数组; 条件语句用于判断当前元素是否符合条件,若符合条件则将其存入结构 体数组b中。变量j为数组b元素下标,最后变量