《2021年山西省阳泉市全国计算机等级考试C语言程序设计预测试题(含答案).docx》由会员分享,可在线阅读,更多相关《2021年山西省阳泉市全国计算机等级考试C语言程序设计预测试题(含答案).docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2021年山西省阳泉市全国计算机等级考试C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .以下函数sstrcat的功能是实现字符串的连接,即将t所指字符串复制 到s所指字符串的尾部。例如:,所指字符串为abed, t所指字符串为 efgh,调用函数sstrcat后s所指字符串为abcdefgho请填空。#inehde #include void sstuat(char * 9, char *t) int n;n = strlen (s);while(*(s+n) = )s+;t+;2 .语句:x+;、+x ;、x = x+l;、x=l+x ;,执行后都使变量
2、x中的值增 1,请写出一条同一功能的赋值语句(不得与列举的相同)【】。3 .若有说明 char sl=That girl,s2=is beautiful;则使用函数 strcmp(sl ,s2)g,结果是。4 .下面程序的运行结果是:【】。 typedef union student char name10;案的项目中包含一个源程序文件progl.c。在此程序中,规定输入的字符 串中只包含字母和*号。编写函数fun(),其功能是删除字符串中所有的 *号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“*A*BC*DEF*G*”,删除后,字符 串中的内容应当是“ABCDEFG
3、” o注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include #include void fun(char *a)()void main ()(char s81;printfEnter a string An);gets(s);fun(s);printf (The string after deleted:n);puts (s);)26 .有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成 绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信 息,包括学号、性别、姓名和平均成绩
4、。27 .请编写一个函数void proc (intm, intk, intxx),该函数的功能是将大 于整数m且紧靠m的k个非素数存人所指的数组中。例如,若输入: 105 (即M=10, k=5),则应输出:12 1415 16 18。注意:部分源程序 给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函 数proc ()的花括号中填入所编写的若干语句。试题程序:M tnciode M inciudc include woid proci mt n mt ifttvoed vnaiM )mt m.hca1000ipnitlKnPleeRe enter two mivgrrni
5、*i procm n ti)ifor( E-0intmi+ ) priatf(e%d print(e *)i28 .N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指 向链表的头节点。请编写函数fun,其功能是:求出平均分,并由函数 值返回。例如,若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是:78 . 625。注意:部分源程序在文件PROG1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入你编写的若干语句。#includc *include # =0;wiule(ib =sf i ; i. .; p - nex
6、t = q; p = q;Ip - next =0;return h;Ioutlist( STREC h)| STREC p;p = h -next; printf(head* );do| printf(w -%4. IP fp-);p = p-next;|while(p! 0);printf( M nnw );Imain()| double sN . |85,76,69,85,91,72,64,87| rc;void NONO():STREC h(h = creai( s ) outlist( h);ave = fun( h );printf( w ave = %6. 3fn ,*ve);N
7、ONO();I.void NONO()1/本由数用于打开文件,输入数据,调用函数,输出数据,关闭文件。7FILE in. out ;int ij x double N #ave;STREC -h in = fopen(Bin.lain/r);out = fopen(out, datRfor(i = 0 ; i 10 ; i )Ifor(jx0 ; j N; j+ +)f8canf(in%lfj.h = crcal( s );ave = fun( h );fprintf(outv *%6.31fn*t ave);fcloee( in);fcle( out);29.使用VC+2010打开考生文件夹
8、下progl中的解决方案。此解决方案 的项目中包含一个源程序文件progl.co在此程序中,请编写函数fun(), 其功能是将M行N列的二维数组中的数据,按列的顺序依次存放到一 维数组中,将一维数组中数据的个数存放在形参n所指的存储单元中。例如,若二维数组中的数据为33 33 33 3344 44 44 4455 55 55 55则一维数组中的内容应是33 44 55 33 44 55 33 44 55 3344 55注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include void fun (i
9、nt (*s) 10 , int 他 int *n, int mm, int nn)()main ()(int w1010= 333333,33,44,44,44,44 , 55,55,55,55 ,i,j;int a100=09n=0;printfThe matrix:n);for (i=0;i3;i+) (for(j=0;j 4;j +)printf(3d”,wijD;printf(iT);)fun(w,a, &n,3,4);printffThe A array:n);for(i=0;in;i+) p=nnx/n;i+)printf,3dai);30.下列程序定义了 MxM的二维数组,并在
10、主函数中赋值。请编写函数proc0,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如,若a数组中的值为: -012345074$438343S6S721 098则返回主程序后,s的值为3 . 750000o注意:部分源程序给出 如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:S mcltMiebinclude W mcludc ,define M 5double proH mt 二 M二 raid mill水)mm t jl doubleCLS* 11pnnift* Thr array n *)sl
11、orKMi f + )for “OijVM,j*pcintfC * K4d 3) pnntf(n - proc) ipnntf(e THE RESULT pnntfCThr num ii Klfn *si四、2.程序修改题(10题)31 .下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=l-l/2+l/3-l/4+.+(-l)(m+l)/m例如,若输入5,则应输出0.783333。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include /11# /不不不不不不不不不不不不不
12、Toi in(i不不不不不不不不不不不不不/ int fun(int m) double t=1.0, j=1.0 ;int i ;/ Kt*01 kI*vl* *1*kJ* kL* /不不不不不不不不不不不不不tc ma不不不不不不不不不不不不不/for(i=l ;i m ;i+) j=-l*j;t+=j/i ; return t ;) main()(int m ;clrscr();printf(nnPlease enter 1 integer number :);scanf(n%dn, &m);printf(n/nThe result is%IAnn, fun(m);32 .下列给定程序中
13、,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:%=K+2)/2 %例如,2的平方根为1.414214。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include / 7,7,7,017,7,7,/小小不不不不不不不不不不小tciind小不不不不不不不不不不不小不/fun(double a,double xO) double xl,y;xl= (x0+a/x0)/2.0;/ /不不不不、不不不不不不不不tci me不不、不不不不不、不不不不】、/if (fabs (xl
14、-xO) 0.00001)y=fun (a, xl);else y=xl;return y;)main () double x;printf(nEntcr x: ); scanf(H%lf&x);printf (nThe square root of %lf is %lfn x, fun(xJ.O);33 .下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #define MAXLINE 20 void fu
15、n(char *pstr6) (inti, j ;char *p ;for(i=0 ; i5 ; i+) for(j=i+l ;j 6 ;j+)/ 7,7,7,7,017,7,7,/小小不不不不不不不不不不小tciind小不不不不不不不不不小小小/if(strcmp(pstr+i), (pstr+j) 0) p=*(pstr+i);* (pstr+i)=* (pstr+j);/I/不不不不不不不不不不不不不Tei 不不不不不不不不不不可不不/*(pstr+j)=*p ;main() int i ;char*pstr6, str6 MAXLINE;clrscr();for(i=0 ; i 6 ;
16、 i+)pstri=stri;printf(n/nEnter 6 string(l string at each line) : n);for(i=0 ; i 6 ; i+)scanf(n%sn, pstri);fun(pstr);printf(nThe strings after sorting : nn);for(i=0 ; i 6 ; i+)printf(n%snn, pstri);34 .下列给定程序中函数fun()的功能是计算1/n!的值。例如:给n输入5则输出0.0083330请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
17、试题程序:#include #include / 7,7,7,7,7, 7,7,7,。1 7,7,7,7” 7,7,7,7,7,7,7,/小小小不不不+小不不不tcind不不不不小不下不不小小不不/int fun(int n)double result=1.0 ;if(n=0)return 1.0 ;while(n 1 & n 170)/不不不不不不不不不不tci n8小不不小不result *=n+ ;result=l/result ;return result ;) main()(int n ;printf(Input N :);scanf(%d, &n);printf(nnl/%d!=%
18、Ifnn, n, fun(n);35 .给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include float m10;/kL* kJ*1kJ*/不不不不不不不不不不不不不tc mri不不不不不不不不不不不不不不/int fun (void) intj;printf(nIn subfunc after callingnn);for(j=O;j 10;j+)long sno ;char sex ;float score4;STU ; mai
19、n() STU a5;Printf(%dn, sizeof(a); )5 .下面程序 main() int i,j,m,n ;i=5 ;j=10 ;m=+i ;n=j+ ;printf(%d,%d,%d,%d,i,j,m,n); )运行后,i, j, m, n的值分别是。6 .以下函数用来求出2个整数之和,并通过形参将结果传回。void func(int x, int y, z) *z=x+y;7 .数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性 print (n%f n,mj%5);)main()(int i;printf (In main before callingnH);
20、for (i=0;i 10;i+) mi=i+20;printf(n%f n,mi);)fun();printf(nnln main after callingnn);for(i=O; i 10;i+)printf(n%f n,mi/5);36 .给定程序MODH . C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:deba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1234567891011121314include /found/ fun (char a) i
21、f (*a)(fun(a*l);/found/ printf(M%cn *a);)main ()(char s(10nabcdw;printf (处理前字符串Tsn处理后字 符串,s);fun(s); printf(=n);37 .给定程序中,函数fun()的功能是:使数组中的元素的值增加10倍。改正其中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include iht m10;void fun(void)(intj;printf(nIn subfunc after calling);for(j=0;j 10;j
22、+)/ kI*/个个不个个个个个个个个个tzxi1 n / |个个个个个个个不个个个个个个个个个个个个个个/ printfC%3cT,mj*10);main() int i;printf(nIn main before callingnn); for (i=0; i 10; i+) mi=i;printf(n%3dn,mi);)fun ();printf(nnln main after callingnn);for (i=0; i 10; i+)printf(%3dn,mi);getch ();38 .下列给定程序中,函数fun()的功能是;求S的值。设S=(22/l*30)*(42/(3*5
23、)*(62/(5*7)* *(2k)2/(2k-l)*(2k+l)例如,当k为10时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注童;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include /不不不不不不不不不不不不不 不 tCl 1 tnfun (int k) iht n; float s, w, p, q; n=l;s=1.0;while (n 71kI kI kI kJ kI/不干不个个不不干不个不不不个个Tei】nc不不不不不不个个不不不不小不/return s main() clrscr
24、 ();printf(H%An fun (10);39 .下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下 公式的值。Al = l, A2=1/(1+A1), A3=l/(1+A2) An=(l/(1+A(n-1)例如,若P=10,则应输出0.617977。请改正程序中的错误,使它能得出正确的结果。注意:不要改动mah函数,不得增行或删行,也不得更改程序的蛀构. 试题程序:#include #include /71 7 7 7*7 .1*/不不不不、不不不不不不不不不tCl ITlfl不、不不不不不、不不不不1、不不不不不不不/iht fun(iht n) float A=l;
25、inti;/ kI k! sl *.1 !kI7,,1 k! kI kJ k! kJ7 kI k kI k1 k| 7,k! kJ kL /个个不个个个个不不不个不不不Tei Cn不个不个个个不不不不不不不不不不不不不个/for(i=2;i n;i+)A=1.0/(i+A);return A;)main () int n;clrscr ();printf(nnPlease enter n:);$canf(H%d&n);printf (nA%d=%lfnn9 n, fun (n);40 .下列给定程序中函数fun()的功能是计算正整数num的各位上的数 字之平方和。例如:输入352,则输出应该是
26、38 ;若输入328,则输出应该是77。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include long fun(long num) /*+* *+*+*+* und */ long k=l ;do k+=(num% 10)*(num% 10);num/=10 ;/* * *+found*+* *+*+* */ while(num)return(k);main() long n ;clrscr();printf(nPlease enter a number :);scanf(n%ldH, &n);p
27、rintf(nn%ldnH, fun(n); )五、程序改错题(2题)41 .下列给定程序中,函数fun的功能是:计算整数n的阶乘。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构。试题程序:#iriclude #inc 加de double funfint n)( double result=LO;while(nl&nl 70)/ 泰* 余* 申 *亭口口口4*季 */result*-n;Return;voiraid pcortaillor/ / f ifvoed puwH tai . t,li|ir.ntf( *M . f i r
28、f (? (iXlO) ) |natfitM9 3i 4 1 2巾 I。 7),. 111CLS- print f( *nnHr4ore 110mz Kd ftutnbrmt puurr(Barripfoc(ntarriprint 1( *aAfter norting 11 d numbers t n* alipuiarH farr)i六、操作题(2题) 43.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a 结构体数组中。请编写函数fun(),该函数的功能是;找出成绩最高的 学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的 首部,请完成该函数。注意:部分源程序给出如
29、下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入所编写的若干语句。试题程序:#include#include #include #define N 10typedef struct ss /*定义结构体*/ char num10;int s; STU;fun(STU a, STU *s)()main ()(STU aN= nA0181, nA0289, “A03”,66, “A04”,87, “A05”,77, “A06”,90, “A0779, “A08”,61, “A09”,80, ”AlO,71,m;inti;clrscr ();printf(*The o
30、riginal data*);for (i=0; iN; i+)printf(nNo=%s Mark=%dn, ai.hum, ai.s);fun (a, &m);printf (*THE RESULT*/); printf(nThe top :%s, %dnH,m.num, m.s); )44.以下程序的输出结果为【】。main() intk=l;white(k =15)if(+k%3 !=2)continue;else printf(n%d k);printf(nnM);参考答案L*t*t解析:程序中,(a+n)代表字符串s最后一个字符后的,NO1根据 题意,0所在位置应该赋值为字符串t的
31、第一个字符,字符中t的其他 字符根据循环,依次赋值到,所指字符串的尾部,所以口4应填:*t。2 .x+ = 1 ;3 .-1-1解析:strcmp(sl,s2)函数的作用是:对字符数组s2和字符数组si 进行比较。如果sls2,则返回正数。4 .8080解析:数组a是共用体变量,共用体类型变量所占的内存长度为 最大成员的长度,即单精度数组的长度,为4x4=16,因此,数组a所占 的内存长度为5x16=80,所以最后输出的s的值为80o5.611610。6,11,6,10。解析:本题考查自加的前置和后置的区别。6.int*7.逻辑独立性逻辑独立性解析数据独立性是数据与程序间的互不依赖性,即数据库
32、中数据独立于应用程序而不依赖于应用程序。数据独立性 一般分为物理独立性与逻辑独立性两个含义。注意:在人工管理阶段, 文件系统阶段和数据库管理阶段中数据独立性的特点。8.1616解析:函数运算不改变数据类型,所以结果也是double型,fabs(x) 是对x取绝对值,pow(y, fabs(x)是y的labs(x)次骞,即2.04o 0=16.000000(注意;结果为 double 型)。9.1010解析:整型指针最初被赋的值是数组arr的头指针,即指向数组 的第一个元素30, p+后 指针指向数组的下一个元素,即*p=arrl=25, 在执行*(p+3)时,则相当于al+3,即10。因此,输
33、出应为100。10.17 2111 .A12 .D解析:本题考查数据结构中队列的基本知识。队列是一种限定性的线 性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队 列具有先进先出的特性。在队列中,允许插入元素的一端叫做队尾, 允许删除的一端则称为队头。这与日常生活中的排队是一致的,最早 进入队列的人最早离开,新来的人总是加入到队尾。因此,本题中只 有选项D的说法是正确的。13.Badd_more函数接收两个参数a、b,返回“a+b-2。main函数中,for 循环调用add_more函数。当i=2时,传入实参i和2,所以每次调用函 数add_more时,b的值都是20函数add_mo
34、re返回值等价于实参i0所 以每次for循环输出的值就是i的值。故本题答案为B选项。和【】两个含义8 . x和y都是double型变量,x的初值为4.0, y的初值为2.0,则表达式 pow(y, fabs(x)的值为。9 .以下程序的输出结果是【】。main() (int arr=30,25,20,15,10,5 ,*p=arr ;P+ ;printf(%dn, *(p+3);10 .请读程序片段:int a = 17 ;printf(%d, %on, a, a);以上程序片段的输出结果是【】。二、单选题(10题)11 .设有以下语句:intx=10;x+=3+x%(3),则x的值是()。A
35、.14B.15C.11 D.1215 .C解析:本题的选项A)和B)犯了同样的错误,即指针变量在定义后 并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它 的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操 作。另外,在选项D)中,s是int型指针变量,p是char型指针变量, 所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量 P的值赋给整型指针变量so16 .A解析在C语言中所谓函数的递归是指在调用一个函数的过程中, 又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数 递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函 数f(a,
36、i,j)为一递归函数,其功能是当i示力,也下钵为务R的数故用t ft fll中 心,、哈 ,因为t工字料率,因Rg须用V,作【解析】题目要求将下标为偶数的字符删除,其余字符放在新的字符 数组t中。首先取出字符串str中下标为奇数的字符,将其赋值给新的 字符串t,最后用0 作为字符串结束的标志。23 .【解析】首先定义两个变量分别用来存储级数的和与每一项的分母。观 察级数的特点,其每一项的正负号是交替变化的。根据这些特点,每增 加一项都需要变换符号。最后求出级数的和。24 .【解析】首先定义一个变量来存放表达式的和.根据题目中提供的多项式,通过n次循环来求出n项的和。最后把所求得的和返回到主函数当 中。25 .void fun (char * a)(int i, j=0;for(i=0 ; ai!=05; i+)if(ai!=V) aj+=ai;/*若不是要删除的字符则保留*/aU =0;/*最后加上字符串结束标志0*/)该题考核的是删除字符串中所有*,需用循环语句遍历字符串,用判断 语句判断字符是否为*,由此可以决定该程序应使用循环判断结构。用循环操作从字符串开始向后逐个进行比较,若不是要删除的字符(用 if(ai!=+)来控制)则保留。变量i和j用来表示原字符串的下标和删除 *后新字符串的下标。注