《2022年辽宁省沈阳市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年辽宁省沈阳市全国计算机等级考试C语言程序设计真题(含答案).docx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年辽宁省沈阳市全国计算机等级考试C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、 数据结构、数据流 和处理过程。2 . mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返 回。请填空。int mystrlen(char*str) int i ;for(i=0 ; !=0 ; i+);return(i) ; 3 .若有定义语句char s100,d100;intj=0,i=0;fi s中已赋字符串,请填 空以实现拷贝。(注:不使用逗号表达式)while(si)dj= ;j+;
2、dj=0;4 .对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时, 需平均移动元素的个数为【】。25.编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最短字符串中第一个字符串,传回该串地址(用一个新串“*”作为结束输入 的标志)。注意:部分源程序给出如下。请勿改动main ()函数和其 他函数中的任何内容,仅在函数fun ()的花括号中填入所编写的若干 语句。试题程序:二 include h# include # include Vconio. hchar fun(char ( 100uni num)void main()( char str10100 * minii
3、nt nti = O:FILE out i pnntf ( inpul strings withas end: *);gets(striiput5(strCi(while(! strcmp(stiiH M) = =0 (i+ r gets(stri) sn11min fun(strn);prind( nmin %*rT min) 3out = fopcn( Moutfilc. datM *w*):sircpy( MrOj .just *);strcpy(strLi.*a*)irepy(st r2 * * testH) itrcpy(str3 *M)mcM);sircpy(stif4ttool?
4、!?* ifprintKouu tfun(strt5) ifclosc(our);26,使用VC+2010打开考生文件夹下progl中的解决方案。此解决方案 的项目中包含一个源程序文件progl.co在此程序中,请编写函数fun(), 其功能是将放在字符串数组中的M个字符串(每个字符串的长度不超过 N),按顺序合并成一个新的字符串。例如,若字符串数组中的M个字符串为|“AAAA”,“BBBBBBB”, “CC”|,则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语
5、句。试题程序:#include #include #define M 3#define N 20void fun (char aMN, char *b) ( )void main ()(char wMN=“AAAA”JBBBBBBB”, CC”;char al 00= #;int i;printfThe string:rT);for(i=0; iputs(wi);printf(n”); fun(w,a);printf (The A string:n);printf(%s,a);printf (“nrT);27.请编一个函数 void proc(int ttEMN, int ppN), tt 指
6、向一个 M 行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include#include#include#define M 3#define N 4void proc(int ttrM3rN。int ppN)()void main(intstrMN= 34, 56, 84, 78,23, 84, 93, 12),28, 38, 39, 93;intpN, i, j, k;system(CLS);prin
7、tf(The riginal data is: n);for(i=0; iM; i+) forG=0; jN; j+)printf(%6d, strij);printf(n); )proc(str, p);printf( nThe result is: n); for(k=0: kM; k+)printf(%4d, pk);printf(n); 28 .使用VC +2010打开考生文件夹夹下progl中的解决方案。此解决 方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数 fun(),该函数的功能是删除一维数组中所有相同的元素,使之只剩一个。 数组中的元素已按由小到大的顺序排
8、列,函数返回删除后数组中元素的 个数。例如,若一维数组中的元素是2223445 666677 899 10 10 10删除后,数组中的元素应该是 23456789 10注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun ()的花 括号中填入你编写的若干语句。试题程序:#include #define N 80int fun (int a , int n) void main ()(int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10, i, n=20;printf (The original data:n)
9、;for (i=0;in;i+) p=nnx/n;i+)printf(n%3d, ai);n=fun(a, n);printf (nnThe data after deleted:n);for(i=0;in;i+) p=Hnx/n;i+)printf(3d;ai);printf (nn);)29 .编写fun()函数,它的功能是:利用以下所示的简单迭代方法求方程 cos(y)-y=0的一个实根。yn+l=cos(yn)迭代步骤如下:(1)取yl初值为0. 0;(2)y0=yl,把yl的值赋给y0;(3)yl=cos(y0),求出一个新的 yl;(4)若y0=yl的绝对值小于0. 000001,
10、则执行步骤(5),否则执行步骤(2);(5)所求yl就是方程COS(y)-y=0的一个实根,作为函数值返回。程序将输出结果Result=0. 739085o请勿改动main()函数与其他函数中的任何内容,仅在函数fun()的花括 号中填入所编写的若干语句。部分源程序给出如下。试题程序:St inclwirh 8 include . inrltMir Vzdso. hfloat raid f*ain( FILE otMiftoot COB-fs1pnfitf(ReMilt . % fnv coa) out fopeoCdat*w*)i (pnntf (outcm )ioui 430.使用VC+2
11、010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,编写一个函 数,其功能是从传入的num个字符串中找出最长的一个字符串,并通 过形参指针max传回该字符串的地址(用*作为结束输入的标识)。 注意:部分源程序在文件progl.c中。请勿改动主函数main。和其他函数 中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。 试题程序:1 #include 2 #include 3 #include 4 #include 5 char * fun (char ( * a) 81, int num, char * max) 67
12、)8 void main ()9 10 FILE * wf;11 char ss 10 81 , * ps =NULL;12 char s381 = abed, deg, diegns, *p=NULL;13 int i = 0 , n;14 system(nCLSn);16printf(输入若干个字符串:”);17 gets(ssi);18 puts (ssi);19 while (! stremp (ss i ,* )=0)/*ffi 4 个星号作为结束输入的标志*/20 21 i+;22 gets (ssi);24 puts (ssi);2526 n = i;27 ps=fun(ss,n
13、,ps);28 printf (nnmax = sn”,ps); Kt* kJ*kI# vt* kI* kJ* /J 1 / /卜一卜一卜/卜 /30 wf = fopen (out .dat, w);31P = fun (s,3,p);32fprintf(wf,% s,p);33 fclose (wf);A /kJ*si*/4 /1 /四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制 到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用 fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串 b中的内容则为AB
14、C DEF GHI JKO请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include void fun (char *p, char *b) int i, k=0;while (*p)/* found * / E/* found* *!while (i 3| *P) bk=*p;k+; p+; i+;)if (*P)/ 5I* ;)bk=(y;) main () char a80,b80;printf (Enter a string: ); gets (a); printf (The original string:
15、 ); puts (a);fun (a,b);printf(nnThe string after insert space: ); puts(b); printf(nnn ); )32 .下列给定程序中,函数fun()的功能是:根据以下公式求口的值,并 作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输 出 Pi=3.140578on/2= 1+1/3+1/3 *2/5+1/3 *2/5 *3/7+1/3 *2/5 *3/7*4/9请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #inc
16、lude #include double fun(double eps)double s,t; int n=t;s=0.0;/ vl* *1* kL* vl*vt* kL*kL* vL* /不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不/t=l;/ 7,7,k! 7,k! 7,7,01 kJ k! 7,7,7,7,7,7,*1 k!/小小小不不不小不不不不小小tciind不不不不不不不不不不小不不不/while(t eps) s+=t;t=t*n/(2*n+l);n+;)/ vl*vlvt* vf*1vL* /不不不、下不不不、不下不不tci inri不不不下不不不、不不不
17、不、下/ return (s);main() double x;printf(nnPlease enter a precision: );scanf(n%lf&x);printf(nnPi=%lfn fun(x);)33 .下列给定程序中,函数fun()的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序;#include #include void fun(int a,b) int t;/7, 7,1 kI7 7,*17,7,*1 k1/小小
18、小不不不小小不不不不小tciind不不不不不小不不不不小不不不/t=b;b=a;a=t;)main() int a,b;clrscr();printf(nEnter a, b: “); scanf(%d%d,&a,&b);fun(&a, &b);printf(na=%d b=%dn n, a,b);)34 .下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include int fun() int a
19、3 3,sum;int ij;/ vt* vt* kL*vlkL*1vl*/不不不不不不不不不不不不不tmind不不不不不不不不不不不不不不/sum=l;for (i=0;i 3;i+) for(j=0;j 3;j+)/小小小不不不不小不不不小小tm小不不不不小不不不不不不不不/ scanf(n%dn,aij);for(i=0;i 3;i+)5.以下程序运行后的输出结果是()。#include main() int x=20;printf(n%d 0x 20);printf(M%dn 0 x & x 20);)6 .在面向对象方法中,类的实例称为7 .以下程序的输出是【】。main()(cha
20、r strl=nHow do you don,*pl=strl;strcpy(str 1 +strlen(str 1 )/2,nes she); printf(n%snpl);)8 .下面程序的运行结果是o#define DOUBLE(x, y)x/ymain() int x=4, y=2, t ;t=DOUBLE(x+y, x-y);printf(n%dM, t);9 .数据库管理系统常见的数据模型有层次模型、网状模型和【】3种。sum=sum+aii;printf(nS um=%dn sum);) main() ( fun();)35 .给定程序中,函数fun()的功能是:使数组中的元素的
21、值增加10倍。 改正其中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构. 试题程序:#include #include iht m10;void fun(void) ( intj;printf(nIn subfunc after callingnn);for(j=0;j 10;j+)(/ / /不不不不不不不不不不不不Tei me不不不不不不不不不不不不不不不不不不不不不不/printf(n%3dn,mj*10);) ) main() int i; printf(nIn main before callingnn);for (i=0; i 10;
22、 i+)( mi=i;printf(n%3dmi);) fun (); printf(nnln main after callingnn);for (i=0; i 10; i+) printf(n%3dmi);getch ();)36 .下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t 所指字符串的个数作为函数值返回。例如,当S所指字符串中的内容为 abcdabfab, t所指字符串的内容为ab,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构. 试题程序:#include#include#includ
23、eint fun (char *s, char *t)int n; char *p, *r;n=0;while(*s)P=s;r=t;while (*r)/I/不不不不不不不不不不不不不不inri不不不不不不不不不不不不不不/if(*r=*p) r+; p+else break;/ 7 77,7,7,017,7,/小小小不不不不小不不不不小tcind小不不不不小不不不不不不不不/if(r=,(y) n+;)return n;)main()char s100, t100; int m;clrscr();printf(nnPlease enter string s:);scanf (n%sn,s)
24、;printf(nnPlease enter substring t: scanf (”s”,t);m=fun (s,t);printf(nnThe result is: m=%dnn, m);37 .下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main,数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include void fun(long sjong *t) /1*Kt
25、* /q. 、,rj、rT 、/ int d;long sl=l;*t=0;while(s 0) d=s%10;/ / / *r* T*rr*r rrrlrrT /if(d%2=0)*t=d*sl+*t;sl*=10/kL*vl*vt* st*/rrw rr* *rw/s=10;) main () long s,t;clrscr();printf(nnPlease enter s: ); scanf(“ld”,&s);fun(s,&t);printf(nThe result is :%ldnn,t);)38 .下列给定程序中函数fun()的功能是计算正整数num的各位上的数 字之平方和。例如:
26、输入352,则输出应该是38 ;若输入328,则输出应该是77。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include long fun(long num) /* _|_ * *+* _|_ * _|_ * found * * * * * * * * * * * */ long k= l ;do k+=(num% 10) * (num% 10);num/=10 ;/* * * * * * * * *+found *+* *+*+*/ while(num)return(k);) main() long
27、 n ;clrscr();printf(nPlease enter a number :n);scanf(%ld, &n);printf(n%ldn, fun(n); )39 .下列给定程序中,函数fun()的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include int fun( int m) int i,k;for (i=m+l; ;i+) for (k=2;k i;k+)/7,1kI*/不小不不不不不不不不不不小tciind不不
28、不不不不不不不不不不不不/if(i%k!=0)break;/kL* vl* vl* kL*1*1*/不不不不不不不不不不不不不tmind不不不不不不不不不不不不不不/if(ki)return(i);) main() int n; clrscr (); printf(nnPlease enter n:); scanf(d&n);printf(n%dnfun(n);40 .下列给定程序中函数fun()的功能是;从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数为4576235时,t中的数为4725。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数
29、,不得增行或删行,也不得更改程序的结构。试题程序:#include #include /1si*si/不不不不不不不不不小干.不tci不不不不不不不不不不不不不/int fun(long S, long *t) long sl=10 ;*tiS%10 ;while(s 0)/I/不不不不不不不不不不不不不tci inc不不不不不不不不不不不不不/s=s%100 ;*t=S%10*Sl+*t ;sl=sP10 ;) main() long S, t ;clrscr();printf(nnPIease enter S : n);scanf(ld,&s);fun(S, &t);printffThe
30、result is : %ldn,) t); )五、程序改错题(2题)41 .下列给定程序中,函数proc()的功能是:对M名学生的学习成绩, 按从低到高的顺序找出前m(mW10)名学生来,并将这些学生数据存放 在一个动态分配的连续存储区中,此存储区的首地址作为函数值返 回。请修改程序中的错误,使它能得到正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结 构。试题程序:u tndixW Vzdlih=include Vcookk h Hiclvde 1 ring.8 include ldio. h 0 define M 10typtdcf mryct ”char in
31、i mSTUSTU procCSTU 晨, m)STU bM:. t ini i jk /* 10MMi i0*rallocmMMo4(STU)t for i-0“VM “+ ) Km. (or(k0ik I/ fotmd (or/ IommI bGltioot return “I vmd ou fprit(p4 *No *i Mirk 山工 bi fpeiatkpft Wn sud main. WAO2 %U5|.C403 .941 J A04 SM AOS 751 CAO -eMIJ eA07 76hl -AM a.43l CAM 17HiSTU p(rdkr bih i. miEeLCL
32、Se)!pniHfC THE RESULTe W outreMlt( .1 , ntdowt i |mntfC*nGivY the number u( ihe tudents wh have hwrr xoe *icanK whilel( pnmfnGne the outnbrr of ibr tudenH who have lower coret )ipnntft(rder。. nm*pi(rrcr4rri42.已知一个数列从。项开始的前3项为0, 0, 1,以后的各项都是其相邻 的前3项之和。下列给定的程序中,函数proc ()的功能是:计算并输 出该数列前n项的和sum。n的值通过形参传
33、人。例如,当n-20时,程 序的输出结果应为42762 .00000()。请修改程序中的错误,使它能得到 正确结果。注意:不要改动main ()函数,不得增行或删行,也不得 更改程序的结构。试题程序:H indude VQdhb. hJ生 ifidude It ifirlude Veldioi hliotibie procCmiidtjuhlr ) si ufn / loMBd *2 1 rvtutn wfwivoid fMani )mi nt*CLS* I pruttfC*Input、).“id (Iprmtftw Kfn* proKallt六、操作题(2题)43 .下列程序段的运行结果是一
34、 int x=O,y=O;while(x 15) y+,x+=+y;printf(%d,%d,y,x);44 .以下程序的输出结果为【】。 main() intk=l;white(k =15)if(+k%3! =2)continue;10 .下面程序用来输出结构体变量a所占存储单元的字节数,请填空。 main() struct stucharx20 ; float y ; a ;printf(na size:%dnn, sizeof(); )二、单选题(10题)11 .设R是一个二元关系,s是一个三元关系,则下列运算中正确的是 ()。A.R-S B.RxS C.RAS D.RU S12 .(2
35、8)若有以下定义,则对a数组元素的正确引用是()0int a(5p=a;A) *&a5B) *a+IC) *(p+5)D) *(a+2)13 ,有以下程序:#include int funstatic int x= 1 ;x+=l ; return X;)maininti, S=1 ;for(i= 1; i=S ; i+)s+=fun;else printf(%d ,k); printf(n);)参考答案1 .数据存储数据存储2 .*(str+i)或stri*(str+i)或stri解析:str是指针变量,它指向字符型数 据,在循环过程中,可以用*(str+i)来访问字符串中的第i个元素,判断
36、 是否是结束标志,如果不是,i=i+l,继续取下一个元素进行判断,直到 *(str+i)的值为WT为止,也可以用下标的方式引用字符,如*(str+i)相当于 stri。3,si+si+解析:本题中为了能实现字符串的拷贝,需要使字符数组 s从头到尾依次遍历其所有元素。本题应使用i的自增后置来实现。4.n/2n/2解析:删除一个元素,平均移动的元素个数为(31+!1- 2+.+0)/n=(n-l)/2 ;插入一个元素,平均移动元素个数为(n+n-l+n-2+. + l)/n=(n+l)/2 ;所以总体平均移动元素个数为n/2o5.1010解析:表达式0x 20,首先计算0x,其值为1,再计算1 2
37、0,其值为1,输出1 ;表达式0x&x20, 0x为1, *20为0, 再计算1&0,其值为0,输出0。所以输出结果为10。6 .对象对象解析:类描述的是具有相似性质的一组对象。例如,每本具 体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一 般的概念“书”这一类对象。一个具体对象称为类的实例。7 .How does sheHow does she 解析:strcpy(strl, si);字符串拷贝函数, 作用是将字符串si拷贝到字符数组strl中去。strlen(str):测试字符串str 的长度,函数的值为字符串中实际长度,不包括ov在内。本题中 strlen(strl)的值为
38、 13 ,则 strcpy(strl+strlen(strl)/2,es she);相当于 strcpy(strl+6,es she);,因此可得答案为 How does she8.29.关系模型关系模型解析数据库管理系统是位于用户与操作系统之间 的一层系统管理软件,是一种系统软件,是用户与数据库之间的一个标 准接口。其总是基于某种数据模型,可以分为层次模型、网状模型和关 系模型。W.dd解析:d被定义为一个结构体类型变量,求结构体变量a所占存 储单元的字节数即sizeof(d)011.BBo【解析】关系的交)、并(U)和差G)运算要求两个关系是同元的, 显然作为二元的R和三元的S只能做笛卡儿
39、积运算。12.D13.B本题考查静态变量,C语言中静态变量的生存期是从程序的开始到结 束。本题中静态变量x,随着每次进入循环不断增长5次,返回的值分 别为 2、3、4、5、6o 所以 S=l+2+3+4+5+6=21, 选 B。14.C在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常 量。15.D本题考查drhile循环。第一次循环,y= y-L y=2,循环条件成立,x=l, X+后值为1, x自加变成2,进入循环,a=a+l=l,判断if语句 条件是否成立,yx不成立,接着执行下一次循环。第二次循环, x=2,
40、y-l=l,循环条件成立,进入循环,a=a+1 =2,判断if语句的控制 条件是否成立,yX成立,执行break语句,退出循环。结果为D。16.D17 .D函数的参数可以是指针类型,它的作用是将一个变量的地址传送到 另一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义 为“void (*Pf)();“。如果定义为“void *pf();,则表示函数pf的返回值是 一个基类型为void的指针。故本题答案为D选项。18 .A解析:C语言中的函数可以进行递归调用,但不能在函数中定义函 数,即函数不能嵌套定义。函数可以没有返回值,若有返回值,则返回 值类型必须确定。19 .C函数fun(int x, int y)的功能是返回x+Y的值。在主函数中,变量a,b, c的初始值分别为1, 2, 30因此逗号表达式“a+, b+, a+b”的 值等于5,表达式C+的值为3,调用于函数的表达式为3); ”,其返回值等于8。20.D21 .double fun(STREC *a, STREC *b, int *n) (int ij =0;double av=0.0;for(i=0; i av=av+ai.s;av=av/N; /*求平均分*/for(i=0; iif(ai.sav) p=nnx/av) bj+