《2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案).docx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年甘肃省金昌市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .自动批处理文件名必须是【】。2 .设有下列程序:#include #include main() int i ;chars10, t10;gets(t);for(i=0 ; i2 ; i+) gets(s);if(strcmp(t, s) 0)strcpy(t, s);)printf(%sn, t);)程序运行后,从键盘上输入(代表回车符):CDEF BADEF QTHRG ,贝IJ程序的输出结果是 。3 .若有如下程序: double fun (STREC * a,
2、STREC * b, int *n) ()void main ()(STREC sN= GA05”,85,“GA03”,76,“GA02”,69, “GA04:85, GAO r91, “G A07172GA08”,64, “GA06:87;STREC hN;int i, n;double ave;ave=fun(s,h,&n);printfThe %d student data which is lower than %7.3f:n”, n9ave);for (i=0;in;i+) p=nnx/n;i+)/*输出成绩低于平均分的学生记录*/printf(s %4.1fn hi.num9hi.
3、s);printf (rT);26 .请编写一个函数proc (),它的功能是:求出一个4xN整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc的花 括号中填入所编写的若干语句。试题程序:0 derine N 4 s mcludr V,tdiou h Ull pfOC( LDI _ Nj ) raid mam( int,553.2.42.-32.9.phntf( %dn*proHrT)s27 .使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.
4、c。在此程序中,规定输入的字符 串中只包含字母和*号。编写函数fun(),其功能是除了字符串前导和尾 部的*号外,将字符串中其他的*号全部删除。形参h指向字符串中第一 个字母,形参p指向字符串中最后一个字母。在编写函数时,不得使用 C语言提供的字符串函数。例如,若字符串中的内容为“*A*BC*DEF*G *”,删除 后,字符串中的内容应当是“*ABCDEFG *, 注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include #include #include void fun (char * a,c
5、har *h,char *p) ()main ()(char s81, * t, *f;printf (Enter a string:n);gets (s);t=f=s;while ( * t)t+;t-;while ( * t=*)t-;while ( * f=,*,) f+;fun(s,f,t);printf (The string after deleted:rT);puts (s); )28 .使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数其功 能是移动一维数组中的内容,若数组中有n个整数,要求把
6、下标为0P(含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);int i,p, n=1
7、5;printf (The original datafor(i=0; iprintf (3d”,ai);printf (nnEnter p :);scanf(d”,&p);fun(a,p,n);printf (nThe data after moving:n);for(i=0; i=nn p=printf C%3d9ai);printf (nn); )29 .请编写fun函数,其功能是:计算并输出3m所有素数的平方根 之和。例如,若主函数从键盘给m输入50后,则输出为s= 68. 665791c请勿改动main函数与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:m
8、的值要大于2但不大于100o部分源程序给出如下。试题程序:#include#includedouble fun(int m) ()void main(int m;double s ;FILE*out:printf(n n nlnput m:);scanf(%d, &m);s=fun(m);printf( n ns= % f n n, s);ut=fopen(noutfile. datn, w);for(m=0; m =include Cromer h * mdudc 9 define M Sdouble proH mt :匚 M void mmf()iaiJJL0.9U|dcMible iyt
9、efn *CLS*) i1mM The amy n * Hfor (i*Oi iprmtf( * Kid pnnt(wn e)i- proc( a) tpnme W pruitfCThe um it %lfn ,号.四、2.程序修改题(10题)31 .下列给定程序中,函数fun()的功能是计算并输出high以内的素数 之和。high由主函数传给fun()函数。若high的值为100,则函数的值 为 1060。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include int fun(i
10、nt high) int sum=O, n=0, j, yes ;while(high =2) yes=l ;for(j=2 ; j 1/不不不不不不不不不不不不不Tei ind不不不不不不不不不不不不不不/ ifhigh%j=O yes=O ;break ;/ /不不不不,、不不不不小不不不tci inri不不不下不不不不不不不、/ if(yes=O) sum+=high ;n+ ;)high-;)return sum ;) main()(clrscr();printf(%dn, fun(lOO);32 .下列给定程序中,函数fun()的功能是;计算函数F(x, y ,z)=(x+y)/(x
11、- y)+(z+ y)/(z-y)的值。其中x和y不相等,z和y不等。例如,当x的值 为9, y的值为11, 2的值为15时,函数值为-3.50。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include /vt*1Kt* vt*kT* /不不不不、不不不不不不不不不tcunc不不不可不不不不不不不不不不不不不不/#define FU(m, n) (m/n)float fun(float a, float b, float c) float value;value=FU(a+ b, a-b)+FU(c
12、+ b, c-b);/ 1* vl*vt* vt*1 vl*vL*/不不不不,、不不不不小不不不tci inri不不不下不不不不不不不、不不不/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 );exit (0); )sum=fun (x, y, z);printf(nThe result is:%5. 2fn n
13、,sum);33 .给定程序M0D11 . C中函数fun的功能是:根据整型形参m,计算如下公式的值。,1 1 1 1y = 1 + +2,2 3*3 44例如,若m中的值为:5,则应输出:1 . 4636110请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!234567891011121314tinclude double fun (int m) double y - 1.0 ;int 1; . /found*/for(i - 2 ; i =0;-i)/kJkL* 17,7,7,7,7,7,7,/个个个个个个不不不不不不不不不Tei
14、 in。不不不小个个个不不不小不不小不小小小不/ 35.下列给定程序中,函数fun()的功能是:输出M行N列整数方阵, 然后求两条对角线上的各元素之和,返回此和数。 d=ci;printf(cb);)请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构. 试题程序:#include #include #define M 5/vf*/ 、-、一、l卜-j、卜、,、-、/iht fun(int n, int xx) int ij, sum=0;printf(nnThe %d x %d matrix:nn,M,M);for(i=0;i M;i+)
15、 for (j=0; j *1*i* *1* *X* *J kI* *1* *1 kL* *1 kL* *1*/rj* rj*printf(n%4fxxij);printf(Hnn);)for(i=0;i n;i+) sum+=xxi i+xxin-i-l; return(sum);)main () int aaMM=l,2,3,4,5,4,3,2,1,0, 6,7,8,9,0,9,8,7,6,5,3,4,5,6,7;clrscr();printf(HnThe sum of all elements on 2 diagnals is %d”,fun(M, aa);void sub()stati
16、c int x = 6 ;x/ =2 ; printf(M%dH, x) ; main()int m ;for(m=0 ; m =2 ; m+) sub() ; 则程序运行后的输出结果是【】。4 .若有以下定义,则不移动指针P,且通过指针P引用值为98的数组元素的表达式是 Oint w10=23,54,10,33,47,98,72,80,61), *p=w ;5 .以下程序通过函数指针p调用函数fun,请在填空栏内写出定义变量P的语句。void fun(int*x,int*y)main() int a=10,b=20 ;:p=fun ; p(&a, &b);6 .关系操作的特点是操作。7 .以
17、下程序运行后的输出结果是【】。36.给定程序MODH . C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!23456789101112131415linclude #define M 5/*w*found*w*/int fun (int n, int xx) int i, j 9 sumO; printf (MnThe %d x %d matrix:nwrM, M); for(i - 0; i M; i+) for(j - 0; j M; j+)pr
18、intf(n%f -, xxi(j); printf(wnR);)for(i - 0 ; i n ; i+) sum + xxii*xxi(n-i-1;return(sum);17main ()16 181920 int aaMM1,2,3,4,5), (4,3,2,1,0,6,7,8,9,0,(9,8,7,6,5, 3,4,5,6,7”printf (RnThe sum of all elements on 2 diagnals is %d.r fun(Mr aa);37.下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对
19、字符串 中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插 入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include #define N 80void insert(char *aa) iht i, j, n; char ch;n=strlen (aa);for (i=l; i 一.卜 / c=aai;while (j =0) & & (ch aa j) aa j+l=aaj;j-;)aa j+l=
20、ch;)main () char a N = nQWERTYUIOPASDFGHJKIMNBVCXZn;int i;printf(nThe original string: %sn”,a);insert (a);printf(nThe string after sorting:%snnn9 a);)38.下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=-l+l/2+l/3+l/4+.+l/m例如,若输入5,则应输出2.283333。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include
21、#include double fun(int m)(double t=1.0;int i;for(i=2;i =m;i+)/1/不不不个个不不不不个不个不rm inc不不不个不不不不不个不干不不/ t+=l.O/k;/ kA*11*1/不不不不不不不不不不不不不Toi in(i不不不不不不不不不不不不不不/ return i;)main()int m;clrscr();printf(nnPlease enter linteger number:n); scanf(n%d,&m);printf(nnThe result is%lfn fun(m);39.给定程序中,函数fun()的功能是:使数
22、组中的元素的值增加10倍。改正其中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include iht m10;void fun(void)(intj;printf(nIn subfunc after callingnn);for(j=0;j /不不不不不不不不不不不不ci ni不不不不不不不不不不不printf(3dmj*K);) main() int i;printf(nIn main before callingnn);for (i=0; i 10; i+)(mi=i;printf(”3d,mi);)fun
23、();printf(nnln main after calling/);for (i=0; i 10; i+) printf(n%3dmi);getch ();40.假如整数数列中的数不重复,并存放在数组中。下列给定的程序中, 函数fun()的功能是:删除数列中值为X的元素。N中存放的是数列中 元素的个数。请改正程序中的错误,使它能够得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #define N 20 fun (int *a,int n,int x) int p=0,i;an=x;while (x!=ap)p二p+1;if(p
24、=n) return -1;elsefor (i=p;i n;i+)/*砧und*/ ai+l=ai;return n-1;) main()int wN=-3,0,5,7,99,10,15,30,90, x,n,i;n=10;printf(HThe original data :nn);for (i=0;i n;i+) printf(%5d,wi);printf(unlnput x (to delete ): ); scanf(n%d&x);printf(nDelete : %drT,x);n=fun(w,n,x);if (n=-l) printf(n*No be found!*nn);els
25、eprintf(nThe data after deleted:nM);for (i=0;i n;i+) printf(%5d,wi);printf(nnnn);)五、程序改错题(2题)41.下列给定程序中,proc ()函数的功能是:根据形参m,计算下列公式 的值。t=l+l / 2+1 / 3+1 / 4+.+1 / m例如,若输入10,则应输出2 . 928968。请修改程序中的错误,使它能计算出正确的结果。注意:不要改动main ()函数,不得增行或删行,也不得更改程序的结构。试 题程序:5 include 二 include Vconio. h include Vxtdio. h d
26、ouble proc( mt m)double1=1.0, int ii for(i=2n int misy5temC *CLSH)(pnnlfCnPlcaM* enter inieger number:M %dM *&m) iprintf( nThe result is % lfnM proc(m) ?42.下列给定程序中,函数fun的功能是:从低位开始依次取出长整型变 量s中奇数位上的数,构成一个新数存放在t中。高位仍在高位,低位 仍在低位。例如,当s中的数为7654321时,t中的数为753lo请改正程序中的错 误,使它能得出正确的结果。注意:部分源程序在文件MODU.C中,不得增行或删
27、行,也不得更改 程序的结构!#include ;/ found / void fun(lonK lon t)I long al s 10; t = / 10;while( 0)I s “1005 t = 6% 10 2 t;/ found 今/b) = 1 100;main()I . hprintf( * nPleaM? enter ; ) ; scanf( % ldw , &s) &t);printf( wThe result is: %ldnw t);六、操作题(2题)43 .设有下列程序:#include #include main() int i ;chars10410;gets(t)
28、;for(i=0;i 2;i+) gets(s);if(strcmp(t,s) O)strcpy(t,s);printf(n%snt);程序运行后,从键盘上输入(代表回车符):DEF BADEPQTHRG,贝IJ程序的输出结果是。44 .下列给定程序的功能是:读入一个整数n(2<=n<=5000),打印它的所有为素数的因子。例如,若输入整数1234,则应输出:2, 617o请修改程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不能增选或删行,也不能匿改程序的结构。试题程序:#include<conio. h>#include<stdio . h&
29、gt;* * * * * * *Prime(int m); ( intj, P;p=l;* * * * *for(j=2;j+)if!(m%j) (p=0;break; )return(p);inti, n;printf(n nplease enter an integer number between2and 5000:);scanf(%d, &n);printf( n nThe prime factor(s)of%d is(are): , n):for(i=2 ; i<n; i4+)if(! (n % i) & & (Prime(i)printf(%4d, , i);printf(
30、n);参考答案1 .AUTOEXEC.BAT2 .QTHRGQTHRG解析:strcmp(t,s)函数用来比较t和s所指字符串的大 小,若ts,则函数值大于0;若t=s,则函数值等于0 :若ts,则函 数值小于0。strcpy(t,s)函数的功能是把字符数组s所指字符串的内容复 制到字符数组t所指的存储空间中。本题中,t10=CDEF。第一次循环, s10=,BADEF, if语句的控制条件strcmp(t,s)0不成立,接着执行第 二次循环. s=1QTHRG if语句的控制条件strcmp(t,s) 0成立,执行 下列的语句,将字符数组s所指字符串的内容复制到字符数组t所指的 存储空间中,
31、然后输出字符数组t。3.3104 .*(p+5)或 p5*(p+5)或 p55 .void(*p)() ; void(*p)();解析:要定义p为指向函数的指针变量,需写 成void(*p)();,注意*P两侧的括弧不可以省略,表示P先与*结合,是 指针变量,再与后面的()结合,表示此指针变量指向函数,这个函数无 返回值(同fun()函数)。6 .集合集合7.1343113431解析:初始化时,指针p指向m0的地址,指针q指向 m4的地址,p!=q满足循环条件,执行循环语句,得到m0 . k=l, m4 . k=l,此时i=2,指针p指向ml的地址,指针q指向m3的地 址,p!二q满足循环条件
32、,执行循环语句,得到ml , k=3, k=3,此时 i=4,指针q指向m的地址,p二二q不满足循环条件,则退出循环, m2 . k=4o所以最后输出为13431。8 .输出结果输出结果解析:注意:测试的基本方法和步骤。9 .cdeabcdeab解析:本题move。函数的作用,是将形参s仕所指地址的 连续 n 位循环右移 1 位,即让 strn-l=strn-2, strn-2=strn-3L , strl=strO, strO=strn-l(原)。主函数中用了一for 循环调用 move。 函数,共循环3次,所以数组s被循环右移了 3位,故最后输出的值为 cdeab。10上二i+lb=i+l
33、解析:分析for循环条件,i=0说明循环从0开始判断, i+=2是间隔为2的数,i=20就是控制数是20之内的a+二i,就是所有 偶数的和,如果从1开始(b=i+1)间隔为2的数(1,3,5,7,9,果13,15,17,19) 相加就是所有奇数的和。11 .D12 .D解析:选项A)在C语言中是一个合法的关系表达式,但它并不代 表数学式。=x 100。计算0=x k=+i;p+;q- k=i+;q;)q- k=i;for(i=0;i 5;i+)printf(%d,mi.k);printf(n); )8 .为了便于对照检查,测试用例应由输入数据和预期的【】两部分组 成。9 .以下程序运行后输入3
34、, abcde回车,则输出结果是【】。#include move (char *str,int n) char temp;int i;tcmp=strn-l;for(i=n-l;i 0;i) stri=stri-l;str0=temp;main()=X,其结果只能是。或1,然后再比较0 100或1=2时,递归调用自身,返回值为x*f(x- l)+(x-l)*f(x-2);3x2时,返回值为1。main函数中,调用函数f传入 4,所以y的值是f(4)。f(4)等价于4*f(3)+3*f(2);f(3)等价于 3*f(2)+2*f(l);f(2)等价于 2*f(l)+l*f(0);f(0)、f(l
35、)等价于 1。综上:f(2)等 于3, f(3)等于11, f(4)等于53。本题答案为D选项。14 .Cmain函数定义一个二维字符数组str,它包含3个字符串,每个字 符串存放在一个长度为10的一维数组中。指针变量P指向str0,即第 1个字符串“One”。由于“One”存放在长度为10的一维数组中,因此P+10 指向下一个字符串“Three”,长度为5。故本题答案为C选项。15 .C解析:在本题运行时主要注意的是当i=9时,ai=10-9=l :i=8时, ai=10-8=2 ;仁7 时,ai=10-7=3 ;依此类推,直到 i=0 时,ai=10- 0=10 :此时,i的值已变为-1,
36、判断for的循环条件,不成立,然后输出 a,a5, a8分别为 8, 5, 2O16.B解析:70,作为标志占用存储空间,但是不计入串的实际长度。当给一个字符型指针赋值时,赋给这个指针的是这个字符串的地址。17.A18 .AnA。【解析】头结点不仅标识了表中首结点的位置,而且根据单链 表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此 增加头结点的目的是为了便于运算的实现。n19 .A20 .A数据结构在计算机内存中的表示指的是数据的存储结构。数据的存 储结构是指数据的逻辑结构在计算机中的表示。数据元素之间的关系有 两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的
37、存储结构:顺序存储结构和链式存储结构。21 .n#includefstdio . hn#define N 3nstruct studentnlong stu_num; char sex;nchar name15; int score4;nfloataverage; ;nmainnintLj,index; float sum,max;nstruct student stuarrN;nfor(I=0;IprintfClease input %d student information:nI+l);nscanf(f%ld,%c,%s&stuarrI . stu_num,&stuarrI . sex,stuarrI . name); nfor(j=0 ;j4 ;j+)nscanf(%d,&stuarrr| . scorej); nfor(I=0;Isum=0 . 0;nfor(j=0 ;j4;j+)nsum+=stuarrI . scorej;nstuarrI . average=sum/4 . 0; nmax=stuarr0 . average;nindex=0;nfor(I=l ;Iif(stuarrI