《2022年辽宁省盘锦市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年辽宁省盘锦市全国计算机等级考试C语言程序设计真题(含答案).docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年辽宁省盘锦市全国计算机等级考试 C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .在面向对象方法中,属性与操作相似的一组对象称为【】。2 .若有以下定义和语句,sizeof(a)的值是【】,sizeof(a.share)的值是o struct date int day ;int month ;int year ;union int share 1 ;float share2 ; share ;a;3 .写出下列程序的输出结果 omain() int n=0;while(n+ = 1);printf(n%d;,n);printf(n%d,n+);函数fu
2、n()的花括号中填入你编写的若干语句。试题程序:.I ;#include 2 void NONO();:鬃int fun (char s)骞56| main () char *s = *2def35adh25 3kjsdf 7/kj8655x;9 printf(%sn,s);10 printf (,%dn/fun(s);HNONO ();12 13 void NONO O14 /本函数用于打开文件、输入数据、调用函数、输出数据及关闭文件。/15 FILE * fp, * wf ;16 int i;17 char s256;果fp = fopen(uin.dat nrM);麋wf = fopen
3、 (Hout .daf Mww);20 for (i -0 ; i 10 ; i +) fgets (s, 255, fp);fprintf(wf, %dn, fun (s);24 fclose(fp);fclose(wf);26 26. 假定输入的字符串中只包含字母和*号。请编写函数proc (),它的功 能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。例如, 若字符串中的内容为*a*bc*de/g。*,删除后,字符串中的内容则 应当是*a*bc*de/g。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入所编 写的若干语句。试题
4、程序:s tncludc hr* w include otd praHdur *irvotd nvunchar 481 ?prmif(Emer a MringAn) iproc()tpnntf( -Thr 7,mher deleted in) i put*( ) |下列程序定义了 MxM的二维数组,并在主函数中赋值。请编写函数proc(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主 函数中的s。例如,若a数组中的值为-01279i72093(25IS341则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿 改动main ()函数和其他函数中的任何内容,仅在函数proc
5、 ()的花括 号中填入所编写的若干语句。试题程序:S inrlude Vtudux hS ff iwludc c =include S dr/ine M S tai pror(mt w( M ) void matn)mt arr;M:M 17.9L672O”52mt i |tint umi)rtctn(pnntf( The array b -)i(or(沁0. KM, i+ +lor)(pnacl*K4Mitn*pror(arr)iprimfC THE RESULT *)ipriatft ,Tbe Mitn 0t Hdn .um),函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值
6、为奇数 的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。 例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符C的 ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符I的 ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依 此类推。最后t所指的数组中的内容应是“BDF12345”。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号 中填入你编写的若干语句。试题程序:#include #include void fun(char *s, char t D .(main().char s100,
7、t(100;printf (HnPlea$e enter string S:);=anf(%s”,s);fun (s, t);printf (nThe result is: %snM, t);数组point中存放着m个人的成绩,请编写函数fun ().它的功能是: 返回高于平均分的人数,并将高于平均分的分数放在high所指的数组 中。例如,当point数组中的数据为50, 60, 65, 70 .75, 80.88, 90, 95时,函数返回的人数应该是5, high中的数据应为75, 80, 88, 90, 95o请勿改动main ()函数与其他函数中的任何内容,仅在函数fun () 的花括
8、号中填入所编写的若干语句。注意:部分源程序给出如下。试 题程序:* includeVconi。. h includYstdio. h includc int fun(int pointJ.int n.int high3 min()int j.m.high9tmt point9150.60.65.70.75.80.88.90.95),)iprintfnjxT5onNunu %d .m)printf*nHigh thr average point are:);for(j=0jjmj4- +)printf( %d .highfjj) tpnntf(30.使用VC+2010打开考生文件夹下progl中
9、的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,定义了 NxN的二维数组,并在主函数中赋值。请编写函数fun。,其功能是求出数组 周边元素的平均值并将其作为函数值返回给主函数中的s。例如,若a 数组中的值为0 1279 19745 23 8 3 1 45 68 2 59141则返回主程序后s的值应为3.375。注意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句O 试题程序:1 #include 2 #include 3 #include 4 #define N 55 doubl
10、e fun (int w 1 fn1)6789 void main ()10 11 FILE * wf;12 int aNNl =0,1,2,7,9,1,9,7,4,5,238,3,1,4,5,6,8,2,5,9,13 int i, j ;14 double s;15systemCCLSH);16 printf (* The array * n );17 for (i=0; iN; i+)18 for(j=0;jN;j+)19 printf (*% 4d n,aij);20 printf (Hn 0);21 )22 s = fun (a);23 print” * The Result * nH
11、);24 printf (The sum is : % lnM,s);2 5 /26 wf = fopen(nout.dat,wM);27 fprintf (wf;,% if;s);28 fclose(wf);29 /*/30 )四、2.程序修改题(10题)31 .下列给定程序中函数fun()的功能是:计算n!。例如,给n输入5, 则输出 120.000000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun (int n) double result=1.0;/*1*
12、 *1* *1*1* *1* *1* t/不不不不不不不不*汴汴汴汴I c n( 不不不平不斗/if n=0return 1.0;while (n &n 170) /* found* */result *=nreturn result;main () int n;printf (Input N:);scanf (”d” &n);printf (,nn%d!=%llnn,n, fun(n);)32 .下列给定程序中,函数fun()的功能是:给定n个实数,输出平均值, 并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.199, 195,673, 195.757, 196.051,
13、 196.092, 196.596, 196.579, 196.763,所 得平均值为195.838745,在平均值以上的实数个数应为5。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include int fun(float xJ, int n)/%1 *1* *1*1 4, *f* *f* *4 *4* *4* * *4* - *1 1 1* *1* *1* , %1* /个个个个个个个个个个个个个个小小nc个个个个个个个个个个个个个个个个个个个/iht j, c=0;float xa=O.O;f
14、or(j=0;j n;.j+)xa+=xfj/n;printf(ave=%ftnn,xa);for(j=0;j =xa)C+;retumc;)main()float x100= 193.199,195.673,195.757,196,051,196,092,196.596,196.579,196.763;clrscr ();printf(%dnn,fun (x,8);)33 .给定程序MODH . C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:deba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得
15、增行或删行,也不得更改程序的结构!234567891011121314fun (chartinclude /found*(fun(a+1); found* printf(%c *a);main ()(char s(10)abcdw;printf (处理前字符串*13n处理后字 符串”,s);fun(s); printf(wnw);34 .给定程序MOD11 . C中函数。fun的功能是:从3个红球,5个白 球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没 有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红 球数,j的值代表白球数,k的值
16、代表黑球数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!345678910111213141516171819202122return sum;include int fun()(int i,j,k,sum0;. printf(wnThe result :nn);/*found*/ for(i0; i-3; i+) for(jl; j=0 & K-6) sum-sum+l;printf(wred:%4d white:%4d black:%4dn, i,j,k);main() int sum;sum-fun();pri
17、ntf(wsum %4dnnM/sum);35 .下列给定的程序中,函数fun()的功能是:计算并输出k以内最大 的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的 值为500,则函数的值为2925。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include int fun(int k)4 .排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、和选择排序。5 .下列软件系统结构图的宽度为。6 .在面向对象方法中,类之间共享属性和操作的机制称为7 .栈的3种基本运算是:入栈、退栈
18、和 o8 .下面程序的运行结果是#define DOUBLE(x, y)x/y main() int x=4, y=2, t ;t=DOUBLE(x+y, x-y);printf(%dn, t);)9 .有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变 量b,则不能把结点b连接到结点a之后的语句是【】。/1 1 4.-X* *f* *f* *4* * *4* * *&* *4* *4* /小小小小小小小小不不不不不tcund小小小不小不不不不不不不不/while(k =2)&(mc 6)! !, 、!* 7* 7* 7* 7* 7* 7*、!*、!,、!、!, / V* V* 7
19、* 7* 7* 7* 7* 7* V* 7. 7. 7. 7. /不不不不不不不不不不不不不t()i in(l不不不不不不不不不不不不不/if(k%7=0)|(k%ll=0)/ *1* *1* *1* “,、!*1* *1* !* !* !* *1* !* !* /*1 *&* *A* *A *A *A* *A* *A*“ *!* *!* *!* !* /小小小小小小小小小小小小小lc 】nd不不不不不不不不不不小小小小/m=k ;mc+ ;)k-;)return m ;) main()(clrscr();printf(n%dn,I fun(5OO);36.下列给定的程序中,函数fun()的功
20、能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #define N 20void fun(int a,int n)int ij,t,p;for(j=0;jn-l;j+)p=jfor(i=j;i n;i+) if(ai ap)/* found* */p=j;t=ap; ap=a|j; aj=t;)main()int aNJ=9.6,8,3,-l ,i,m=5;printf(”排序前的数据:);for(i=0;i m;i+) printf(%dM,ai)
21、;printf(nn);fun(a,m);printf(”排序后的顺序:);for(i=0;i m;i+) printf(H%dH,ai);printf(nn);)37 .下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s 中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为 7654321时,t中的数为642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include void fun(long s,long t) long sl = 10;s/=10;*t=s%10;f7*
22、 7* 7* 7* 7* 7*、!,、!7* 7* 7* 7* 7* 7* 7* 7. 7. 7./不不不不不不不不不不不不不不不不不不不不不不不不不不不/while(s 0) s=s/100;*t=s%10*sl+*t;sl=sl*10;main() long s, t;clrscr();printf(nPlease enter s: ); scanfC%kT,&s);fun(s,&t);printf(The result is: %ldn u,t);)38 .给定程序MODH C中函数fun的功能是 根据形参m的值(2WmS9), 在m行m列的二维数组中存放如下所示规律的数据,由main函
23、数输 出。例如,若输入2 |若输入4则输出:|则输出:1 2 | 123424 |2468| 3 69 12| 48 12 16请改正程序函数中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!23456789101112131416171819202122*include *include define M 10int a(M)M - (0);/* *- found*” void fun(int *ar int m) (int j, k ;for (j - 0 ; j m ; j+)for (k0;km; k+) /* *found*m a(jk
24、 = k * j ;main ()(int i, j, n ;printf (M Enter n : H); scanf (%dr &n);fun (a, n);for (i 0 ; i n ; i+) for (j-O;jn; j+*) printf , aij);printf (n);)39 .给定程序中函数fun的功能是:根据整型形参m,计算如下公式的 值。例如,若m中的值为5,则应输出:1.463611。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include double fun(int m) double y
25、=1.0;int i;tz*/小小小不不不不小不不不7不rc for(i=2; i m; i+)f、!* 7* 7* 7* 7* 7* 7*、!*、!,、!、!, / V* V* 7* 7* 7* 7* 7* 7* V* 7. 7. 7. 7. /不不不不不不不不不不不不不(,) 1 n(不不不不不不不不不不不不不/y+=l/(i*i);retum(y);main() int n=5;printf(nThe result is% 1 An,fun(n);40 .下列给定程序中,函数fun()的功能是:传入一个整数m,计算如下公式的值。t=l/2-l/3-.-l/m例如,若输入5,则应输出-0.
26、283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun(int m)(double t=1.0;int i;for (i=2; i indiMi* Vzdhb. h* indude Otdao. hindude Croaio. h void proctchar tr)int Uh(DcEntw a irtnct gerocprint(aBnTle ctrmg 4 chan)nc42.下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列 中第n项的值。从第
27、1项起,斐波拉契数列为:1, 1, 2, 3, 5, 8, 13, 21,.例如,若给n输入7,则该项的斐波拉契数值为13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构!试题程序:#include<stdio. h>long fun(int g)(* * * *und* * * *switch(g);(case 0: return 0;* * * * fbund* * * *case 1 : case 2 : return 1 ;)return(fun(g-1 )+fun(g-2);)void main(long fib
28、; int n;printf(Input n:);scanf(%d, &n);printf(Hn=%dnn, n);fib=fun(n);printf(nfib=%dnnH, fib);)六、操作题(2题)43 .以下函数用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。请填空。#include #include int fun(int *s, int t, int *k) int i;*k=0;1if(s*ksi)*k=i;return ; main() int a10= 876,675,896,101,301,401,980,431,451,777) ,k;fun(a
29、, 10, &k);printf(M%d, %dnH,k,ak);44 .下列给定程序中,函数fun()的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许79。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序;#include #include #include f(1 q.、!, 、!, 、!, 、! 、! 、! 、! 、! 、! 、!1/不不不不不不不不不不不不不不不不不O111不不不不不不不不不不不不不不不/void fun(char sJ, int n) char al
30、80, *p ;int i;t/ 个小小小小小小小个小小小m n n个个个个个个个个个个 /S=p;for(i=0; i n; i+) ai=*;ai=*p ;ti*X* *1*/小小小小小个个不小不”不不m uno个个个个个个小小个个个个个个不/i+;while(*p);ai=0 ;strcpy(s,a);)main() int n;char sf8O;clrscr();printf(nnEnter a string:);gets(s);printf(nThe string%snn,s);printf(nEnter n(number of*):H);scanfC%dn, &n);fun(s,
31、n);printf(nThe string after inster: %snn,s);参考答案1.类类解析在面向对象方法中,类描述的是具有相似性质的一组对象。 所以,属性与操作相似的一组对象称为类。2.1043.333,3解析:本题在while(n+=l)语句后,直接加了分号,说明如果 while。的条件为真时,该循环什么都不做:n+是先取n的当前值和1 做比较,然后再将n加1。第一次循环,n=0时,循环条件n+= 1成 立,执行循环,然后得到n=l。第二次循环,n=l时,循环条件n+=l =1成立,执行循环,然后得到产2。第三次循环,n=2时,循环条件 n+=2=l不成立,不执行循环,但在
32、判断循环条件时仍将n力口1,得 到n=3 .退出循环后执行printf语句,第二个printf语句输出n+,是先 输出n的当前值3,然后再将n加1,即程序结束后得到n=4,但输出 的是3。4 .交换排序交换排序解析所谓排序是指将一个无序序列整理成按值非 递减顺序排列成的有序序列,常用的排序方法有:交换排序、插入排序 和选择排序。其中交换排序包括冒泡排序和快速排序,插入排序包括简 单插入排序和希尔排序,选择排序包括直接选择排序和堆排序。5 .33解析:软件系统结构图的宽度:整体控制跨度(最大模块数的层)的 表 o6 .继承继承7 .读栈顶元素读栈顶元素解析:栈的基本运算有3种:入栈、退栈和读 取
33、栈顶元素。其中,入栈是指在栈顶插入一个新的元素;退栈是指取出struct node char data;struct node *next; a,b10 .以下程序段的输出结果是【】。int a=1234 ;printf(,%2dn,1 a);二、单选题(10题)11 .下列叙述错误的是()。A.函数名是属于用户标识符,需符合C语言对标识符的规定B.形参只能是变量C.为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量 同名D.函数中定义的变量可以与其他函数中的变量同名12 .向堆中插入一个元素的时间复杂度为 oA.O(log2n) B.O(n) C.O(l) D.O(nlog2n)1
34、3 .若某二叉树的前序遍历访问顺序是abdgceih,中序遍历访问顺序是 dgbaechf,则其后序遍历的结点访问顺序是()。A.bdgcefha B.gdbecfha C.bdgaechf D.gdbehfca14 .有以下程序:#include 栈顶元素并赋值给一个变量;读栈顶元素是将栈顶元素赋值给一个指定 的变量,不删除栈顶元素。8.29.a.next=aba.next=ab解析:选项A)中,指针变量q保存的就是变量b的 地址,选项B)中的p是指针变量,应该是p-next=&b;在选项D)中,用*运 算符取出结构体变量,并且保存的就是b的地址。10.12341234解析:在与格式符之间插
35、入一个整型数来指定输出宽度, 当指定宽度小于输出数的实际宽度时,则按实际宽度输出。11 .C解析:本题考查函数调用时参数的作用域。在函数调用时,函数体 内定义的变量的作用域连函数体内,因而在不同函数体内定义的变量可 以相同,不影响各个变量的使用。12 .A13 .D解析:中序遍历的递归算法定义:遍历左子树;访问根结点; 遍历右子树。前序遍历的递归算法定义:访问根结点;遍历左子 树;遍历右子树。后序遍历的递归算法定义:遍历左子树;遍历 右子树;访问根结点。根据前序遍历的结果可知,a是根结点。由中 序遍历的结果dgbaechf可知,d、g、b是左子树的结点,e、c、h、f是 右子树的结点。再由前序
36、遍历的结果bdg可知,b是a左边子树的根, 由cefh可知,c是a右边子树的根。再由中序遍历的结果dgb可知,d、 g是b左边子树的结点,b右边子树无结点。再由前序遍历结果dg可 知,d为b左子树的根,g是以d为根的子树的右结点。至此,a的左子 树已完全弄清楚了。同样的道理,可以弄清楚以c为根的子树的结点位 置。所以可知后序遍历的结果是Do14 .A函数“str1en(char *s)” ;计算字符串s的长度,不包括NO在内。p指 向数组的第2个元素,因此“Strien(P尸10”,并输出“one*Dream!”。故本 题答案为A选项。15 .C解析:统计19九个数中的奇数和,此题考察指向数组
37、的指针,C语 言规定数组名代表数组的首地址,也就是第一个元素的地址。因此 *(t+i)代表数组的第i+1个元素。程序运行的结果是 1+2+3+4+5+6+7+8+9=25 。16 .DD)【解析】二分法查找只适用于顺序存储的有序表,表中的元素按 值从小到大排列。17 .C18 .C19 .A解析:p+i是数组s的第i+1行的首地址,而*(p+i)则是数组第i+1 行第1列的元素的地址,*(p+i)+j则是第i+1行的第j+1列的地址,*(* (p+i)+j)引用的是数组元素的值。注意:通过建立一个指针数组来 引用二维数组元素。20.B21.题目中要求除了尾部的*号之外,将字符串中其他*号全部删
38、除。首先将 所有不是*的字符放在字符串str中,然后将尾部的*接在字符的后面, 最后为字符串str加上结束符。22.【解析】要找到所有学生中成绩低于平均分数的人数,首先需要算出所 有学生的平均成绩。然后将所有学生的成绩与平均成绩相比较。将低于 平均分数学生的记录存放在新的数组中,并将低于平均分数的学生数返 回给主函数。【解析】本题考查的是结构体类型、指针型变量、链表和if语句等知识 点。需要用for循环遍历链表中的每一个结点,用判断语句比较结点数 据域的大小。可以通过while循环实现对最大成绩的查找,具体步骤为 遍历链表遇到比max大的值(maxs)则赋值给max, max=h-so需要 注
39、意的是,h是指向结构体类型的指针变量,弓I用它指向的结构体的成 员时,要用指向运算符“一”。【解析】要将字符串中为奇数的字母转换为大写。首先应该判断奇数位 置上的字符是否为小写字母,若是则将其转换为大写,若不是则不予处 理。25.intfun(char*s)2;intn=0;3char*p;4: ;for(p=s;*p!=, 0;p _L+)if(*p,o,)&(,9,)6n+;7returnn;8要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化 为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条件为该 元素的ASCII值在字符。和9的ASCH值之间,若判断条件成立,则 使n的值加1,否则,继续判断下一个字符,直到字符串结束。【解析】要删除字符串尾部的所有*,只要将尾部所有*中的第一个改为 字符串结束符即可。首先,将字符串指针移动到字符串最后一个位置, 检查最后一个字符,是*则将指针前移,否则将指针后移一个位置赋值 作为结束符。【解析】要求出数组周边元素的平方和,首先要找到二维数组所有的周 边元素。二维数组的周边元素的特点为行下标或列下标为。或M 1。 根据这个特点,找出二维数组中所有的周边元素,求出其平方和放在变 量s中。最后将变量s返回到主函数中。28.【答案】void fun (char *st char t). .inti, j - 0 ;forii=0