《2022年广东省汕头市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年广东省汕头市全国计算机等级考试C语言程序设计真题(含答案).docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年广东省汕头市全国计算机等级考试C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .数据元素之间 的整体称为逻辑结构。2 .在面向对象方法学中,直接反映了用户对目标系统的要求的模型是03 .下列程序的输出结果是o#include main() int x=10,y=10,i;for(i=0;x 8;y=+i)printf(n%d %d”,x-,y);)4 .以下程序运行后的输出结果是o#include void fun(char *s,int p,int k) int i;for(i=p;i k-l;i+) si=si+2;)main() char s=n
2、abcdefgn;fun(s,3,strlen(s); puts(s);25.N名学生的成绩已在主函数中放人一个带头节点的链表结构中,h指 向链表的头节点。请编写函数fun,其功能是求出平均分,并由函数 值返回。例如,若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是: 78 . 625。注意:部分源程序在文件PROG1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填人你编写的若干语句。Windude include *define N 8double s; stmct alist next;11typcdcf stmct sl
3、ial STRECjdouble fun( STREC h )STREC creal( double s)I STREC h. p. q; int i =0;h p (STREC )m*Uoc(sueof(STREC) ;p - =0; whik(i x i; i ; p - next s q; p = q;Ip - next =0;return h;Ioutlist( STREC h)| STREC p;p = h - next; printf( w head)do.I printf( w -%4. IP tp-);psp-next;|while(p! 0);printf( M nnw )
4、Imain()I double ”N . 185,76.69,85.91,72.64.87|void NONO():STREC h;h = creai( ) outlist( h);ave a fun( h );printf( w ave = %6.3fn* tave);NONO();I.void NONO()|/本的数用于打开文件,输入数据,调用函数,输出数据,关闭文件。)FILE in. out ;int itj ; double s N 9avc;STREC eh ;in = fopenein.datw/r-); out = fopen(out, dat* Jw* ); for(i s
5、0 ; i 10 : i* )Ifor(jx0 ; j +)fecanf(in.&s(j);h = creat( s );ave = fun( h );fprintf(outv %6. 31fnwt ave);Ifcloee( in);fcl(e( out);26.假定输入的字符串中只包含字母和*号。请编写函数proc (),它的功能 是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形 参m给出了字符串的长度,形参h给出了字符串中前*号的个数,形参 e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提 供的字符串函数。例如,若字符串中的内容为*a*bc*def*g*,删
6、 除后,字符串中的内容则应当是a*bc*def*g。注意:部分源程序给出如 下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc0的花括号中填入所编写的若干语句。试题程序:/ includeh=sndudc Vcomoc hvod proc(chax amt m int h int e) wied tMin)char fi In-*0ipnmf(Eater a tnnf1 f whil+ + a)指讨Q南向后一个字母 S悦情/” 尼 个wlul )(什ifn+ 4 il /指针1,附,一个不。.sift情proc m (n tn)i print“The tnng after
7、delrledint27.使用VC+2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,请编写一个函数fun(),用来求出数组中值最大的元素在数组中的下标并将其存放在k所指向的存储单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果为 6,980。注意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序1 tinclude 2 #include h 3 #include 4 in
8、t fun (int * s,int t,int * k)卜;(b 8 void main ()9 (poFILE * wf;11 int a10 = 876,675,8 96,101,301,401,980,431,451,777,k;12 system(MCLSM);13 fun (a, 10 f &k);14 printf (H% d, % dn ,k, ak);15 /今*率* 京*/16 wf = fopen (out dat, w);.17 fprintf (wfrH% d, % d”, k, ak);18 fclose(wf);19 /*/20 28.使用VC+2010打开考生文
9、件夹下progl中的解决方案此解决方案 的项目中包含一个源程序文件progl.c。在此程序中,编写函数fun(),其功能是根据以下公式计算S,并将计算结果作为函数值返回,通过形参传入。5 = 1+ + - + +1+2 1+2+31+2+3 + ,+般例如,若n的值为11时,函数的值为1.833333o注意:部分源程序给出如下。请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include #include #include #include float fun(int n)()void main ()(int n;float s;
10、system(“CLS”);printf (nPlease enter N:); scanf(d&n);s=fun(n);printf(ccThe result is:%fn”, s);29 .请编写函数proc (),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1 (pSn-l)的数组元素平移到数组的前面。例如,一维数组中的原始内容为1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13, 14, P的值为4。移动后,一维数组中的内容应为 5, 6, 7, 8, 9, 10 . 11, 12, 13, 14, 1, 2, 3, 4O
11、注意:部分源 程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅 在函数proc ()的花括号中填入所编写的若干语句。试题程序: 斗 include # define M 80void proc(int w. int p, int n) void main()( 10* 1112 1314hint i. p n 14 iprintf( The original dAtasnM) ifor(i-,Oiinsi+ + )printf( %3d arrij) sprintK *nnEntcr p:M) ijcanf( %d &p) iprocprintf( w %3dM arrfij
12、) iprintf(*nnw) i30 .请编写函数proc (),该函数的功能是:将M行N列的二维数组中的数 据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形 参n所指的存储单元中。例如,若二维数组中的数据为:13233343 14243444 15253545则一维数组中的内容应该是13 23 33 43 14 24 34 44 1525 3545。注意:部分源程序给出如下。请勿改动main ()函数和 其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:C include V,idid bvoad procCini ( a0 mt b m
13、ti.mf mm mt nnJroid )im rU44U4.44.U).S5.S5.S5.S5Fk t uuii for im0 iV3. i+ ).(ofj - 0”V4sj上 Iprint 1( * print*)pnx,rr.-.&n34) pnntfi四、2.程序修改题(10题)31 .下列给定程序中,函数fun()的功能是:传入一个整数m,计算如下公式的值。t=l/2-l/3-.-l/m例如,若输入5,则应输出-0.283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include
14、double fun(int m) double t=1.0;int i;for (i=2; i /个个不不不不不不不不不不不ci n不不不不不不不不不不不不不不/)main ()int m;clrscr ();printf (HnPlease enter 1 integer numbers:In);scanf (n%dn, &m);printf(nnnThe result is %lflnn, fun (m);)32 .下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结 点)数据域中的最大值,并且作为函数值返回。请改正
15、程序指定部位的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include #include typedef struct aa int data;struct aa *next;NODE;fun(NODE *h) int max=-l;NODE *p;/ kL*vt* kL* kL* /_*1 vt*k1*vL* /不不不不不不不不不不不tc n不不不不不不不不不不不不/P=h;while(p) if(p- data max) max=p- data;/ KLk1* kl* ke kI*_/Ik! kL*k1 kl 1* /个不个个不不
16、小、个不不小Tci不干不小不不不不干不个个/p=h- next;) return max; )outresult(int s, FILE *Pf)(fprintf(pf, nnThe max in link: %dn”, s);)NODE *creatlink(int n, int m)(NODE *h, *p, *s, *q;int i, x;h=p=(NODE *)malloc(sizeof(NODE);h- data=9999;for(i=l; i data=rand()%m; s- next=p- next;p- next=s; p=p- next;)p- next=NULL;retu
17、rn h;)outlink(NODE *h, FILE *pf)NODE *p; p=h- next;fprintf(Pf, nnTHE LIST:nn HEAD”);while(P) (fprintf(pf, n- %dn, P- datA); p=p- next;)fprintf(pf, nnn);)main()(NODE *head; int m;head=cteatlink( 12,100);outlink(head, stdout);m=fun(head);printf(unTHE RESULT);outresult(m, stdout);)33.给定程序MODH . C中函数fun
18、的功能是:从低位开始取出长整型 变量s中奇数位上的数,依次构成一个新数放在1中。高位仍在高位, 低位仍在低位。例如,当s中的数为:7654321时,t中的数为:753lo请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!5 .以下程序的输出结果是【】。main() (int arr=30,25,20,15,10,5,*p=arr ;P+ ;printf(%dn, *(p+3);6 .若定义#define PI 3.14159,则执行完下列程序后输出结果是。#define PI 3.14159; printf(nPI=%fPI);7 .下
19、列的for语句的循环次数为 ofor(x=l, y=0 ;(y!=19)&(x 7) ;x+);8 .以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填空。main() (int i,a20,sum,count;sum=count=【;for(i=0 ; i 20 ; i+)scanf(%d,);for(i=0 ; i 0) count+ :123456789;tinclude ! /round/ void fun (long s, long t) long sl-10;t s % 10;while (s 0) s s/100;t - s%10 si + *t;1011
20、1213141516 ;17 !18 ;si = sl*100;)main () long s, t;printf(MnPlease enters: “)scanf(w%ldR/ &s);fun (st &t);printf (nThe result is: %ldnwr t); )34.给定程序MOD11 . C中函数fun的功能是:判断一个整数是否是素 数,若是返回1,否则返回0。在mai()函数中,若fun返回1输出YES,若fun返回。输出NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!2345678910111213
21、14151617*include int fun (int m) (int k - 2;while (k m & (m%k)k+/口血 /if (m - k)return 1; else return 0;main () int n;printf(wnPlease enter n: scanf (d。,&n);if (fun (n) printf(MYESnw); else printf(NO!nn);35 .下列给定程序中,函数fun的功能是按以下递归公式求函数值。Fun(n)= 爆(川-g例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。请改正程序中的错误,使它能得到正确
22、结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include /7,7/ 7 /不不不不不不不不不不不不不tci nc不不下可+不不不不不可不/fun(int n);int c ;/ vl* kL* vL# vt* vl* vl*si#1vl#vL* vL*/不不不不下不不不不不不不不tciinri不不不不不不不不+不下不不不/ if(n=l)elsec=fun(n-l)*2 ;return(c);) main()(int n ;printf(Enter n :);scanf(%d, &n);printf(The result : %dnn, fun(n)
23、;36 .给定程序MOD11 C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量xl、x2、x3分别输入15 112,则输出结果应当是:330。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。123456789101112131415161718192021222324linclude /WWW*/ fun(int x, y, z) int jrt ,n rm;j - 1 ; t-j%x; mj%y ; n-j%z; while(t1&0 I|m!*0I|n!0) ( j - j+1;t-j%x;m-j%y; nj%z
24、; )return i;|main () int xl,x2,x3r j ;printf(wInput xl x2 x3: scanf(H%d%d%dnr &xl,&x2r &x3);printf(nxl-%dr x2%dr x3-%d nwr xl,x2rx3);jfun(xlrx2,x3);printf(wThe minimal common multiple is : %dnnr j);37 .给定程序MODH . C中函数fun的功能是:统计substr所指子字符 串在str所指字符串中出现的次数。例如,若字符串为aaaslkaaas,子字符串为as,则应输出2。请改正程序中的错误,使
25、它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!linclude int fun (char *str#char *substr) int ir krnum0;/oundf /for (i - 0, stri9 i+)for (ji# k0; substr kJ Mstr(j ; kf *)/foundfm / If(substrkl-101) (num+;1012break; return num;13 ; )151617181920212214 ! mainOchar str80,substr80;printf(Input a string:w);g
26、ets(str);printf(wInput a substring:w);gets (substr);printf(w%dnwr fun(strrsubstr);38 .下列给定程序中,函数fun()的功能是;求S的值。设 S=(22/l *30)*(42/(3*5)*(62/(5*7)* .*(2k)2/(2k-l)*(2k+l) 例如,当k为10时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注童;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include fun (int k) iht n; f
27、loat s, w, p, q;n=l;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+;/*1 *1 *11 /不不不不不不不不不不不不不不不tci md不不不不不不不不不不不不不不/return s)main() clrscr ();printf(n%An fun (10);)39 .下列给定程序中,函数fun()的功能是:用下面的公式求兀的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。71/4-1-1/3+1/5-1/7+.例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使
28、它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include float fun(float num) int s;float n,t, pi;t=l ;pi=0; n=l; s=l;/ /不不不不不可不不不不可不不不Tciinri不不不不不不不可不不不不个不不/while (t =num)pi二pi+ t; n=n+2;t=s% n;)pi二pi*4;return pi;)main () float nl, n2;clrscr ();printf (Enter a float number:);scanf(n%f &nl)
29、;n2=fun (nl);print f(n %6.4 An ”,n2);)40 .下列给定程序中,函数fun()的功能是:输出M行N列整数方阵, 然后求两条对角线上的各元素的平方和,返回此和数。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include #define M 5int fun(int n, int XXM)(int i, j, sum=0 ;printf(nnThe %d x %d matrix : nn, M, M);for(i=0 ; iN ; i+)for(j=0 ; j *1
30、*1/不不不不不不不不不不不不不tmind不不printf(%4d, XXij);/7* q* 7* 2* 7* 7* 7#/不不不不不不不不不不不不不tci inri不不printf(,n,); )for(i=0 ; i Bid procm i 卜/ found foZ,T% Mrfi! *0* ii/ found woid m*in()chut BO ipemtKa Mringi*) 3n.prmt(roc *irl printh *Tbr string after drlrtrde put(str) ttrintf( nn *) i42.下列给定程序中,函数proc()的功能是:根据形参
31、m(2gmS9)的值,在m行m列的二维数组中存放如下所示的数据,由main。函数输出。例如,石人3.剜的|请修改程序中的错误,使它能得出正确的结果。234 i6*%削|2i4 S24i8103912 IS4i121620 s10IS20 2SCHAS构。试题程序: tnciudr B tficiudr Vxdlibu h4 include 9 define N 10iqi rrNN m yxtrm( Cl) pnntf(* Enier nn*i &() proc=0?:二、单选题(10题)11 .无向图中一个顶点的度是指图中与该顶点相邻接的顶点数。若无向图G中的顶点数为n,边数为e,则所有顶点
32、的度数之和为()A.n*e B.n+e C.2n D.2e12 .如果以链表作为栈的存储结构,则出栈操作时()。A.必须判别栈是否满B.必须判别栈是否为空C必须判别栈元素类型D.可不做任何判断13.21)下面程序的运行结果是()0fbr(i=3;i7;i-H-) printfI(i%2) ? (*%dn): (#%dnM),i);A) *3B) #3C) #3.D) *3#44*4#4*5#5#5*5*6*6#6#6if (a b) p=pl;pl=p2;p2=p;)printf(na=%d b=%dn”,a,b);printf(nmax=%d min=%dnn,);44.以下程序的运行结果是
33、【】。#includelong fib(int g) switch(g) case 0:return 0;case 1:case 2:return 1; return(fib(g-1 )+fib(g-2); main() long k;k二m);printf(nk=%51dnk);参考答案1 .逻辑关系逻辑关系2 .功能模型功能模型3 .10 109 110 109 1解析:for(表达式1 ;表达式2 :表达式3)语句的功 能是:首先计算表达式1的值,然后检测表达式2的值,若其值为真, 则执行循环体语句,执行完毕后,再计算表达式3的值。然后再检测表 达式2的值是否为真,若为真,继续执行循环体
34、语句,若为假,则退出 循环:第1次循环x 8成立,输出x=10, y=10后,x的值减1, i=l, 执行y=+i操作,y的值变为1 ;判断条件还成立,输出X=9, y=l,然 后X的值减1,循环条件不成立,则退出循环。4,abcfgabcfg解析:本题考查的是字符数组用作函数参数。C语言中数 组名可以看作该数组首地址的常量指针、因此可以直接传递给指针类型 的参数。本题的主函数调用fun(s,3,strlen(s);后,函数中for循环就是 for(i=3 ;i strlen(s)-l ;i+),即i从3递增到字符数组s的长度-2位置, 循环中让si=si+2,所以函数fun()实现的功能简单
35、来说就是将字符串 s下标为P+2k范围的字符整体复制到字符串s下标为pk-2的位置 上。在本题中strlen(s)返回s的长度7,所以复制的字符为s5 s7, 即甲、g, 0三个字符,复制到ss5,故最终输出的字符串为 abcfg(因为s5为所以后面的字符不会输出)。5.1010解析:整型指针最初被赋的值是数组arr的头指针,即指向数组 的第一个元素30, p+后,指针指向数组的下一个元素,即*p二arrl=25, 在执行*(p+3)时,则相当于al+3,即10。因此,输出应为100。6.PI=3.14159Pl=3.14159解析:本题先定义了一个宏名PI,以后在程序 中出现PI都用3.14
36、159替代,但是C语言规定:双引号中的宏名是不 进行替换的。7.66解析:分析程序可知,每循环一次,x的值加1,然后检测循环控 制条件(y!=19)&(x7),因y的值不变,故满足x 7时循环6次。8.0&ai ai0rn&airnai解析:本题要求从终端读入数据到数组中, 统计其中正数的个数,井计算它们的和。程序中首先要对存放正数个数 的变量count及存放和值的变量sum初始化为0,所以第一空应填0o接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第 二空应填最后通过sum+=ai;语句累加正数ai的值到sum中, 因此第三空应填ai。9. aaaa A A A A Aaa
37、aa A A A A A 解析:函数 strcat(sp,AAAAA)的作用是将字 符中“AAAAA”连接到字符串sp的末尾,并自动覆盖字符数组sp末尾 的 0。10.1+a 1-al+a rnl-a解析:因为题目中求的是l+|a|的值,即1和a的 绝对值之和。所以根据数学中求绝对值的规则,当a=0时,绝对值取 本身,当a=0。注意:逗号表达式的求值规则。11.D12.B13.D14.D15.B16.C17 .An根据题意,当s=l时,输出65 ;当s=2时,输出6 ;当S=3时, 则输出64 ;当S=4时,输出5 ;当s=5时,输出6 ;当s=0时,程序直 接退出。所以最后答案为6566456, A选项正确。n18 .D19 .C20.D当k=l时,循环成立,输出wl的数组即EFGH,接着执行k+后k为2;当k=2时,循环成立,输出w的数组即IJKL,接着执行k+后,k为3;当k=3时,循环不成立,退出。21 .【解析】题