2023年四川省眉山市全国计算机等级考试C语言程序设计预测试题(含答案).docx
2023年四川省眉山市全国计算机等级考试C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结/W O2 .阅读下列程序,则程序的输出结果为【】。#include "stdio.h"struct ty int data;char c; ;main() struct ty a=30/xr;fun(a);printf(n%d%cn,a.data,a.c); fun(struct ty b) b.data=20;b.c='y' 3 .软件测试中路径覆盖测试是整个测试的基础,它是对软件【】进行 测试。4 .下面的程序可对指定字符串中的字符串进行从大到小排序,请将程序 填完整。(注:程序采用了冒泡排序法)#include < stdio.h > #include < string.h >printf(" n n"); )24 .请编写函数proc(),其功能是:将str所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当str所指字符串中的内容为abcdefg,则在t所指数组中的内容应是bdfo注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:叁 include V.idhh, b AS tncludc Vcomo*U ifH ludr Vzdto. h>S include <>tnn<<void <tr »chAf void miiin<)clvif zK 100 l 100.nyntcfnC *1*1-54* ) a pruilft * mi er Mrtng z” *)itranR 。 Xproe(*ir»t><pnAif( "ftTbe result bf %>n * »t) i25 .请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同 时ASCII码值为奇数的字符外,其余的字符都删除,串中剩余字符所形 成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为 ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素的下标为 奇数,因此必须删除;而字符A的ASCII码值为奇数,所在数组中的下 标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应 是 ACEGO注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号 中填人所写的若干语句。试题程序:#include<stdlib . h>#include<conio . h>#include<stdio . h>#include<string . h>void proc(char*str, char t) ()void main char str100, t100;system("CLS");printf(nnPlease enter string str :");scanf(n%Sn, str);proc(str, t);printf(nnThe result iS : %snn, t);26 .请编写函数proc (),该函数的功能是:移动一维数组中的内容,若 数组中有n个整数,要求把下标从p到n-l (pSn-l)的数组元素平移到 数组的前面。例如,一维数组中的原始内容为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, P的值为4。移动后,一维数组中的内容应 为 5, 6, 7, 8, 9, 10 . 11, 12, 13, 14, 1, 2, 3, 4O注意:部分源 程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅 在函数proc ()的花括号中填入所编写的若干语句。试题程序: # include V*tdio. h> # define M 80void proc(int - w. int p. int n) void main()(78.910,111213,14)iint i p» n 14 iprintf( "The original dAiatnH > ifor(i-BOii<nii+ + )printf(" %3d" »arrtij) iprintK*nnEntcr p;scanf(M %d" &p) iproc(arr*p«n) iprintfC HnThe data after moving;n*);for(i-+ >printf( * %3d" .arr£i) printf(*nnw) i27 .使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,编写函数fun(), 其功能是将S所指字符串中除了下标为奇数同时ASCII值也为奇数的字 符之外的其余所有字符全部删除,字符串中剩余字符所形成的一个新字 符串存放在t所指的数组中。例如,若s所指字符串的内容为“ABCDEFG12345",其中字符A的 ASCII值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1 的ASCH值为奇数,所在数组中的下标也为奇数,因此不应当删除, 其他依此类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include <conio.h>#include <stdio.h>#include <string.h>void fun (char * s, char t)()main()(chars100 ,t WO;printf ("AnPlease enter string s:");scanf ("%s”, s);fun(s, t);printf (ccnThe result is:% snt);28.编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最短字符串中第一个字符串,传回该串地址(用一个新串“*”作为结束输入 的标志)。注意:部分源程序给出如下。请勿改动main ()函数和其 他函数中的任何内容,仅在函数fun ()的花括号中填入所编写的若干 语句。试题程序: 停 include Vsldio. h> include <string. h> 4 include Vconio. h> char * fun(char ( 100unt num) void main()(1char str10100. miniin( nwi = O:FILE * out i prmtf ( input strings withas end:");gets(strij>iputs(strCi> iwhile(! MrcmpC* M) = =0)(i+ + s gets(tn11min- fun(str»n) :prinift *nmin" %sn*.min)iout = fopcn( Moutfilc. datM »*w"):sirepyl xir0." just »strcpy(strLl *«*)iytrcpy( j»tr2.*tcsO istrcpy(Mrf3j*-somcM);s<rcpy( str4 "tool? !?*>ifprintKou! fun(str»5)> fclo5c(out) ;29 .请编写函数。fun能是:判断形参n中的正整数是几位数(输入数 据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数据为123,则输出结果为:输入的数字是3位。注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所缩写的若干语句。 试题程 finclude <stdio.h > void NONO(); int fun (int n) ) main () int n. place ;doprint ”请输入一个4位以内的正整数: scanf (R%dwr 4n);)while (n<0 |n>9999); place = fun(n);printf (“输入的数字是%d位n。,place ); NONOO;) void NONO O本函数用于打开文件,输入数据,调用雨数,输出数据.关闭文件0"/ FILE - fp, wf ;int i, n, place ;fp - fopen("c:testin.dat","rR);wf - fopen (*c: test kjut.datWw"); for ( i «0; i <10; i 1) (fscanf (tp, "%d ", 4n); place «= fun (n);fprintf(wf/place);) fclose(fp); fclose(wf);序:)30 .假定输人的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为*a*bc*def*g*,删除后,字符串中的内容则应当是 a*bc*def*g*。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数Poc的花括号中填入所编写的若干语句。试题程序:#include<stdio. h>#include<conio . h>void proc(char*str)()void main(char str81;printf(nEnter a string: knn);gets(str);proc(str);printf(nThe string after deleted: knn);puts(str); 四、2.程序修改题(10题)31 .下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的 n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所 指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如:当 s所指字符串中所指的内容为abcdabfab, tl所指字符串中的内容为ab, t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为99cd99f99o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h >#include < stdio.h > #include < string.h >/ 7,7,7,。1 7,7,1>7,7,-I* /不不小不不不不小小不不不不td n6小小小不不不不小不不不小小不/int fun (char *s, char *tl, char *t2, char *w) int i; char *p,*r,*a;strcpy(w,s);while (*w)p=w; r=tl;/1/不不不、个不不不不、不不不tci n不不不1、不不不不不不不小/while (r)if (*i*= 二*p) r+;p+; else break;if(*r=二,o,)a=w; r=t2;/ *1> *1*1* kL*。1 kL*kL*1* /不不不不不不不不不不不不不tc不不不不不不不不不不不不不不/while (*r) *a=*r;a+;r+ w+=strlen(t2);)else w+;main()chars100,tl100,t2100,w100;clrscr();printf(nnPlcase enter string S:");scanf(n%sn,s);printf(nnPleaseentersubstring tl:");scanf(u%sn,tl);printf(nnPlease enter substring t2:"); scanf(n%sn,t2);if (strlen(tl)= =strlen(t2) fun (s,tl,t2,w);printf(unThe result is : %sn”,w);)else printf(nError : strlen(n"); 32 .给定程序MODH . C中函数fun的功能是:为一个偶数寻找两个素 数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主 函数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!3 i4 i5 !6 ;7 ! i8 i i i9 i10 11 i12 i13 »I i14 ;15 :16 517;18 !19 J20 i2M22 I i23 j,24 ! 25 i26 ;1 ! linclude <stdio.h>2 J linclude <math.h> void fun(int a,int *bf int *c)(int ifj/dfy;for(i«3;i<-a/2;i-i42)(/,found /Y-l;for(j-2;j<-sqrt(double)i); j+)if (i%j«»0) y«0;if (y-1)(d»-a-i;for(j»2;j<-sqrt(double)d);*) r二if(d%j»*0) y0;if(y-ol) (*b»i; *c®d;|main()(int br c;do printf(wnlnput a: w); scanf ");while(a%2);fun(a,&c);printf (wnn%d«%d tdnNra*brc);33.下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main,数,不得增行或删行,也不得更改程序的结构。main() char*str="ABCDabcd",temp;int nJ;n=strlen(str);while(n > 1)for(i=0;i < n;i+)if(stri < stri+l) temp=;stri=stri+l;【=temp;)printf();5 .是数据库设计的核心。6 .软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和 预防性维护。7 .以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的 长度。请填空。strcen(char a, char b) int num = 0, n = 0 ;while(*(a+num)! = )num+ ;while(bn)*(a+num) = bn ; num+ ;)return(num);#include < conio.h > #include < stdio.h > void fun(long s,long *t)/7,/ .卜一卜q. q、q. q. q、.卜,4 q. 卜/ int d; long sl=l;*t=0;while(s > 0) d=s%10;/ vl*1* / 、/ "、-j、«、"、j、一、/J、«、,j、' rrw-R «、rj、-R r7> /if(d%2=0) *t=d*s+*t;sl*=10)/k1*1/t、/s=10;)main () long s,t;clrscr();printf(nnPlease enter s: "); scanf(“ld”,&s);fun(s,&t);printf(nThe result is :%ldn”,t);34.已知一个数列从0项开始的前3项:0, 0, 1,以后的各项都是其相 邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出 该数列前n项的和sumo n的值通过形参传入。例如,当n=10时,程序 的输出结果应为96.0000000请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include < conio . h >#include < stdio . h >double fun(int n) (double sum, SO, SI,S2, S ;int k ;sum=1.0 ;if (n < =2)sum=0.0 ;s0=0.0 ;si =0.0 ;s2=1.0 ;/vl* vl*1/不不不不不不不不不不不不不,ci in不不不不不不不不不不不不不/for (k=4 ;k < n ;k+)S=S0+Sl+s2 ;Sum+=s ;S0=sl ;Sl=s2 ;/ 7"7,7,7" 7,7,7,7, .!17,7,7,7,7,7,7"/不不小不不不不不不不不不不td n不小小不不不不不不不不小小/S2=S ;return sum ;) main() int n ;1234567891011121314151617clrscr();printf(nInput N=n);scanf("%d", &n);printf(u%fnn, fun(n);35 .给定程序MOD11 . C中函数fun的功能是:计算n!。例如,给n输入5,则输出12。. 000000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!*include <stdio.h> double fun (int n) double result - 1.0 ;if n » » 0 return 1.Q ;while(n >1 &4 n < 170) /育肯食found*/result n- return result ;main ()(int n ;printf(wInput N:w);scanf(n%dwr &n);printf(wnn%d! «%lfnnwrnr fun(n);)36 .下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a0中的数对调,次最小数和al中的数对调。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h > #include < stdio.h > #define N 20 void fun(int *a, int n) int i, m, t, k ;/* found* */ for(i=O ; i < n ; i+) m=i , for(k=i ; k < n ; k+) if(ak < am) /* found* */ k=m ;t=ai;ai=am;am=t ;main()(intx, bN=ll, 5, 12, 0, 3, 6, 9, 7, 10, 8,n=10, i ;clrscr();for(i=0 ; i < n ; i+)printf(n%dn, bi);printf(unn);fun(b, n);for(i=0 ; i < n ; i+)printf("%d", bi);printf("n");)37 .下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:%=K+2)/2 %例如,2的平方根为1.414214。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < math, h > #include < stdio. h >/ kL*kL* kL*kL*。1 <1>kL* kL* kJ*/不不不不不不不不不不不不不tc ma不不不不不不不不不不不不不不/fun(double a,double xO) double xl,y;xl= (x0+a/x0)/2.0;/vl* kL*1> 1* kL*vl* /"*1 vl* *1* kL*kL*/不不不不不不不不不不不不不,门不不不不不不不不不不不不不不/if (fabs (xl-xO) >0.00001)y=fun (a, xl);else y=xl;return y;main () double x;printf(nEnter x: "); scanf(n%lf&x);printf ("The square root of %lf is x, fun(x,l.O);38 .下列给定程序中函数fun()的功能是计算正整数num的各位上的数 字之平方和。例如:输入352,则输出应该是38 ;若输入328,则输出应该是77o 请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h > #include < conio.h > long fun(long num)I *+* * _|_ * _|_ * _|_ * found * * * * * * * * * * * * Ilong k=l ;do k+=(num% 10) * (num% 10);num/=10 ;/* * * * * * * * *+*+* *+*+*/ while(num)return (k);main() long n ;clrscr();printf(nPlease enter a number :");scanf("%ld", &n);printf(nn%ldnn, fun(n); )39 .下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h >#include < string.h >#include < stdio.h >#define N 80int fun(char *s, char *t) int n ;char p, *r ;n=0 ;while(*s) P= S ;/ vl* *1* *1* *1* kL*vL* kL* kL*。*1* vl* kL*kL# kL* kL* /不不不不不不不不不不不不不不tc md不不不不不不不不不不不不不不不/r二p ;while(*r)if*r=*p) r+ ; p+ ; else break ;/k1* kL>kL* *1* L« kL* vL* *1 *1*1 k£* k1> vl> 1* vl* kL*kL* *1* vL* k1* /不不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不不/if(*r=O)n+ ;s+ ;)return n ;)main()char aN, bN ; intm ;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=%dnH, m);40 .下列给定程序中fun()函数的功能是 将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h > #include < stdio.h >#include < stdlib.h > fun(int n, int *a) int i,j,p,t;for (j=O;j < n-l;j+) P二j;/v£* kL* kL* vt*vL*1 kL*vt* kL*kL* vl*/不不不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不不不不不不/for(i=j+l;i < n-l;i+) if (ap > ai)/ vt*上11vt* vt* vt*/年不不不、不不不不不不不不不不TcnnC不不(、不不不不不不不不下不不不不不不不/ t=i;if (p!=j)t=aj;aj=ap;ap=t;)putarr( iht n,int *z) inti;for (i=l;i < =n;i+,z+) printf(n%4d*z);if(!(i%10) printf(nnn); printf(unn);)main ()int aa20=9,3,0,4,1,2,5,6,8/0,7,n= 11;clrscr();printf(nnnBefore sorting %d numbers:nM,n); putarr(n,aa);fun(n,aa);printf(nnAfter sorting %d numbers:nn ,n) ;putarr(n,aa);五、程序改错题(2题)41 .下列给定程序中,函数proc的功能是:首先把b所指字符串中的 字符按逆序存放,然后将strl所指字符串中的字符和Str2所指字符串 中的字符,按排列的顺序交叉合并到str所指数组中,过长的剩余字符 接在str所指数组的尾部。例如,当strl所指字符串中的内容为ABCDEFG, str2所指字符串中的内容为1234时,str所指数组中的内 容应该为A483c2D1EFG;而当strl所指字符串中的内容为1234, str2 所指字符串中的内容为ABCEDFG时,str所指数组中的内容应该为 1G2F31: 4DCBAo请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构。试题程序:#include<stdlib. h>#include<conio. h>#include<stdioo h>#include<string. h>void proc(char*strL char*str2, char*str) inti, j; char ch;i=0; j=strleu(str2)-l;/* * * * * *while(i>j) (ch=str2i ; str2i=str2j ; str2j=ch;i+; j; )while(*strl|*str2) (if(*strl)*str=*strl ; str+ ; strl+;) if(*str2) *str=*str2; str+ ; str2+;)8 .以下程序是用递归方法求数组中的最大值及其下标值。请填空。#define M 10 void findmax(int *a, int n, int i, int *pk) if(i < n) if(ai > a *pk);findmax(a, n, i+1, &(*pk) ; main() int aM, j, n=0 ;printf(nnEnter%d data ; nn , M);for(i=0 ; i < M;i+)scanf("%d" , a+i);findmax(a, M, 0, &n);printf(n The maxinum is : %dnn , an);printf(n Its index is ; %dnu , n) ; 9 .是从二维表列的方向进行的运算。10 .结构化程序设计的3种基本结构分别是顺序、选择和 o二、单选题(10题)11 .若有定义"charch; inta; doubled;”,当输入为 12345 678910.36 时,以 下选项中能给各个变量正确赋值的是()。)/* * * * jQund* * * *str=O:) void main (char si100, s2100, t200;system(nCLSn);printf(n nEnter si string: ");scanf("%s", si);printf(n nEnter s2 string: ");scanf("%s", s2);proc(sl, s2, t);printf(n nThe result is:%s n", t); )下列给定程序中,函数proc ()的功能是:从m个学生的成绩中统计出 低于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所 指的存储单元中。例如,输入8名学生的成绩:6070809065758595则 低于平均分的学生人数为4 (平均分为77 . 5)。实际输入时学生数以 “Enter”键作为结束,成绩与成绩之间也与Enter键作为分隔。请修改程 序中的错误,使它能得到正确结果。注意:不要改动main ()函数, 不得增行或删行,也不得更改程序的结构。试题程序:It include < con io.卜>行 M 20mt proc (float » mt aver >/ (MMmI mi .ve .t-Oiki< cMZ-Ok.si ior< k -0|k< tub + >b (/1ior iO.iVsj+ )/ fo41Ml i“ <,>“couni. . i/ found vrf ”,muni rcnjfttaEid mainC)(I(m1 mwM)j»iveri tnr m«ii"CL-S*)1pnotf(wnPlra>r enter ms *)>raiw(a Kd* & m) pnm( *aPkese enter “d mark An* »m) i ,cr<-Oit<ehi 计 +)* WPbm+“ipnnfK *n71>r number of utudetitsii Mdn' pror(献 se &wr) ).pFwii* Avc - % fn. 六、操作题(2题)43.请补充main函数,该函数的功能是 输入两个正整数numl和num2, 求这两个数的最大公约和最小公倍数。例如,若输入的两个正整数为12, 4,则它们的最大公约数为12,最小 公倍数为4O注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填人所编写的若干表达式或语句。试题程序:#include<stdlib . h>#include<stdio . h>void main (int a, b, numl, num2, t ;system("CLS"):printf(nnlnput two numbers : nn);scanf(n%d, %dn, &numl, &num2);if(numl<num2) !a=num2 ;b=numl :) elsea=numl ;b=num2 ;)while( 1 )!t二a=b ;b=t :printfgreatest common divisor :%dnn, a);printf(nleast common multiple :%dnn, 3;44.下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元 素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并 将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是 5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对 前10个元素进行处理,不对最后的4个元素求平均值。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio.h >#define SIZE 20fun (double *s, double *w) int k, i; double sum;for(k=2, i=0; i < SIZE; i+)s i=k; k+=2;sum=0