《2023年四川省泸州市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2023年四川省泸州市全国计算机等级考试C语言程序设计真题(含答案).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年四川省泸州市全国计算机等级考试 C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .算法复杂度主要包括时间复杂度和【】复杂度。2 .若有说明 char sl=That girl, s2=is beautiful;则使用函数 strcmp(s 1 ,s2)后,结果是。3 .若fp已正确定义为一个文件指针,dl.dd为二进制文件,请填空, 以便为“读”而打开此文件:fp=fopen() ;o4 .汉字系统中,字库中的汉字是以【】码存在。5 .以下程序的输出结果是【】。#define MCRA(m) 2*m#define MCRB(n,m) 2*MCRA(n)
2、+m main() (int i=2, j=3;printf(n %dn MCRB (j ,MCRA(i); )6 .以下程序运行后的输出结果是omain()=dt fine N 4 s mcludr uii ptocC Ei _ N,) mid fMm( )int an*:,N: * “37.ll553.2.4Z. - B2.9.81 -3S3.“,i63-9)i phntf( wruh* %dn*proeArT)s25.使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数其功 能是移动一维数组中的内容,若数
3、组中有n个整数,要求把下标为。P(含P,P小于等于n- 1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为1、2、3、4、5、6、7、8、9、10;P 的值为3。移动后,一维数组中的内容应为5、6、7、8、9、10、1、2、 3、 4o注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的内容,仅在函数fun()的花括号 中填入你编写的若干语句。试题程序:#include #define N 80void fun (int *w, int p, int n) () main () int aN= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);i
4、nt i,p, n=15;printf (The original data :n);for(i=0; iprintf C%3d9ai);printf (nnEnter pscanf (d”, &p);fun(a,p,n);printf (nThe data after moving:n);for(i=0; iprintf C%3d5ai);printf (nn);26 .假定输入的字符串中只包含字母和*号。请编写函数proc (),它的功能 是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的 *号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删 除。例如,字符串中的内
5、容为*A*BC*DEF*G*,若m的值为2, 删除后,字符串中的内容则应当是*A*BC*DEF*G* ;若m的值为 4,则字符串中的内容仍为*A*BC*DEF*G*n的值在主函数中输 入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源 程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:indode V tdiou & mclude void procm( )HwirmipciAtfC *Enier MnrMtinM)igrt*(iitr)ipnnd(*Enter m( *)tcatfCHd*.6 m)i
6、proc(prinlfC - Th ifui. After delrti :d* ) s tMitw( *tr) i27 .学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构 体数组中,请编写函数fun,其功能是:把分数最低的学生数据放入b所 指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低 的学生人数:注意:部分源程序在文件PR0G1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数flm的花括 号中填入你编写的若干语句。的indude iMefine N 16typodef atractchar huid 10 :int ;i STREC;int f
7、un( STREC at STREC b ) main()(STREC s(N芸 H-GA05- f85| J-CA03Ht76| ,|”GA0T ,69| J-GA04f-GAOr.911 JHCA07-t72|.rGA0864| J-CA06w ,87| .I GA015-,85|tr GA013-t91|J CA012 t64|t| CA014 t911, I-CA011-t91|.| wGA017.64| JwCA01864| f | wCA01672| | ; STREC hN; im tn;FILE out ; n = fun( s.h );printf( *De %d lowes
8、t score nHtn);fbr(i s0;i n; i )printf(%B %4dn th i. nuin.hfi. );printf (-Vn);out = fopen(out da/ Jw* );fprintf(outt %dnf,fn);fbr(i *0;i n; i + )fprintf(out9 *%4dnwthi. );fcloee(out);128.使用VC+2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记 录由学号和学习成绩构成,N名学生的记录已存入a结构体数组中。 请编写函数fun(),该函数
9、的功能是找出成绩最高的学生记录,通过形 参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请 完成该函数。注意:部分源程序给出如下。请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include #include #include #include #define N 10typedef struct ss / *定义结构体*/char num10;int s; STU;fun (STU a口, STU *s)()void main ()(STU aN=“A01”,81, “A02”,89,“A03”,66, “A04”,
10、87,“A05”,7, “A06”,90 , “A0779,“A08”,61,广A09180, “A 10”,71 ,m;int i;system(“CLS”);printf (“*The original data*);for (i=0; i N; i+)printf (uNo=%s Mark=%dn, ai.num,ai-s); fun (a, &m);printf (*THE RESULT*n);printf (The top:%s5 %dn m.num,m.s);)29.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程 的成绩已在主函数中给出,请编写函数,其功能是:求出该学
11、生的平均 分,并放入记录的ave成员中。例如,学生的成绩是:85 .5, 76, 69 .5, 85, 91, 72, 64 .5, 87 .5,则他的平均分应为78 . 875。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。试题程序:#include#define N 8typedef struct(char num 10;double sN;double ave ;STREC ;void fun(STREC*a)()void mainSTRECs=GA005, 85 . 5, 76, 69 . 5, 85, 91, 72,
12、64.5, 87.5;int i ;fun(&s);printf(nThe%ss student data : nn, s.num);for(i=0 ; iN ; i+)printf(%4 . Ifkn, s . si);printf(Hnknave=%7 . 3fknn, s.aVe);printf(nnn);30.请编写一个函数proc,它的功能是:求出1m(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传给m的值为70,则程序输出:7 11 14 21 22 28 33 35 42 44 49 55 56 63 66 70注意:部分源程序给出如下。请勿改动
13、main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。试题程序:#include#include#include#define N 100void proc(int m, int*a, int*n)()void main(int arrN, n, k;system(nCLSn);proc(70, arr, &n);for(k=0 ; kn; k+)if(k+l)%20=0) / /每行输出20个数 printf(n%4d% arrk);printf(nnn);)elseprintf(M%4d arrk);printf(Hnn);四、2.程序修改题(10题)31.给
14、定程序MODH . C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!12 345 6789;linclude ! long fun(int xr int y,long *p); int i;j long tl;I /*found*/i for(i-1; iy; i+)j!*p-t;I /found/101112131415t-t/1000;return t;main () long tf r; int xr y;
15、printf (Mnlnput x and y:H);161718scanf (w%ld%ldn/&y);tfun(xryr &r);printf(Mnnx%dr y-%dr r%ld, last%ldnnwrxr yr rr t);32.下列给定程序中,函数fun()的功能是/计算函数F(x, y ,z)=(x+y)/(x- y)+(z+y)/(z-y)的值。其中x和y不相等,z和y不等。例如,当x的值为9, y的值为11, 2的值为15时,函数值为-3.50。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#includ
16、e #include / 7,7 7,7,7,7 7 7 7 7 7,7, 1 7” 7” 7/ 7,7 7 7 7,7 7 7, 7,7,7,7 7 7 / /不小小个小个不小不小个不不不tci nd小小个小不小不不公不不不不不不不不不/#define FU(m, n) (m/n)float fun(float a, float b, float c) float value;value=FU(a+ b, a-b)+FU(c+ b, c-b);/vl/不可不不不不不不不不不可不ci me不不不不不不不不不不不不不不不不不不/return( Value);main() float x, y,
17、z, sum;printf (Input x y z: );scanf(n%f%f%f&x, &y, &z);printf(nx=%f, y=%f, z=%fn ”,x, y, z);if (x二二y | | y=z) printf (Data error! n n);exit (0); )sum=fun (x, y, z);printf(nThe result is:%5. 2fn tsum);33.给定程序MODII . C中fun函数的功能是:根据整型形参m,计算 如下公式的值。例如,若主函数中输入5,则应输出-0.283333。请改正函数fun中的错误或在横线处填上适当的内容并把横线删
18、除,使 它能计算出正确的结果。3 456 7891011121314151617181 tinclude 2 i double fun(int m)double t = 1.0;int 1;for(i * 2; i * m; i+)/foundt 1.0-1 /i;/*found*/ main ()(int m ;printf(MnPlease enter 1 integer numbers:nM);scanf(H%dnr &m);printf (MnnThe result is fun(m);34.给定程序中函数fun的功能是:将一个由八进制数字字符组成的字 符串转换为与其值相等的十进制整数
19、。规定输入的字符串最多只能包含 5位八进制数字字符。例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include #include #include intp7= 11,13,14,15,16,17,18;int i=0, j=0 ;while(i 5) printf(nError: String too longer!nnn); exit(O);for(i=0; si; i+)if(si 7) printf(HError: %c not is ocatal digits!n
20、nn, si); exit(O);printf(nThe original string:);puts(s);n=fun(s);printf(nn%s iS convered to integer number: %dnnn, s, n); )35 .给定程序MODH . C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABC DEF GHI JKO请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改
21、程序的结构。1234567891011121314151617181920212223tinclude void fun(char *p# char *b) int i, k-0;while(*p) i-1; while(i3 & *p) /found b(k-p;k+; p+; i+;1if(*p)(/*foundw*/ bk+。” ,)bk-f0f;)main () char a80rb(80);printf(wEnter a string:w);gets(a);printf (The original string:; puts(a);fun (arb);24 printf (MnThe
22、 string after insertI space: “); puts(b); printf(Mnnw);25 : )36 .下列给定程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include #define N 20 void fun(int a, int n) int i,j,t,p;for(j=0; j n-l;j+)/kJ*。1* kL*/不不不不不不不不不不不tcnnd不不不不不不不不不不不/p=jfor(i=j; i n;
23、i+) if(ai ap)/不不小不小不不小小小不tm不不不不小不不不小4P寸 t=aP; ap=aj; aj=t;) msin()(int a N=(9, 6, 8, 3,-1), i, m=5;printf(排序前的数据: for(i=0; i m; i+)printf(n%d! ai);printf(HnH);fun(a, m);printf(排序后的数据:);for(i=0; i m; i+)printf(n%d ai);printf(nnH);)37 .给定程序MODH . C中函数fun的功能是:根据整型形参m,计算如下公式的值。, 1 I 11 y = 1 + + + + +38
24、 2 33 44 mm例如,若m中的值为:5,则应输出:1 . 46361L 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!234567891011121314include double fun (int m) double y - 1.0 ;int i;for(i - 2 ; i m ; i+) / found / y 1 / (i * i);return(y);)main () int n 5 ; printf(wnThe result is %lfnwf fun (n);38.下列给定程序中,函数fun()的功能是逐个比较
25、a, b两个字符串对 应位置中的字符,把ASCH值小或相等的字符依次存放到c数组中,形 成一个新的字符串。例如:a中的字符串为fshADfg, b中的字符串为sdAEdi,则c中的字 符串应为fdAADfo请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include void fun(char *p, char *q, char *c)int k=0 ;while(*p | *q)/ 1* kL*。11* kL* kL*1/ /不不不不不不不不不不tc md不不不不不不不不不不不不不不/ if (*p =
26、*q)ck=*q ;else ck : *p ;if(*p) p+ ;if(*q)q+ ;/1/不不+不不不不不不不不不不tci in d不不不不不不不不不不不不不不/k+) main()char a10=fshADfg, b10=sdAEdi,c80=0);fun(a, b, c);printf(nThe string a :n) ; puts(a);printf(nThe string b :n) ; puts(b);printf(nThe result :) ; puts(c);)39 .下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在
27、t中。例如,当s中的数为7654321时,t中的数为642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include /7,7, 7/ 7,7,7 7 7 7 7,017” 7,7,T” 7 7 7 7,7 7 7, 7,/不小小个不个不小不小个不不tci nri不小小不小不小不不公不不不不/void fun(long sjong t) long sl=10;s/=10;*t=s%10;/_vl%X/不不不不不不不不不不不不不ci me不不不不不不不不不不不不不不/while(s 0) s=s/10
28、0;*t=s%10*sl+*t;sl=sl*10;)main() long s, t;clrscr();printf(nnPlease enter s: ); scanf (n%ld&s);fun(s,&t);printf(nThe result is: %ldn n,t);40 .下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都 改为对应的大写字母,其他字符不变。例如,若输入“edS, dAd,则输 出“EDS, DAD”。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include
29、#include char fun(char tt) int i ;for(i=0 ; tti ; i+)/* Iif(tti =A)&(tti卜=2) tti-=32 ;)return(tt);) main()(int i ;chartt81;clrscr();printf(nnPlease enter a string :);gets(tt);printf(nThe result string iS : /n%s, fun(tt);五、程序改错题(2题)下列给定程序中,函数fun ()的功能是:计算函数F (x, y, z)=(x+y)/ (x-y) + (z+y) / (z-y)的值。其
30、中x和y的值不相等,2和Y的 值不相等。例如,当x的值为1, y的值为2, z的值为3时,函数值为 2.00。注意:不要改动main ()函数,不得增行或删行,也不得更改 程序的结构。试题程序:” include 纨 include Vstdio. h / found * xt define F(mn) (m/n) float fun( float afloat b float c) ( float*=F(*+b)J”-b) + F(c+b).(cb);/* found Return() i ) void main() (float xyzsum; prinif(*input x y z:M)
31、;printf 修 titrludr VcxnUo. 然 include V ntdick h dovblf pfoc(micliMihle 10. si 2 i in! ks Mitn- L Oi if ,urn - 0. 0 e g o 0t ls0.0|/ kMind lor mt nWCLS* ) i printfC * input、). xm” Hd* &!)3 prmtf(e%fn*wproct六、操作题(2题)43.使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记 录由学号和学习成绩构成,N
32、名学生的记录已存入a结构体数组中。请编写函数fun(),该函数的功能是找出成绩最高的学生记录,通过形参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include #include #include #include #define N 10typedef struct ss /*定义结构体*/char num10;int s; STU;fun (STU a口, STU *s)()void main ()(STU aN=A081, “
33、A02”,89,“A03”,66, “A0487,A0577, “A06”,90 , “A07”,79,“A08”,61,“A09180, “A 1071 9m;int i;systcm(“CLS”);printf (“*The original data*);for (i=0; i link=sB.s-link=H-link;H-link=s;C.s-link=H;H=s;D.s-link=H;H=H-link;12 .将两个字符串连接起来组成一个字符串时,选用()函数。A.strlen() B.strcpyO C.strcat() D.strcmpO13 .某二叉树有5个度为2的结点,则该
34、二叉树中的叶子结点数是 14 .若有以下定义,则对a数组元素地址的正确引用是()。int a5, *p=a;A.A.p 5 B.*a 1 C.&a 1 D.&a015 .用链表表示线性表的优点是()。A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除 操作D.数据元素的物理顺序和逻辑顺序相同printf (The top:%s9 %dn”, m.num9m.s);44.给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查 找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应 信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中 库函数strst
35、r(sl, s2)的功能是在si串中查找s2子串,若没有,函数值 为0,若有,为非0。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确 的结果。注意:源程序存放在考生文件夹下的BLANK1 . C中。不得增行或删行,也不得更改程序的结构!2345678910111213141516171819202122finclude include define N 5 fdefine M 15 void fun (char (*ss) M, char *substr) (int ir find-0;/ww*ww*found*/ for(i-0; i _1_ ; i+)/*found*/ i
36、f (strstr (ssi/_2_) !NULL) (find-l;puts(ss(i);printffound/ if (find_3_) printf (wnDon,t found!nH);) main() char x(N M = BASIC” JC langwage”, MJavaM JQBASIC, Access), str (M;int i;printf (nnThe original stringnnw); for(i-0;iN;i+)puts(xi);printf(nnw);printf(nnEnter a string for search :gets(str);fun(x
37、,str);)参考答案1 .空间空间解析 程序在计算机上运行时所耗费的时间由程序运行时所 需输入的数据总量、对源程序进行编译所需时间、计算机执行每条指令 所需时间、程序中的指令重复执行的次数等决定。习惯上常常把语句重 复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。 算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。2 .-1-1解析:strcmp(sl, s2)函数的作用是:对字符数组s2和字符数组 si进行比较。如果si s2,则返回正数。3 .dLdat“rb或“dl.dat”“r+b或 dl.dat“rb+”dl.dat, Tb或dl.dat?r+b”或 dl.d
38、af, rb+解析:本题考查的知识点是二进制文件的打开方式。打开 文件的函数为fopenC文件名,mode),其中mode,表示文件的打开方 式,如果打开的是二进制文件,其mode字符串可以是式b如果ab、 rb+ wb+ ab+o T表示以只读方式打开。W表示以写方式打开,如果 已有在该文件名的文件,文件中的内容将被清空。若文件名不存在,则 将创建该文件.区为追加方式打开。若文件存在时,将打开这个文件并 且在文件的末尾进行追加.当文件不存在,将创建新文件。打开一个 已有在文件用于更新(可读可写)Jw+,创建一个新文件用于更新,如果文 件存在,文件被重写(可读可写)。匕4打开用于追加,当文件不存在时, 创建新文件,并