2022年辽宁省盘锦市全国计算机等级考试C语言程序设计模拟考试(含答案).docx
2022年辽宁省盘锦市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .以下程序运行后的输出结果是()。main()int m=011, n=ll ;printf("%d%dff',+m, n+);)2 .设a、b、c为整形数,且a = 2, b = 3, c = 4则执行完以下语句后,a 的值是【】。a* = 16+(b+)-(+ +c);3 .下列的for语句的循环次数为 ofor(x= 1, y=0 ;(y!=19)&&(x < 7) ; x+);4 .下面程序的功能是将一个字符串str的内容颠倒过来,请填空。main() (int i,j, ;char str= "1234567");for(i=Oj=strlen(str) ;i < j;i+j-)k=stri ;stri=strj ;strj=k; printf(n%sn!str);double fun( STREC ' h )STREC creat( double s)i STREC h. p. q; int i =0;h *p* (STREC )nudloc(tixeoT(STREC) ;p ->> =0;whae(i<N)| q = (STREC )maUoc(»izeof(STREC);q ->a s» i ; i. .; p -> next = q; p = q;I'" "Ip -> next =0;return h;Ioutlist( STREC h)| STREC p;p = h -> next ; printf( " head");do| printf( M ->%4. IP tp->«);p-p-*>next;|while( p! »0);printf( * nnM ) Imain()| double ”N , |85,76.69,85,91,72,64.87| .ave;void NONO():STREC h;h s creai( s ) outliBt( h);ave « fun( h );printf( w ave = %6.3fn,* tave);NONO();I.void NONO()l/e本函数用于打开文件,输入数据,调用函数,输出数据.关闭文件。/FILE in. out ;int itj ; double s N 9ave;STREC eh ;in = fopen( " in. dat* , * r*);out = fbpen(wouL datRtR w");for( i s 0 ; i < 10 ; i )Ifor(jx0 ; j < N; j+ +)fecanf(in.&sj);h = creat( s );are = fun( h );fprintf(outv *%6,31fnH . ave);Ifcloee(in);fcl(»e(out);25.请编写函数proc(),该函数的功能是:计算并输出 例如,若主函数从键盘给n输入10后,则输出为S=104. 478749o 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数proc()的花 括号中填入所编写的若干语句。试题程序:专 include < math.r include K>double proc< int a)9" fMin< >nt ntdouble Stpnnrf(*anln|>ut ni a)iscanf(aKd<«&n)iSproctn) printf( "nnSw«S)t 126 .假定输入的字符串只包含字母和“铲号,请编写函数fun (),它的功能 是:删除字符串中所有的“铲号。在编写函数时,不得使用C语言提供 的字符串函数。例如,若字符串中的内容为“#w#el#come#",册!|除 后,字符串中的内容则应当是“welcome”。请勿改动main ()函数与其 他函数中的任何内容,仅在函数fun ()的花括号中填入所编写的若干 语句。试题程序:W include <5tdio. h> 弃 include <conio. h> # define slrcpy void fun(char s)void main()char slr81 JiFILE out;printf( *Enter a string:rT);gets(str) ifun(str) pnnt(',The string after deletcdAn*); puts( str) iout (open( "outfilc. datM "w" ) s srcpy( str"r二 n T 工 ES 七 fun(sir) sfpnntfCout.* .str) i(closet out >:27 .使用VC+2010打开考生文件夹下progl中的解决方案。此解决方案 的项目中包含一个源程序文件progl.c。在此程序中,编写函数fun(), 其功能是删除一个字符串中指定下标的字符。其中,a指向原字符串, 删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。 例如,输入一个字符串“World”,然后输入3,则调用该函数后的结果 为“Word”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include <stdlib.h>#include <stdio.h>#include <conio.h>#define LEN 20void fun (char a , char b , int n)()void main ()(char strlLEN, str2LEN;int n;system(“CLS»);printf ("Enter the string:n);gets(strl);printf ("Enter the position of the string deleted:");scanf ("%d; &n); fun(strl9 str2, n);printf ("The new string is:%sn”, str2);28.请编写一个函数proc(),它的功能是将一个数字字符串转换为一个 整数(不得调用C语言提供的将字符串转为整数的函数)。例如,若输入字符串“1234”,则函数把它转换为整数值1234。注意:部分源程序给出如下。请勿改动main。函数和其他函数中的任何内容,仅在函数proc()的花括 号中填入所编写的若干语句。试题程序:C include Vsufto. I,includeh>Ion* pror(chk»r void main()char Mrr41ilootprintf(eEmef a wtnn<en'<>i gn»< %tr> ii- proc(ntr) iprmtf< % ldtT «n) i29 .编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返 回此值。例如,若输入字符串123412132,输入字符为1,则输出3。注意:部分源程序在文件PROC1 . C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括 号中填人你编写的若干语句。tinclude < stdio. h > tinclude < string, h >#define M 81int fun( char ss. char c)main()I char a; M : . ch;void NONO();printf( " SnPlease enter a string:" ) ; gets( a);printf( * nP1ease enter a char:" ); ch = getchar();printf( * nThe number of the char in: %dn*, fun(av ch);NONO():void NONO()1/本函数用于打开文件,检人测试数据,调用fun函数,输出数据.关闭文件。/ int i ;FILE rf. wf ;char aMv bMt ch ;rf = fbpen( Hin. dat" Jr");wf = fopcn( "oul. dat” J w");for(i = 0i < 10;i+)Ifecanf(rf, . a);facanf( rf, R%s* t b);ch s b ;fjprintf(wfvM%c %dnwt ch, fun(at ch);fcl(»e( rf);fcloee( wf):30 .使用VC+2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数 fun(),其功能是将形参s所指字符串放入形参a所指的字符数组中, 使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。注意:部分源程序存放在文件progl.c中,请勿改动主函数main()和其他 函数中的任何内容,仅在函数fun()指定的部位填入所编写的若干语 句。试题程序:津. #include < stdio.h >#define N 203 void NONO ();avoid fun ( char a , char * s) 67)main ()%( char slNj r *s2 = nabcdefghijkn;fun ( si, s2 );慧printf(M%si);1专printf (1,% sn, s2 );13 NONO();p void NONO ()16/*本函数用于打开文件、输入数据、调喇用函数、输出数据及关闭文件*/ 署 FILE fp, wf ;int i;谆 char sl256r s2256;MK fp = fopen (Hin.datwf,rM); c wf fopen(nout.datnrMwH);9M for (i = 0 ; i < 10 ; i + )(23fgets(s2r 255, fp);Hfun(si,s2 ); Rfprintf (wf /f>% s", si); )SEfclose (fp);雷!fclose (wf);/四、2.程序修改题(10题)31 .给定程序MODII . C中函数fun的功能是:将长整型数s中每一位 上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位 仍在低位。例如,当s中的数为:87653142时,t中的数为:8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!123 45 678include <stdio.h> void fun (long s, long *t) ( int d;long sl*l;*t . 0;while (s > 0) d - s%10;育育育育found*91011if (d%2«0) *t-d* si* *t;si 10;1213*found*)151617main ()1819202122 long s, t;printf(wnPlease enter s:w); scanf (w%ldRr &s);fun(sr &t);printf(The result is:%ldnwrt);32 .已知一个数列从。项开始的前3项:0, 0, 1,以后的各项都是其相 邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出 该数列前。项的平方根之和sum。n的值通过形参传入。例如,当n=10 时,程序的输出结果应为23.197745。请改正程序中的错误,使它能得出正确的结果。试题程序:#include < conio.h > #include < stdio.h >#include < math.h >/ *1* *1* *1 kI* vt*vt* kJ>。1 1* vl> k!> *1*vl* /不不不不不不不不不不不不不不不tci ind不不不不不不不不不不不不不不不不不不不/fun (int n)double sum, sO, si, s2, s; int k;sum=1.0;if (n < =2) sum=0.0;sO=O.O; sl=O.O; s2=1.0; for (k=4; k < =n; k+) s=s0+sl+s2; sum+=sqrt (s); sO=sl; sl=s2; s2=s;/ 4fJ*17,7,7,7“ 7,7, /个不不不个不不不不不个不不个不小Tei in。个个小小小不不不小不不不不不小不不/return sum main ()int n;clrscr ();printf(HInput N=H);scanf(H%dn, &n);print ffun (n);)33 .给定程序MODH . C中函数fun的功能是:统计一个无符号整数中 各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最 大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字 值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。123489101112linclude <stdio.h> int fun(unsigned n, int *zero) int count-0/max»Ort;do 丹廿if (t-0)count+;if(max<t) max-t; n-n/10;while(n);13zero«count;14return max;found15 )16main ()1718192021 unsigned n; int zero,max;printf (wnlnput n (unsigned) : w); scanf L%d", &n);max fun(nr izero);printf (HnThe result: max=%d zero= %dnnrmaxr zero);34 .给定程序MOD11 . C中函数fun的功能是:将十进制正整数m转换 成k(2SkS9)进制数,并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是 1000)o请改正fun函数中的错误,使它能得出正确的结果。5 .下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是【】。main() int a10=l,2,3,4,5,6,7,8,9,0),*p;p=a;printf(H%xnn,p);printf(n%xn,p+9);)6 .以下程序的输出结果是()。#include < stdio.h > fun() static int a=0 ; a+=3 ;printf(n%dn, A) ; main() int cc ; for(cc= 1 ;cc < 5 ; cc+)fun(); printf(nnn) ; 7 .已知字符A的ASCII码值为65,以下语句的输出结果是【】。char ch=,B,;printf(n %c%dnM ,ch,ch);8 .以下程序运行后的输出结果是struct NODE int k;struct NODE *link;);main()struct NODE m5,*p=m/q=m+4;int i=0;whilc(p!=q) p- > k-+i; p+;q- > k-i+; q")12345678910111213141516171819finclude <conio.h> include <stdio.h> void fun(int m, int k)int aa 20, i;for(i 0; m; i+)aa1- m /= k;found* * * m/k;for(; i; i-)*found* printf (w%dttr aai);main ()20212223int b; n;printf(MnPlease enter a number and a base:nR);scanf(n%d %d”, &n, &b);fun(nr b);printf(wnw);35.下列给定程序中,函数fun()的功能是;计算函数F(x, y ,z)=(x+y)/(x- y)+(z+y)/(z-y)的值。其中x和y不相等,z和y不等。例如,当x的值为9, y的值为11, 2的值为15时,函数值为-3.50。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio. h > #include < math, h >/vt* vt* vl*vl*1 vl*vL*/年不不不不不不不不不不不不不ci不不不一不不不不不不不不不不不不不不/ #define FU(m, n) (m/n) float fun(float a, float b, float c) float value;value=FU(a+ b, a-b)+FU(c+ b, c-b);/*4* kL* kL* *1*1kJ*1* KJ> /个小个个个个个个个个个个个Tei nc个个个个个个个个个个个个个个个个个个/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=%An ”,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,sum);)36 .下列给定程序中,函数fun()的功能是:将m(lSn£10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc, CD, EF串联起来,结果是abcCDEF。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h >#include < string.h >#include < stdio.h >/*1/不不不不不不不不不不不不不tciind不不不不不不不不不不不不不不/ int fun(char str 10,int m, char *pt) int k,q,i,j=O;for(k=0;k < m;k+) q=strlen(strk);j+=q;for(i=0;i < q;i+)/ kL*vt*kL*1/不不不不不不不不不不不不不tc】inrl不不不不不不不不不不不不不不/ pti=strk,i;pt+=q;ptO =0;)Pt-=j;)main () int m, h;chars10 109p120;clrscr ();printf(nnPlease enter m: n);scanf(n%du,&m); gets(s0);printf (nnPlease enter %d string:In ",m);for(h=0;h < m;h+) gets(sh);fun (s,m,p);printf(nnThe result is :%sn n,p); )37 .下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=-l+l/2+l/3+l/4+.+l/m例如,若输入5,则应输出2.283333。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h >#include < stdio.h >double fun(int m) double t=1.0;int i;for(i=2;i < =m;i+)/ kL*vt*kL*1 k£«/不不不不不不不不不不不不不tc】inrl不不不不不不不不不不不不不不/t+=1.0/k;/kl*k£>k1> kl*k£> /不不不不不不不不不不小不不Tei inc不不不不不不不不个不不不个个/return i;)main()int m;clrscr();printf(nnPlease enter linteger number/1);scanf("%d&m);printf(nnThe result is%l Ann, fun(m);)38 .下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a0中的数对调,次最小数和中的数对调。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h > #include < stdio.h > #define N 20 void fun(int *a, int n) int i, m, t, k ;/ 1#I/不不不不不不不不不不不不不Tei inc不不不不不不不不不不不不不不/for(i=O ;i < n ;i+) m=i ;for(k=i ; k < n ; k+)if(ak < am)/ £* /*4*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("%d", bi);printf("n");fun(b, n);for(i=0 ; i < n ; i+)printf("%d", bi);printf(nnM);39 .下列给定程序中,函数fun()的功能是 读入一个字符串(长度20), 将该字符串中的所有字符按ASCII码降序排序后输出。例如:输入dafhc,则应输出hfdcao请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,敢不得更改程序的结构。试题程序:#include < conio.h > #include < stdio.h >/ke>I/不不不不不不不不小,、小不不rm inc个个不个不不不不不不不不个个/ int fun(char t) char c ;inti, j ;for(i=0 ; i < strlen(t)-l ; i+) for(j=i+l ; i < strlen(t) ; j+)/ 7" 7" 7" 7" 7,7,7,7" 7,7,1 7" 7” 7,7" 7" 7,7,7”7” 7” 7,/不不不不不不不不不不不不不八不不小不不不不不不不不小不不/ti=c ;) main() chars81;clrscr();printf(nnPlease enter a character string :");gets(s);printf(nnnBefore sorting : n%Sn, s);fun(s);printf(nnAfter sorting decendingly : n %sn, s);40 .给定程序中函数fun的功能是:从低位开始取出长整型变量S中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低 位。例如,当s中的数为7654321时,t中的数为642。请改正程序中的错误,使它能得到正确结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。试题源程序#include < stdio.h >/ /不不不不不不不不不不不不ci nri不不不不不不不不不不不/void fun(long s, long t) long sl=10;s/=10;*t=s% 10;/ vjz*vL#kL*1vl*/不不不不不不不不不不不不tciind不不不不不、不不不不不不/while(s < 0) s=s/100;*t=s% 10*sl+*t;sl=sl *10;) msin()long s, t;printf(nnPlease enter s:n);scanf("%ld", &s);fun(s, &t);printf(nThe result is: %ldrT, t);五、程序改错题(2题)41 .下列给定的程序中,函数proc的功能是:判断字符ch是,与str 所指字符串中的某个字符相同;若相同,则什么也不做,若不同,则 将其插在串的最后。请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结 构。试题程序:#include<stdlib . h>#include<conio. h>#include<stdio. h> #include<string. h>* * * * found* * * *void proc(char str, char ch)(while(*str & &*str!=ch)str+;* * * * found* * * *if(*str=ch) strO=ch;strl=O:void main (char str81, ch;system("CLS");printf(n nPlease enter a string: ");gets(str);printf(n n Please enter the character tosearch: ");ch=getchar;proc(str, ch);printf(n nThe result is % s n", str);)42 .下列给定程序中,函数proc()的功能是:求S的值。5=(2' (1 3M (41 (3 (6' (5 7)一I)I)例如,当n为100时,函数的值应为1. 566893o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main。函数,不得增行或删行,也不得更改程序的结构。试题程序:F ificludr V.ldhh b>然 includr Vconio. h2> s mciude <,idid b) S mcrludr Vm<llu h> ,/ found pror( mt )int ns flot »utn« w p qi n11utn l Oi wlulr< nV 4 0> (a P,B- 1.0| q,+LQ, Mim . »um w w/p. qi n+ I found returvi »titnvoid mAin()wywlcm( *0<80 ) iprimfC*: 3fn * proc(100>)s六、操作题(2题)43.使用VC+打开考生文件夹下modil中的解决方案。此解决方案的项 目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是求 出s所指字符串中最后一次出现的t所指字符串的地址,并将此地址通 过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则 函数值为NULLO例如,当字符串中的内容为“abcdabgbcdx”,t中内容为“ab”时,输出 结果应是“abcdx”。q- > k=i;for(i-0;i < 5;i+)printf(u%dn,mi.k);printf(nnn);9 .下列程序的运行结果为【】。main() int a3C4=l, 3, 5, 7, 2, 4, 6. 8, 15, 17, 34. 12);printf(nmax value is %dnn, max value(3, 4, a); )max value(m, n, array)int m, n, array4; int i, j, max ;max=arrayOO;for(i=0 ; i < m ; i+)for(i=0 ; i < n ; j+)if(max < array i j)max=array i j ;return(max); )10 .表达式 l/2*(int)3.7/(int)(2.4*(1.5+2.5)值的数据类型为 。二、单选题(10题)11 .当字符串中的内容为“abcdabfabcdx”,t中内容为“abd”时,则程序输出未找到信息“Not found!”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main。函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdlib.h> #include <stdio.h> #include <conio.h> #include < string.h> char * fun (char *s, char *t)char * p, * r, * a;/ vL* 1* 1*1 vL*vl* vl* /不不不不不不不不不Toiincl不不不不不不不不不/a=Null;while(*s)p=s; r=t;while ( * r)/ si>I/不不不不不不不不不Tcnnc不不不不不不不不不/if (r=p) r+; p+; else break;if(*r='O,)a=s;S +;)return a;)void main ()(char s100,t100, *p;system(“CLS”);printf ("nPlease enter string s:");scanf("%ss);printffnPlease enter substring t:");scanf ("%s"J);p=fun (s, t);if(P)printf ("nThe result is: %sn' p);elseprintf C'nNot found!rT);44.以下函数的功能是删除字符串s中的所有数字字符。请填空。void dele (char *s) int n=0,i;for(i=0, si; i+)if( 1 ) sn+=si; sn=;参考答案1.10111011解析:赋值表达式m=0U中的常数Oil为八进制,+m后 以十进制数格式“ d”输出为10o2.283.66解析:分析程序可知,每循环一次,x的值加1,然后检测循环控 制条件(y!=19)&&(x<7),因y的值不变,故满足x <7时循环6次。4.k -lkrn-l解析:程序山使用了整型变量i、j、k,使用前应先声明, 因此第1个空应填变量k。i和j作为下标的值,i被赋初值为0, j应为 下标的最大值,下标的最大值为数组的长度减1。1.1 a61a6解析:对于指针变量的运算,就是对地址的运算。本题中由于 指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18 个字节。注意,本题是以十六进制输出的。1.3 6 9 123 6 9 12解析:本题考查最基本的for循环。for(cc= 1 ; cc < 5 ; cc+)规定循环次数为4次,每次a+=3,即每次a的值增加3,但因为 fun函数中变量a为static类型,所以每次调用完子函数之后,变量a所 做的改变都要保存。1.8 66B 66解析:字符B的ASCII码值为66,因此,按©形式输出 B,按(1形式输出66,输出结果为:B 66。8.1343113431解析:本题看似考查链表的知识,其实只是考查了结构体 数组。程序首先定义了一个结构体NODE,在主函数中声明了一个该结 构体的数组m5和两个结构体指针p和q,并分别初始化p指向m(指 向数组的第一个元素);q指向m+4(指向数组的最后一个元素)。接下来 定义并初始化一个整型变量i为0。然后用一个while循环。在p和q不 相等的时候执行循环体:让P所指结构体