2023年四川省泸州市全国计算机等级考试C语言程序设计真题(含答案).docx
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)+m main() (int i=2, j=3;printf(n %dn MCRB (j ,MCRA(i); )6 .以下程序运行后的输出结果是omain()=dt fine N 4 s mcludr <.tdid h> uii ptocC Ei _ N,) mid fMm( )int an*:,N: * “37.ll553.2.4Z. - B2.9.81 -3S3.“,i63-9)i phntf( wruh* %dn*«proe<ArT)s25.使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数其功 能是移动一维数组中的内容,若数组中有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 <stdio.h>#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);int i,p, n=15;printf ("The original data :n");for(i=0; i<=n,f p=nn>printf C%3d9ai);printf ("nnEnter pscanf ("d”, &p);fun(a,p,n);printf ("nThe data after moving:n");for(i=0; i<=nn p=nn>printf C%3d5ai);printf ("nn");26 .假定输入的字符串中只包含字母和*号。请编写函数proc (),它的功能 是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的 *号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删 除。例如,字符串中的内容为*A*BC*DEF*G*,若m的值为2, 删除后,字符串中的内容则应当是*A*BC*DEF*G* ;若m的值为 4,则字符串中的内容仍为*A*BC*DEF*G*°n的值在主函数中输 入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源 程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。试题程序:indode V «tdiou & mclude <cooio. b> void proc<char a«mt n)*vndl m>m( )HwirmipciAtfC *Enier MnrMtinM)igrt*(iitr)ipnnd(*Enter m( *)t>cat>fCHd*.6 m)i proc(prinlfC - Th< ifui. After delrt«<i :d* ) s tMitw( *tr) i27 .学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构 体数组中,请编写函数fun,其功能是:把分数最低的学生数据放入b所 指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低 的学生人数:注意:部分源程序在文件PR0G1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数flm的花括 号中填入你编写的若干语句。的indude < adio h >iMefine N 16typodef atractchar huid 10 :int »i STREC;int fun( STREC at STREC b ) main()(STREC s(N芸 H-GA05- f85| J-CA03Ht76| ,|”GA0T ,69| J-GA04"f-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( "*D>e %d lowest 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(),该函数的功能是找出成绩最高的学生记录,通过形 参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请 完成该函数。注意:部分源程序给出如下。请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include <stdlib.h>#include <stdio.h>#include <string.h>#include <conio.h>#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”,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门课程 的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均 分,并放入记录的ave成员中。例如,学生的成绩是:85 .5, 76, 69 .5, 85, 91, 72, 64 .5, 87 .5,则他的平均分应为78 . 875。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。试题程序:#include<stdio . h>#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, 64.5, 87.5;int i ;fun(&s);printf(nThe%ss student data : nn, s.num);for(i=0 ; i<N ; 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注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。试题程序:#include<stdlib . h>#include<conio. h>#include<stdio . h>#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 ; k<n; k+)if(k+l)%20=0) / /每行输出20个数 printf(n%4d% arrk);printf(nnn);)elseprintf(M%4d arrk);printf(Hnn);四、2.程序修改题(10题)31.给定程序MODH . C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!12 345 6789;linclude <stdio.h>! long fun(int xr int y,long *p); int i;j long t«l;I /*found*/i for(i-1; i<y; i+)j!*p-t;I /found/101112131415t-t/1000;return t;main () long tf r; int xr y;printf (Mnlnput x and y:H);161718scanf (w%ld%ldn/&y);t»fun(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函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio. h > #include < math, h >/ 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, 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中的错误或在横线处填上适当的内容并把横线删除,使 它能计算出正确的结果。3 456 7891011121314151617181 tinclude <stdio.h>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的功能是:将一个由八进制数字字符组成的字 符串转换为与其值相等的十进制整数。规定输入的字符串最多只能包含 5位八进制数字字符。例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include < stdio.h >#include < string.h > #include < stdlib.h > intp7= 11,13,14,15,16,17,18;int i=0, j=0 ;while(i < 7&&pi%2=l) j+=pi+;printf("%dn", j); )7 . x、y、x均为int型变量,描述“x、y和z中至少有两个为正数”的表达式是O8 .数据的逻辑结构有线性结构和 两大类。9 .以下程序的输出结果是omain() char sf-"abcdef';s3='0';printf("%sn", s); )10 .若有如下结构体说明:struct STRUint a,b;char c:double d;stmct STRU*pl,*p2;);请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。t20int fun(char *p)int n; / 7" 7" 7,1/不可不不不不不不不不tci不不不不不不不不不不/n=*p-'o'P+;while(*p!=0)/1/下个个不不不不不不不Tei不不不不不不不不不不/n=n*8+*p-'o'P+; ) return n;) main() char s6; int i; int n;printf(nEnter a string(Ocatal digits):11);gets(s);if(strlen(s) > 5) printf(nError: String too longer!nnn); exit(O);for(i=0; si; i+)if(si < V|si > 7) printf(HError: %c not is ocatal digits!nnn, 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函数,不得增行或删行,也不得更改程序的结构。1234567891011121314151617181920212223tinclude <stdio.h>void fun(char *p# char *b) int i, k-0;while(*p) i-1; while(i<«3 && *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 string after insertI space: “); puts(b); printf(Mnnw);25 : )36 .下列给定程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include < stdio.h >#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; 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 2 33 44 mm例如,若m中的值为:5,则应输出:1 . 46361L 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!234567891011121314include <stdio.h> 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()的功能是逐个比较a, b两个字符串对 应位置中的字符,把ASCH值小或相等的字符依次存放到c数组中,形 成一个新的字符串。例如:a中的字符串为fshADfg, b中的字符串为sdAEdi,则c中的字 符串应为fdAADfo请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h >#include < strinq.h >void fun(char *p, char *q, char *c)int k=0 ;while(*p | *q)/ 1* kL*。11* kL* kL*1/ /不不不不不不不不不不tc md不不不不不不不不不不不不不不/ if (*p < =*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中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h > #include < conio.h >/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/100;*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 < stdio . h > #include < string . h > #include < conlo . h > 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)的值。其中x和y的值不相等,2和Y的 值不相等。例如,当x的值为1, y的值为2, z的值为3时,函数值为 2.00。注意:不要改动main ()函数,不得增行或删行,也不得更改 程序的结构。试题程序:” include <stdio. h>纨 include Vstdio. h> / found « * « xt define F(m»n) (m/n) float fun( float a«float b« float c) ( float*=F(*+b)J”-b) + F(c+b).(cb)>;/* found » Return() i ) void main() (float x«y«z«sum; prinif(*input x y z:M);printf<"x= %fy = %f.z= %(rTxyz) ;if(x-=yl I y= =z)printfi "Data error! n" ) exit(0); I f sum" fun( x«y«x)prmtft "the result %5. 2fnw sum) i已知一个数列从。项开始的前3项为0, 0, 1,以后的各项都是其相邻 的前3项之和。下列给定的程序中,函数proc ()的功能是:计算并输 出该数列前n项的和sum。n的值通过形参传人。例如,当n-20时,程 序的输出结果应为42762 .000000。请修改程序中的错误,使它能得到正确结果。注意:不要改动main ()函数,不得增行或删行,也不得更改程序的结构。试题程序:* indude Vmdhh hJ> 修 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 <li,44kVfMh+/ fouftd 心,return MimtbmI matnC >mt n«WCLS* ) i printfC * input、). xm” Hd* &<!)3 prmtf(e%fn*wproc<n>>t六、操作题(2题)43.使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记 录由学号和学习成绩构成,N名学生的记录已存入a结构体数组中。请编写函数fun(),该函数的功能是找出成绩最高的学生记录,通过形参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include <stdlib.h>#include <stdio.h>#include <string.h>#include <conio.h>#define N 10typedef struct ss /*定义结构体*/char num10;int s; STU;fun (STU a口, STU *s)()void main ()(STU aN="A081, “A02”,89,“A03”,66, “A0487,A05<77, “A06”,90 , “A07”,79,“A08”,61,“A09180, “A 1071 9m;int i;systcm(“CLS”);printf (“*The original data*);for (i=0; i < N; i+)printf C'No=%s Mark=%dn", ai.num9ai.s);fun (a, &m);printf (*THE RESULT*n*);二、单选题(10题)11 .向一个栈顶指针为H的链栈中插入一个s所指向的结点时,需执行OoA.H->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的结点,则该二叉树中的叶子结点数是 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。程序中 库函数strstr(sl, s2)的功能是在si串中查找s2子串,若没有,函数值 为0,若有,为非0。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确 的结果。注意:源程序存放在考生文件夹下的BLANK1 . C中。不得增行或删行,也不得更改程序的结构!2345678910111213141516171819202122finclude <stdio.h> include <string.h> 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*/ if (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;i<N;i+)puts(xi);printf(nnw);printf(nnEnter a string for search :gets(str);fun(x,str);)参考答案1 .空间空间解析 程序在计算机上运行时所耗费的时间由程序运行时所 需输入的数据总量、对源程序进行编译所需时间、计算机执行每条指令 所需时间、程序中的指令重复执行的次数等决定。习惯上常常把语句重 复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。 算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。2 .-1-1解析:strcmp(sl, s2)函数的作用是:对字符数组s2和字符数组 si进行比较。如果si < s2,则返回负数;如果sl=s2,则返回0 ;如果 sl>s2,则返回正数。3 .dLdat"“rb"或“dl.dat”“r+b''或 "dl.dat"“rb+”dl.dat', Tb'或'dl.dat?r+b”或 'dl.daf, 'rb+'解析:本题考查的知识点是二进制文件的打开方式。打开 文件的函数为fopenC文件名,mode),其中'mode,表示文件的打开方 式,如果打开的是二进制文件,其mode字符串可以是式b'如果'ab'、 'rb+ 'wb+ 'ab+'o T表示以只读方式打开。W表示以写方式打开,如果 已有在该文件名的文件,文件中的内容将被清空。若文件名不存在,则 将创建该文件.区为追加方式打开。若文件存在时,将打开这个文件并 且在文件的末尾进行追加.当文件不存在,将创建新文件。''打开一个 已有在文件用于更新(可读可写)Jw+,创建一个新文件用于更新,如果文 件存在,文件被重写(可读可写)。匕4打开用于追加,当文件不存在时, 创建新文件,并