《2023年江苏省苏州市全国计算机等级考试C语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2023年江苏省苏州市全国计算机等级考试C语言程序设计真题(含答案).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年江苏省苏州市全国计算机等级考试C语言程序设计真题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .有以下语句段:int nl = 10,n2=20;printf( ,nl,n2);要求按以下格式输出nl和n2的值:nl=10n2=20每个输出行从第一列开始,请填空。2 .下面程序中函数creat用于建立一个带头结点的单向链表,新产生的 结点总是插在链表的末尾,单向链表的头指针作为函数值返回。将程序 补充完整。#include struct listchar data; struct list * next;;struct list * creat() (struct l
2、ist *h, *p, *q; char ch ;h = malloc(sizeof(struct list);p=q=h ; ch=getchar();while(ch!二?)tindude void fun( int me int k. int xx J )main()Iint m. ntiz1 100;void NONO();.printf( * nPlease enter an integer number between 10 and 100:);scarrf( *%d &n );fun( n. 8m. zz );printf( M nnlliere are %d non - pri
3、me number less than %d: . m, n );fbr(n=0;nm;n)printf( -n %4d n);NONO();Ivoid NONO()I/请在此函数内打开文件,11人测试数据.调用fun函数.幅出数据.关闭文件。/int m. nan 100 ;FILE - rf. wf rf = fbpen( in, dat * r* );wf = fopen(Mout datw /w* ) fecanf( if. %d-t&n );fun( n. &m, zz );fprintf(wf9 %dn%dnw, mt n );fbr(n=0;n4)fprintf(wft -%dn
4、w. zzn);fcloee(rf) ;.fcloee(wf);24 .假定输人的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为*a*bc*def*g*,删除后,字符串中的内容则应当是 a*bc*def*g*请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include#includevoid proc(char*str)()void main(char str81;printf(nEnter a string : knn);gets(str);pr
5、oc(str);printf(nThe string after deleted : knn);puts(str) ; 25 .请编写函数proc,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为:ABCDBCDEFGCDEFGHI则合并后的字符串内容应该是ABCDBCDEFGCDEFGH1 o注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。试题程序:#include#include#define M 3#define N 20void p
6、roc(char arrMN,char*b)()void main(char strMN=nABCDn, “BCDEFG,nCDEFGHI”, i;char arr100=n#);printf(The string: n);for(i=0; iM; i+)puts(stri);printf( n);proc(str, arr);printf(The A string: n);printf(%s, arr);printf(nn);)26.使用VC +2010打开考生文件夹夹下progl中的解决方案。此解决 方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数 fun(),该函数的
7、功能是删除一维数组中所有相同的元素,使之只剩一个。 数组中的元素已按由小到大的顺序排列,函数返回删除后数组中元素的 个数。例如,若一维数组中的元素是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,
8、10,10, i, n=20;printf (The original data:n);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=nnx/n;i+)printf(3d;aiD; printf (niT);27.请编写一个函数,用来删除字符串中的所有空格。例如,输入asd afaa z67,则输出为asdafaaz67 o注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你
9、编写的若干语句。试题程序:#i iclude ,t 由, #include h#tiiclude vo d fun (char *str) (main() char str31;char Msgf Input a string:71;int n;printf(Msg); gets (str); puts(str); fun(tr);28 .请编写函数fun (),其功能是计算并输出下列多项式的值:F=l + 1 / 1!+1 / 21 + 1 / 31+1 / 41+.+1 / m!例如,若主函数从键盘给m输入 5,则输出为F=2 . 716667。注意:m的值要求大于1但不大于100。部分源
10、程序给出如下。请勿改动main ()函数与其他函数中的任何内容,仅在函数fun ()的花括号中填入所编写的若干语句。试题程序:U include Vxdio. h tiowblr fwvt *i *canF(*1prawf( out fopeo *) s fck9e( out)29 .使用VC+2010打开考生文件夹下progl中的解决方案。此解决方案 的项目中包含一个源程序文件progl.c。在此程序中,规定输入的字符串 中只包含字母和*号。请编写函数fun(),其功能是使字符串中尾部的* 号不多于n个,若多于n个,则删除多余的*号;若少于或等于n个, 则不做任何操作,字符串中间和前面的*号
11、不删除。例如,字符串中的内容为“*A*BC*DEF*G*”,若n的值为4,删除后,字符串中的内容应为“*A*BC*DEF*G*;若n的值为7,则字符串中的内容仍为“*A*BC*DEF*G*”。n的值在主函数中输入。编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include void fun(char * a, int n) ()main () char s81; int n;printf (Enter a string: rT);gets (s);prin
12、tf (Enter n:); scanf(d”,&n);fun( s, n);printf (The string after deleted:n); puts (s);)30 .请编写函数proc (),它的功能是计算下列级数和,和值由函数值返回。 sum=l-x+x2 / 2 !-x3 / 3 1+.+ (-l*x) n / n!例如,当 n=23, x=0.3 时, 函数值为。.740818。注意:部分源程序给出如下。请勿改动main () 函数和其他函数中的任何内容,仅在函数proc ()的花括号中填人所编 写的若干语句。试题程序:* tnclu4t W includr iftrlud
13、e OL b # include VhuhIu h double poc( dcmble x mi nEid mam()*jmtcni( *CLSM )prioti*Kt *pracfl四、2.程序修改题(10题)31 .下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include void fun(char*S) (inti, j ;for(i=0, j=0 ; si! =0 ; i+)/ 7,7,7,7
14、,7,0 1 7,7,7,7,7,/ /小小小不不不小不不不不小小tciind不不不不不不不不不小小不/if(si =A&si =a&Si =z,) sj+=si;/ /rrw.sj=(r;main() char item80;clrscr();printffnEnter a string :);gets(item);printfCnnThe string is : %Snn, item);fun (item);printf(nnnThe string of changingis : %Sn, item); )32 .给定程序M0D11 . C中函数fun的功能是:将s所指字符串的正序 和反序
15、进行连接,形成一个新串放在t所指的数组中。例如,当s所指字符串为:“ABCD”时,贝IJt所指字符串中的内容应为:“ABCDDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!23456789tinclude include /found*,*void fun (char s, char t)(intforfori, d;strlen (s);(i = 0; id; i+) t i = s i;(i 0; id; i+) td+i 10 ;11 !12 ;13 14 !15 i16 :sd-l-ij;/found*育育 t2*
16、d-l - f0f;)main ()171819char s100, t100;printf (wnPlease enter string S:);scanf(R%sR/ s);fun (s, t);printf(nnThe result is:%snwrt);33.下列给定程序中,函数fun ()的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为6250请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include long fun(int x, int y, long *p) in
17、t i;long t=l;/kJ1k!/小个个个个个个个个个个个个小十门1 nd个个个个个个个个个个个个个个个/for (i=l; i data = ch;q- next=p ; q=p ; ch=getchar();)p- next = 0 ;;)3 .按“先进后出”原则组织数据的数据结构是4 .下列程序的运行结果是o#define POW(r) (r)*(r)main() int x=3,y=2,t;t=POW(x+y);printf(u%dnt);)5 .以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文 件末尾,然后调用ftell函数返回当前文件的具体位置,从而确定文件长
18、 度,请填空。FILE*myf;long fl ;myf= (testfJrb);fseek(myf,() SEEK_END) ; fl+ftell(myf);fclose(myf);printf(n%ldnn,fl);/k1 kJr1 k1 k1 k1 k1 kJ/个个个个个个个个个个个个个个/ci inc个个个个个个个个个个个个个个个/t=t/1000;return t;)main () long t, r; int x, y;printf(nnlnput x and y: ); scanfC%ld%ld&x, &y);t=fun (x,y, &r);printf(nnnx=%d, y=%
19、d,r=%ld, last=%ldnn ”,x, y, r,t);34 .下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t 所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为 abcdabfab, t所指字符串的内容为ab,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构. 试题程序:#include #include #include int fun (char *s, char *t) int n; char *p, *r;n=0;while(*s)p=s;r=t;while (*r)/
20、k! kJ1kJ/小个个个个个个个个个个个个 小十门1 / C 个个个个小个个个小个个个个小/if(*r=*p) r+; p+else break;/IKi1# /不不不不不可不不不不可不不tci不不不可不不不不不不不不不不/if(r=0) n+;s+;return n;)main()char s100, t100; int m;clrscr();printf(nnPlease enter string s:);scanf (n%sn,s);printf(nnPlease enter substring t:);scanf (n%sn,t);m=fun (s,t);printf(nnThe r
21、esult is: m=%dn”, m);)35 .下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当s中的数为8765为42时,t中的数为8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main,数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include void fun(long s,long *t) / *1* kL* kL*kL* *1* *1*kL* kL* *1*kL* kL*1* / J* rj*/ int d;long sl=l;*t=0;whil
22、e(s 0) d=s%10;/ *1*1 *1 / /、一一、彳、卜-1、可、-卜-R *1,*1,卜可、 门卜卜 卜、/、/if(d%2=0) *t=d*sl+*t;sl*=10/ vt*1 *1*1 *1 *1k1v!*1*1 *1*1k| / 、,J、-R -I、,q,-、,、q,卜-J、, q,q,,J、 q,卜一g-J、F/s=10;) main () long s,t; clrscr();printf(nnPlease enter s: ); scanf(”d,&s);fun(s,&t);printf(HThe result is :%ldnM,t);)36 .下列给定程序中,函数
23、fun()的功能是:计算s所指字符串中含有t 所指字符串的数目,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include #define N 80int fun(char *s, char *t) int n ;char *p, *r ;n=0 ;while(*s) P=s ,/k1 kJr1 k1 k1 k1 k1 kJ/个个个个个个个个个个个个个个/ci inc个个个个个个个个个个个个个个个/ r=p , while(*r)if*r=二*p) r+ ; p+
24、; else break ;/ 1si# 1 sl,1 J *J sl sl 1 si* st* *11 1 /个个不不不不不不不不不不不不Tciinri不不不不个不不不不不不不不不不/ if(*r=O) n+ ;s+ ;)return n ;)main()char aN, bN ; int m ;clrscr();printf(nnPlease enter string a :n);gets(a);printf(nnPlease enter substring b :n);gets(b);m=funa,b);printf(nnThe result is :m=%dnn, m); )37 .给
25、定程序MODH . C中函数fun的功能是:在字符串的最前端加入 n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79o请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!tinclude 234568910111213141516171819202122232425include void fun (char s, int n) (char a(80 , *p;int i; /*found*s-p;for (i-0; in; i+) ai; do ai*p;i+;)*found*/while(*p+)a(i-
26、0;strcpy(sza);)main ()( int n; char s 80;printf(MnEnter a string : n); gets(s);printf(MnThe string n%swnnrs);printf(wnEnter n (number of *): );scanf(w%dwr &n);fun(srn);printf (wnThe string after insert: %s” nw ,s);2638 .数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中, 函数fun()的功能是:计算前n(4SnS50)项的累计和。在累加过程中把那 些被4除后余2的当
27、前累加值放入数组中,符合此条件的累加值的个数 作为函数值返回主函数里。如,当n的值为20时,该数列为3, 8, 13.18, 23, 2893,98O符合此条件的累加值应为42, 126, 366,570, 1010o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:# include # define N 20 int fun(iht n, int *a)/kL*kL*1 *1*1* vl* kJ kJ* kI* kL*/不不不不不不不不不不不不不Tciind不不不下不不不不不不不不不/ int i, j, k, sum;s
28、um=0;for(k=3, i=0;i n; i+, k+=5) sum=sum+ k;/。1/不不不不不不不不不不不不jrAi 不不不不不不不不不不不不不不下/if (sum%4=2)a j+ =sum;)/kL*1vt*1* vl* /不不不不不不不不不不不不不Tciind不不不下不不不不不不不不不不/ return j;main () int aN,d, n, i;printf(unEnter n(4 =n =50):);scanf(H%du, &n);d=fun(n, a);printf(unn The result :n );for(i=0;i d; i+) printf(u%6d
29、n,ai);printf(Hnn ); )39.已知一个数列从。项开始的前3项:0, 0, 1,以后的各项都是其相 邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出 该数列前。项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为23.197745。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include#include#include/kJ1 kL*kJ sl kL*/个个个个个个个个个个小个个个个门个个个个个个个个个个个个个个个个个小个/fun (int n)doub
30、le sum, sO, si, s2, s; int k;sum=1.0;if (n =2) sum=0.0;s0=0.0; sl=0.0; s2=1.0;for (k=4; k =n; k+) s=s0+sl+s2; sum+=sqrt (s); sO=sl; sl=s2; s2=s;/vL*1 *1*/不不不不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不不不不/return sum)main ()int n;clrscr ();printf(nInput N=);scanf(n%d&n);print f (fn”, fun (n);40.给定程序MOD11 . C中函数
31、fun的功能是:求出以下分数序列的前 n项之和。和值通过函数值返回到main函数。23581321W 1235813例如,若n = 5,则应输出:8 . 391667。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!2345678910111213141516include / found/void fun (int n) int a, b, c9 k; double s;s = 0.0; a 2; b w 1;for (k - 1; k $ mc!udr Vidbo. h /, found fun (mt a)Int =2. h=
32、l. c ki double (. Os (ortk I tk nik, )/ l/bi bib*ctmurn(t) mid nruiti ()int n*Si 9yMem ( eCLS ) $print! ( e oThe slue of function 由% fZ. hin (n)42.下列给定程序中,函数proc()的功能是:在字符串str中找出ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向 后顺序移动。例如,调用proc。函数之前给字符串输入DcybkdGT,调 用后字符串中的内容为yDcbkdOT。请修改程序中的错误,使它能得到正确结果。注意:不要改动ma
33、in。函数,不得增行或删行,也不得更改程序的结 构。试题程序:” include / found void proc(char t ( chr max, qiin! i = 01 max=t_iji while =0) ( if4 /* found t = q+i1max= tij s)i+ + ;) while(q3t)* q - (q- 1 ) i qI) l0: = maxi void main() ( char str80j printf( Enter a stringt H ) i gets(5(r) ; printf( nThe original string: *); puts(
34、str)i proc(sir)i printf( Mn Phe siring after moving ;M) j puts(Mr); primf*nn*)j J六、操作题(2题)43.请编一个函数 void proc(int ttEMN, int ppN), tt 指向一个 M 行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括6.以下涵数rotate的功能是:将a所指N行N列的二维数组中的最后 一行放到b所指二维数组的第。列中,把a所指二维
35、数组中的第0行放 到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。#define N 4void rotade(int aN, int bN) inti, j ;for(i=0 ; iN ; i+) biN-l= ; =aN-li ; 7 .以下程序的输出结果是【】。#include main() int i ;for(i=a ; if ; i+, i+)printf(%c, i-a+A);printf(HnH); )8 .按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于 O9 .表达式 l/2*(int)3.7/(int)(2.4*(1.5+2.5)值的数据类型为 。1
36、0 .以下程序是从终端读入数据到数组中,统计其中正数的个数,并计 算它们的和。请填号中填入所编写的若干语句。试题程序:#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);printf(uThe riginal data is: nu);for(i=0; iM; i+)(for(j=0; jN; j+)pr
37、intf(%6d, strij);printf(n);)proc(str, p);printf(n nThe result is: nn); for(k=0: kM; k+)printf(n%4d pk);printf(un!); 44.以下程序的运行结果是【】。#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=Hb ;printf(nk=%51dnk);参考答案1 ,n 1=%dnn2=%dn 1 =%dnn2
38、=%d解析:根据输出结果,可以确定“格式 控制”为nl=%dnn2=%d,其中,“nl= ”和“n2 = ”是按原样输出的字符, “d”是按十进制整数输出,“n是转义字符,用于输出回车换行。2 .(struct list *) (struct list *) return(h)3 .栈栈解析:栈和队列都是一种特殊的操作受限的线性表,只允许在端 点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或 删除操作,是一种“先进后出”的线性表;而队列只允许在表的一端进行 插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。4 .2525解析:本题考查带参数的宏的定义及相关运算。运算过程
39、为:匚 POW(x+y)=(2+3)*(2+3)=25。5 .fopenfopen解析:C语言中的文件分为:ASCII文件与二进制文件。 文件在使用前打开,使用后要关闭。打开文件的函数为:fopen(),调用形式为:fP=fopen(文件名,”使用文 件方式)关闭文件的函数为:folose(),调用形式为:foclose(fp);其中fp为文件 指针。6 .a0ibioa0irnbio解析:biN-l=a0i实现把 a 所指二维 数组中的第0行放至【J b所指二维数组的最后一列中,bi0=aN-li 实现将a所指N行N列的二维数组中的最后一行放到b所指二维数组 的第0列中。7 .ACEACE解析:在本题中,for循环体每执行完一次,变量i的值自 加两次。i的初值为“a”,执行一次循环后变为“c,