《2022年山东省莱芜市全国计算机等级考试C语言程序设计预测试题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年山东省莱芜市全国计算机等级考试C语言程序设计预测试题(含答案).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年山东省莱芜市全国计算机等级考试C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1.以下程序的定义语句中,xl的初值是(),程序运行后输出的内容是 ()0#include main() intx= 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, *p4, i ; for(i=0 ;i4 ;i+) pi=&x2*i+l, printf(nq%d, pi0) ; printf(nnn) ; 2 . fwrite函数的一般调用形式是3 .设变量已正确定义为整型,贝IJ表达式n=i=2, +i, i+的
2、值为【】。4 .软件危机出现于60年代末,为了解决软件危机,人们提出了【】的 原理来设计软件,这就是软件工程诞生的基础。5 .下程序的输出是【】。main() (char strl=nHow do you do!*pl=strl;strcpy(strl+strlen(strl)/2/es she);printf(u%snn,pl);)A include include V*tdio. h include vord proc(ini x int pp. inf n) void nuin ()int x.arr lOOOj. n. i :systemC *CISW ) iprinifC HnPle
3、asc enter an integer numbcr:n M) iseanf&-x) iproc( x arr. 8n) sfor(i = 0 ; in : i+ + J printf (%d arrLij): printf (Mn M) i26.使用VC+2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,函数fun()的功 能是将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s 所指字符串中剩余的字符形成的新字符串存放在t所指的数组中。例 如,若s所指字符串中的内容为“ABCDEFG12345,其中字符C的 ASC
4、II值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的 ASCII值为奇数,在数组中的下标为奇数,因此不应当删除,其他依 此类推。最后t所指的数组中的内容应是“BDH2345”。注意:部分源程序在文件prog 1 .c中。请勿改动main()函数和其他函数中 的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:tinclude #include void fun (char s, char t)51 6;810111213141516main ()char s100r t 100;void NONO ();Printf (HnPlease enter string s
5、:M);scanf (M% s,s);fun(s, t);printf (MnThe result is: %snMf t);NONO ();17181920212223242526272829void NONO () / *本函数用于打开文件、输入数据、调 用函数、输出数据及关闭文件*/char s100, t100;FILE * rf, * wf ;int i ;rf = fopen(Hin.datMrMrH);wf = fopen (Hout .datMz,fwH);for (i - 0 ; i 10 ; i + ) fscanf (rf rtf%sHr s);fun (s, t);fp
6、rintf (wf rtt%snn/ t);fclose (rf);fclose (wf);27.使用VC+2010打开考生文件夹下progl中的解决方案。此解决方案 的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(), 其功能是找出2xM整型二维数组中最大元素的值,并将此值返回调用 函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#define M 4#include int fun (int a m) ()void main () (int arr2M=5, 8, 3,
7、45,76,-4,12,82;printf (“max=%dn fiin(arr); )28.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入 结构体数组stu中,请编写函数proc (),该函数的功能是:把高于等于 平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通 过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。 请勿改动main ()函数和其他函数中的任何内容,仅在函数proc ()的 花括号中填入所编写的若干语句。试题程序: ificlwd*H (Muir M 12char lamt, lOji 4wt4e 1EUDG doutile |wr .l
8、eGA04aB3UeGAOIe*n .MUrGAIte.79k(*GAIteTlH (eGAlOeMntSTRGC MMj.IIM j 3 dovbie avcie- proH 4&,pnnH *Th Yd tfWfM 4ota wkvii .btgher iHm S7 3fas loriOt Yimpriatfc * X %,IfKahO; mm.H Ja.pnntf(29 .请编写一个函数proc,它的功能是:求出1m(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传给m的值为70,则程序输出:7 11 14 21 22 28 33 35 42 44 49
9、55 56 63 66 70注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。试题程序:#include#include#include#define N 100void proc(int m, int*a, int*n)()void main(int arrN, n, k;system(CLS);proc(70, arr, &n);for(k=0 ; k tt include h % inrludr V zdan. hUmi fun( raid mainC)RLE 。皿flmv cos* (wM pnmf( ReMih %
10、fne ) i out- fopraC* *we)gfpnbtf(oui* K(wc(ni)b (doBcCauOi四、2.程序修改题(10题)31 .下列给定的程序中,函数fun()的功能是:计算并输出k以内最大 的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的 值为500,则函数的值为2925。请改正程序中的错误,使它能得到正确结果。注息.不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include int fun(int k)(int m=0, mc=0, j ;/*found*/while(k =2)&(mc 6)(/*fou
11、nd*/if(k%7=0)|(k%ll=0)(/*found*/m=k ;mc+ ;)k-;)return m ;)mainQ(clrscr();printf(%dn, fun(500);)32 .给定程序M0D11 . C中函数fun的功能是:根据整型形参m)计算 如下公式的值。,1 1 1 1 y = 1 + +2,2 3*3 44例如,若m中的值为:5,则应输出:1 . 46361 lo请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!234567891011121314include double fun (int m) dou
12、ble 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);33 .下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #dcfinc N 20void fun(int a,int n)int ij,t,p;for (
13、j=O;j n-l;j+)p=jfor(i=j;i n;i+)if(ai kl# 7/不不不不不不不不不不小不不tc nc不不不不不不不不个不,p=j;t=ap; ap=aj; aj=t;)main()int aN=9.6,8,3,-l ,i,m=5;printf(排序前的数据:);for(i=0;i m;i+) printf(%d,ai);printf(n);fun(a,m);printf(排序后的顺序:);for(i=0;i m;i+) printf(%d,ai);printf(n);34 .下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。请改正程序中
14、的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include #include #define MAXLINE 20/klkl*/不不不不不不不不不不小不不丁门nc不不不不不不不不个不不不个个/fun(char *pstr6)int i,j;char *p;for(i=0;i 5;i+) for(j=i+l;j kl*k /不不不不不不不不不不小不不丁门nc不不不不不不不不个不不不个个/ if(strcmp(*(pstr+i),pstr+j) 0)p=*(pstr+i);* (pstr+i) -pstr+j;* (pstr+j)=p
15、;) main () int i;char *pstr6 ,str6 MAXLINE; clrscr();for(i=0;i 6;i+) pstri=stri;printf(nnEnter 6 string( 1 string at each line):n n);for(i=0;i 6;i+) scanf(%s,pstri);fun(pstr);printf(nThe strings after sorting:n );for(i=0;i 6;i+) printf(H%sn M,pstri);35.给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。请改正程序中的错误,使它能得出
16、正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include 6 .用树型结构表示实体类型及实体间联系的数据模型称为【】。7 .排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排 序、【】和选择排序等。8 .以下程序中函数huiwen .的功能是检查一个字符串是否是回文,当 字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!, 并在主函数中输出,所谓回文即正向与反向的拼写都一样,例如:adgda。 请填空。#include char *huiwen(char*str) char*pl,*P2;int i,t=O ;Pl=s
17、tr;p2=;for(i=0;i = strlen(str)/2;i+)if(*pl+!=*p2)t=l ; break ; if( )return(yes!);else return(nno!n);main() char str50;printf(nInput:n);scanf(H%s,str);printf(%sn,);)#include float m10;/vt*kLk1* /不不不不不不不不不不不不不Tc in不不不不不不不不不不不不不不/int fun (void) intj;printf(nIn subfunc after callingnn);for(j=O;j 10;j+)/
18、vl* kL*kL*1 vlxkL* vt* /不不不不不不不不不不不不不tc ma不不不不不不不不不不不不不不/ print (n%f mj%5);)main() int i;printf (nIn main before callingnn);for (i=0;i 10;i+) mi=i+20;printf(n%f mi);)fun();printf(nnln main after callingnn);for(i=O; i 10;i+)printf(n%fn,mi/5);36 .给定程序MODH . C中函数fun的功能是:统计一个无符号整数中 各位数字值为零的个数,通过形参传回主函数;
19、并把该整数中各位上最 大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字 值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1234include int fun(unsigned n, int *zero) int count=0,max=0,t;do5678910 tn%10;/ found if(t-0) count+;if(maxt) maxt;n*n/10;111213while(n);found*zero=count;14return max;15161
20、718192021main () unsigned n; int zerormax;printf (nnlnput n (unsigned) : M); scanf (tf%dnr &n);max fun(nr &zero);printf (HnThe result: max=%d zero= %dnwrmaxr zero);37 .给定程序MOD . C中函数fun的功能是:从低位开始取出长整型 变量S中奇数位上的数,依次构成一个新数放在t中。高位仍在高位, 低位仍在低位。例如:当S中的数为2736598时,t中的数为:23580 #include #include / vt* vt*vl*
21、 vt*1vt* vL* kL* vt*vl* vt* vt* /不不不不不不不不不不不不Ie】mC不不不不不不不不不不不不/ void fun(long s,long t) long sl=10 ;*t=S%10 ;while(s 0) s=s/100 ;*t=S%10*sl+*t ;/vt*1k!vt# 41 7/不不不不不不不不不不不下tci n ri下不不不不,、不不不sl=sl*100 ;) main()longs, t ;clrscr();printf (nnPlease enter s :);scanf(%ld, &s);fun(s, &t);printf(nThe result
22、 is : %ldn,t);38 .下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。y=l-l/(2x2)+l/(3x3)-l/(4x4)+.+(-l)(m+l)/(mxm)例如:m中的值为5,则应输出0.83861L请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun(int m) double y=1.0 ;/不不不不不不不不不不tciind不不不不不不不不不不不不不/int j=l;int i ;for(i=2 ; i =m ; i+)/vt*
23、7vt*1/不不不不不不不不不不不不不不不不ci inri不小不不不不不不不不不不不/)return(y); ) main() int n=5 ;clrscr();printf(un The result is %lAnn, fun(n);39 .下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中 的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串 中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插 入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排 序的字符串已在主函数中赋予。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数
24、,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #define N 80 void insert(char *aa) (int i, j, n ; char ch ;n=strlen(aa);for(i= 1 ; i =0)|(ch aaj) aaj+l=aaj;J-,)/|kJ /不不不不不不不不不不不不予Tei ind不不不不不不不不不可不不不/aaj=ch ;) main() char aN=nJRTYDFKLIOPQWEGHMNBVCUASXZn;int i ;printf(nThe original string : %Snn, a);inser
25、t(a);printf(nThe string after sorting : %Snnn, a);40 .给定程序MOD11 . C中函数fun的功能是:将s所指字符串中的字 母转换为按字母序列的后续字母(但Z转换为A, Z转换为a),其他字符 不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!12345678910111213141516171819202122include include void fun (char *s) (/found*/ while if (2=% & *s-,al & *s,zf)
26、if (*s-Z1) *s-,At; else if (*s1 z1) else *s += 1;/found/ (*s)+;)main ()(char s (80;printf(Mn Enter a string with length 80. :nn w); gets(s);printf (nn The string : nn w); puts (s);fun (s);printf (nnn The Cords : nn n); puts (s);五、程序改错题(2题)41 .下列给定程序中函数fun的功能是:将P所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,
27、若给a输入字符串:ABCDEFGKHHK,调用函数后,字符数组b 中的内容为:ABC DEF GHI JKO请改正程序中的错误,使它能得出正 确的结果。注意:部分源程序在文件M0D11 . C中,不得增行或删行,也不得更改 程序的结构。finclude void fun(char p. char - b)I int it k s:0;while( p)I il;while( i =3 & e p ) | ./ foundMk =p;I玳p)I/found /bk * = w;IIbk 3 VO1;Imain()char a 80 .b 80;printf( Enter a string: )
28、; gets( a);printf( wHie origind siring: ) ; puts(a);printf( w nThe string after insert space: ) ; puU(b) ; printf( nn);I42 .下列给定的程序中,函数proc的功能是:用选择法对数组中的m 个元素按从小到大的顺序进行排序。例如,排序前的数据为:11 32-5 2 14则排序后的数据为:-5 21114 32注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio. h>#define M 20void proc(in
29、t a,int n)(inti, j, t, P;* * * * Qund* * * *for(j=0; j+);( p=j;for(i=j ; i<n; i+) if(ai<ap)p二i;t=ap;a p=aEj3;* * * * found* * * *ap=t;)void mainint arrM= 11, 32, -5, 2, 14, i, m=5;printf(排序前的数据:);for(i=0; i<m; i+)printf(%d”, arri);printf(nn!);proc(arr, m);printf(排序后的顺序:);for(i=0; i<m; i+
30、)printf(%d, arri);printf(nnn);六、操作题(2题)43 .下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元 素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并 将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是 5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对 前10个元素进行处理,不对最后的4个元素求平均值。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #define SIZE 20fun (double *
31、s, double *w) int k, i; double sum;for(k=2, i=0; i SIZE; i+) s i=k; k+=2; sum=0.0 ;forgO, i=0; i k vt* *Jk1 kL k1 k! *1k1* /不不不不不不不不不不不不不Tc in不不不不不不不不不不不不不不/if(i+l%5=0)wk=sum/5; Sum=0; k+;return k;) main() double aSIZE, bSIZE/5;int i, k;k=fun(a/b);printf (The original data : n);for(i=0 ; i SIZE ; i+
32、)(if(i%5=O)printf(n);printf(%4.0f7ai);)printfnnThe result : n);for(i=0; i k; i+) printf(%6.2f, bi);printf(nn);44 .请编写一个函数int fun (int *s, int t, int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:234 345 753 134 436 458 100 321 135 760则输出结果为6, 100。注意:部分源程序给出如下。9,求任意一个数(用16位二进制码表示)的补码。main() unsigned
33、int a ;;scanf(%O, &a);printf(%on, getbits(a);unsigned int getbits(value)unsigned int value ;unsigned int z ;z=;if(z 二二 0100000)【】;elsez=value ;return(z);10 .诊断和改正程序中错误的工作通常称为【】。二、单选题(10题)11 .在具有n个结点的单链表中,实现。的操作,其算法的时间复杂度是OoA.求链表的第i个结点B.在地址为P的结点之后插入一个结点C删除请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填入所编写的若干语
34、句。试题程序:#include #include intfun(int *s, intt, int *k)( ) main()(int a10=234, 345, 753, 134, 436, 458,100, 321,135, 760), k ;clrscrQ /fun(a, 10, &k);printf(%dr %dn, k, ak);)参考答案1.2246822468解析:p为指向数组的指针变量,数组xl为数组x口 的第二个元素,值为2 ;进入for循环i=0时,直到循环完 毕,指针分别指向数组x中的第2、4、6、8个元素,所以第二个空白 处应填24 6 8。2.D3.33解析:本题考查
35、的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达 式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再 自加1,最后i+的值计算为3。4 .软件工程学软件工程学5 .How does sheHow does she 解析:strcpy(strl, si):字符串拷贝函数, 作用是将字符串si拷贝到字符数组strl中去。strlen(str):测试字符串 str的长度,函数的值为字符串中实际长度,不包括0在内。本题中 strlen(strl)的值为 13 ,则 strcpy(str 1 +strlen(str 1 )/2,es s
36、he);相当于 strcpy(strl+6,es she);,因此可得答案为 How does sheo6 .层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次 模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模 型,用二维表格结构表示实体及其联系的数据模型称为关系模型。7 .交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入 排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选 择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作 用机制和区别。8 .str+strlen(str)-l i strlen(str)/2 huiwen(s
37、tr)str+strlen(str)-1 rni strlen(str)/2rnhuiwen(str)解析:首先使指针pl指向字符串的首地址, 指针p2指向字符串的尾地址(不包括字符串结束标记NO)然后指针pl 从前往后,指针p2从后往前,直到移至字符串的中间元素,若两者所 指的元素不相等,则跳出循环,此时i strlen(str)/2o通过if语句判断,如果istrlen(str)/2,则返回“yes!”,否则返回“no!”。 主函数中要求输出函数huiwen(str)的返回值。9 .unsigned int getbits( ) value&O 100000 z =value+1 unsi
38、gned int getbits( )rnvalue&0100000rnz 二value+110 .程序调试程序调试 解析:程序调试的任务是诊断和改正程序中的错 误。程序调试与软件测试不同,软件测试是尽可能多地发现软件中的错 误。先要发现软件的错误,然后借助于调试工具找出软件错误的具体位 置。软件测试贯穿整个软件生命期,而调试主要在开发阶段。11 .A12 .A函数中,形参必须是变量,实参可以是常量、变量或表达式,选项 A错误,选项B正确;实参的个数和类型要与形参一致,选项C、D正 确。本题答案为A选项。13.B解析:本题考查的知识点是变量赋初值.选项A中的语句只能起 定义nl的作用,而n2=
39、10是nl的初始值表达式,但因前面没有定义过 n2,所以编译会报错“n2未定义”,故不正确。选项B使用一个整数初始 化一个字符变量是正确的,因为字符变量中保存的本来就是整数(某字 符的ASCII码值)。选项C定义的初始值表达式中出现了它自身,某些 编译器能通过编译,但f在初始化之前是一个未知的值,用未知值来初 始化也还是未知值,这是不可取的。选项D的初始值是一个非法常量, 因为实型常量指数形式的指数部分必须为整数,这里的2.5非法。14 .C解析:通过scanf()函数从键盘读入数据时,接收参数的使用变量的 地址值,所以选项A和B是错误的。选项D要求输入时以逗号间隔, 故按题目要求的输入方式不能正确读取到3个数,也是错误的。所以正 确答案是C。15 .A题目中程序不能实现预期功能是因为while的循环条件错误。选项 B中把“s=l;改为s=0;最终的结果“s=4”,与题目原意不同。选项C中 把改为“n=0;”最终的结果“s=2”,与题目原意不同。选项D中 把“n=n+l;改为n=n*n;,最终的结果“s=2”,与题目原意不同。选项A 正确地修改了 while循环条件,可以得到正确结果。故本题答案为A选 项。