2021年陕西省安康市全国计算机等级考试C语言程序设计预测试题(含答案).docx
2021年陕西省安康市全国计算机等级考试C语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、2.填空题(10题)1 .下面程序运行后的输出结果是()。#include < stdio.h >main()int a=l,2,3,4,5,6,*k3,i=l;while(i < 4) ki-l=&a2*i-l;printf(n%dn,*ki-l);i+;)2 .下面程序的运行结果是【】。main() unsigned a=0112,x;x=a > > 3;printf(nx=%on,x);)3 .栈的3种基本运算是:入栈、退栈和。4 .一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体 集,项目主管,与实体集,项目,的联系属于的联系。例如字符串中的内容为A BC e DEF C » 二副除后字符串中的内容应当 是 ABCDEFG,注童:部分源程序在文件PR0G1.C中.请勿改动主函数main和其他函数中的任何内容.仅在函数fun的花括号中填入你编写的若干语句。tindude < stdio. h >void fun(char a)main()| char t81 ;void NONO(); printf( * Enter a string: n" ) ;gete( s);printf( "The string after deleted:nw ) ;pute(8); NONO();I void NONO() 1/本丽数用于打开文件,输入数据.调用函数,输出数据,关闭文件,/FILE in. out; int i;char s81 ( in = fopeii( "H dalRt"r"); out =£open("out da!* / w* ); far(i sO;i < 10;i ) Ivintf(out9M%5nMt») ll ' 一 fidoae(ui); fckae(aat);I25.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、 同时ASCII码值为奇数的字符外,其余的字符都删除,串中剩余字符 所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的 内容为ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素 的下标为奇数,因此必须删除;而字符A的ASCII码值为奇数,所在 数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数 组中的内容应是ACEG。注意:部分源程序给出如下。请勿改动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("%S", str);proc(str, t);printf("nThe result iS: %sn", t);26.使用VC+2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,函数fmi()的功 能是将a、b中的两个正整数合并成一个新的整数存放在c中。合并的 方式是将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,a=45, b=12,调用该函数后,c=5241o 注意:部分源程序在文件progl.c中。请勿改动main()函数和其他函数 中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。 试题程序:11 tinclude < stdio.h >自取 void fun (int a, int b, long * c) 鹭5 6 main () int a,b; long c;void NONO ();I 8 printf(nInput a, b:n);9scanf(M%d%dMr &a, &b);)0fun (a, b, &c);1£ printf (°The result is: %ldnnf c);簿 NONO();霎14 void NONO ()15 /本函数用于打开文件、榆入数据、调用函数、输出数据及关闭文件。* / 遹; FILE rf, wf ;int i, a,b ; long c ;劣8? rf = fopen (Min>dattt/Hrn);19 wf = fopen(Hout.datMrnwn);S ford = 0 ; i < 10 ; i + ) 21fscanf (rffM%dr%dt &a, &b);MM fun (a, b, &c);fprintf(wfrHa »%d/b =%drc =%ld蒙 n”,a, b, c);H )城fclose (rf);126fclose(wf);验)27.下列程序定义了 MxM的二维数组,并在主函数中赋值。请编写函数proc(),函数的功能是:求出数组周边元素的平均值并作为函数值返回给 主函数中的s。例如,若a数组中的值为: *012345974S4S814a56B721 098则返回主程序后,s的值为3 . 750000o注意:部分源程序给出如下。请勿改动main ()函数和其他函数中的任何内容,仅在函数proc0的花括号中填入所编写的若干语句。试题程序:S mcltMieb>£ mclude Ccomo. h> M mdudch>,define M 5 double proH mt 二 M1mH mjiinC >isit3工3.«3$明WU i« ji dcnible >iprimfC* Th» array nfor (ia0i YMi)for “,OajVMij* 4)< printf( ' K 4d "3j) a > pnmrf("ti *>i proc(A> ipnmfC THE RESULT > W prwtf(*Thr sum i«t lfn *«>>28 .请编写函数 proc , 它的功能是计算 s=(In(l)4+ln(2)4+ln(3)+. .+In(m)O . 5在C语言中可调用log(n)函数求ln(n)0例如,若m的值为30,则proc函数值为8 . 640500o注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号 中填入所编写的若干语句。试题程序:#include<stdlib . h>#include<conio . h>#inclllde<stdio . h>#include<math . h>double proc(int m)()void main(system("CLS");printf("%fn", proc(30);)29 .请编写函数proc(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:1122234 4566667 7 899101010 10删除后,数组中的内容应该是:123 45678910注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:S includeh ,S define M 80mi proc(mi n mivend maint)23.44.5.S.6.6.6.7. 7S3»9»l0«10«l0»10) U 72, pcint( * Tbr ongiMJ <WiAina11 (or(i*0ii >pcint(<# XSd"n, procC iirr»n) i pnt)tl( 9f)fiTlwafter deletedfoHi* 0i Yiu i - + )pcintftt30 .使用VC +2010打开考生文件夹下progl中的解决方案。此解决方 案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(), 该函数的功能是将s所指字符串中ASCII值为偶数的字符删除,字符串 中剩余字符形成一个新字符串并将其存放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG123456",其中字符B 的ASCII值为偶数,字符2的ASCII值为偶数,都应当删除,其他依 此类推。最后t所指的字符串中的内容应是“ACEG135”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花 括号中填入你编写的若干语句。试题程序:#include <stdlib.h>#include <stdio.h>#include < string.h>#include <conio.h>void fun (char * s, char t)()void main ()(chars100,t100;system(“CLS»);printf ("AnPlease enter string s:");scanf ("s's);fun(s, t);printf ("nThe result is : %srT,t);四、2.程序修改题(10题)31 .给定程序MOD11 C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量Xl、x2、x3分别输入15 112,则输出结果应当是:330o123456789101112131415161718192021222324注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。*include <stdioeh>fun (int x, y, z) int jrt ,n ,m;j - 1 ;m«j%y ;n-j%z;while(t!*0I|m!*0|n!«0)( j - j+1;m-j%y;n=j%z; */return i;| main () int xl,x2,x3,j ;printf(wInput xl x2 x3: scanf(w%d%d%dwr &xl,&x2r&x3);printf (f,xlss%dr x2w%dr x3,%d n”, xl,x2rx3);j«fun(xlr x2r x3);printf(wThe minimal common multiple is : %dnnr j);32 .给定程序MODHC中函数fun的功能是 输出M行M列整数方阵, 然后求两条对角线上各元素之和,返回此和数。#inClude < coMo.h >#inClude < stdio.h > #dehne M 5 int fun(int n, int xx) int ij, sum=O ;printf(nn The%dx%d matrix : nnM, M);for(i=0 ; i<M ; i+) for(j=0;j < M;j+)/ 7, 7,7, 7,7" 7" 7" T,7,7,7,"1 7” 7“ 7, 7,7" 7,7" 7,7" 7" 7“ /不小不不不小不小小不不不tciind不小个不不不不不个不不小/printf("%f, xxij);printf("n");)for(i=0 ; i < n ; i+)sum+=xxii+XXin-i-l;return(sum); ) main()int aaMM=l,2,3,4,5), 4,3,2,1,0),678,9,0, 9,8,7,6,5,3,4,5,6,7);clrscr();printf(nn The sum Of all elements On 2 diagnals is %d.nfun(M,aa); )33.下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的 字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0 位中)。例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI0注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < conio.h > #include < stdio.h > #include < string.h > #define N 80/ vl* *1* kL* vl*11*vl* kL* kL*/不不不不不不不不不不不不tm n不不不不不不不不不不不不不/void fun(char s, char t) int i, j=0 ;for(i=0 ; i < strlen(s) ; i+)/ 7,7,7" 7"01 kI> akI>7,/不不不不不不不不不tci i n ri不+不不不不不不不不小不不不/if(i%2=0 | si%2!=0)tj+=si;币='。';)main()(charsN, tN;clrscr();printf(nnPlease enter string s :n);gets(s);fun(s, t);printf(nnThe result is : %snn, t);5 .以下sum 函数的功能是计算下列级数之和。加请给函数中的各变量正确赋初值。double sum( double x, int n ) int i; double a,b,s;for(i=l;i < =n;i+) a=a*x; b=b*i; s=s+a/b; return s;6 .测试用例包括输入值集和【】值集。7 .当数据的物理结构(存储结构)改变时,不影响数据库的逻辑结构,从 而不致引起应用程序的变化,这是指数据的【】。8 .若按功能划分,软件测试的方法通常分为白盒测试方法和测试方9 .在索引查找或分块查找中,首先查找【】,然后再查找相应的【】, 整个索引查找的平均查找长度等于查找索引表的平均查找长度与查找 相应子表的平均查找长度之和。W.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字 符依次存放到该文件中,用#作为结束输入的标志,请填空。#include < stdio.h > 34.下列给定程序中函数fun()的功能是;从低位开始取出长整型变量s 中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数为 4576235时,t中的数为4725。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include < stdio . h > #include < conio . h >/1 1*/不不不不不不不不不不不不tci n不不不不不不不不不不不不不/int fun(long S, long *t) long si =10 ;while(s > 0)/ vt* vt* vt* kL* vl* vt# vt* vl*£*I *X*vt* *1* *X* *X* *1* *X*/不不不不不不不不不不不不不ci inI不不不不不不不不不不不不不/s=s%100 ;*gS%10*Sl+*t ;sl=sl*10 ;) main() long S, t ;clrscr();printf(nnPIease enter S :n);scanf("kT',&s);fun(S, &t);printf("The result is : %ldrT, t); )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 >/kL* kI*1kI> /个个个个个个个个个不个个个个Tcnnc/个个个个个个个个个个个个个个个个个/#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); /K.f>7,i*1k£>k£>/不小不不不不不不不不不不小tcii nd不不不不不不不不不不不不不不不不不不/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 sum); )36.给定程序MODH . C中函数fun的功能是:用下面的公式求兀的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:X t1 1 1 I » + »+ 43 5 7例如,程序运行后,输入0 . 0001,则程序输出3 . 14140请改正程序中的错误,使它能输出正确的结果。注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!234567891011121314151617finclude <math.h> tinclude <stdio.h> float fun (float num) int s ;float n, t, pi ; t - 1 ; pi - 0 ; n*found育 while (t >= num)3 - -S ;*found* t « s % n ;pi « pi * 4 ;return pi ;18 ; 19 i main (J20 ; (21 22 ;23 :24 j25 float nl, n2 ;printf(wEnter a float number:w);scanf (°%f,&nl);n2 fun(nl);printf(w%6.4fnw, n2);37 .下列给定程序中,函数fun()的功能是:从字符串s中,删除所有小写字母c'。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:# include < stdio.h > void fun(char *s)int ij;for(i=j=0; si != '0'i+)if(sill != 'c')/si*/ /S j =S i;/ 7" 7" 7" 7,7" 7" 7" 7,7,7,7" 7" 7"。1 7” 7,7, 7,7" 7,7" 7, 7* 7,7,/不小不不不小不不个不不不不不tciinri个不不不不不个不小不小不不/si='0'main () char s80;printf (HnEnter a string:");gets (s);printf(nThe original string:")puts (s);fun (s);printf(nThe string after deleted: ");puts (s); printf (nnn "):38 .给定程序M0D11 . C中函数fun的功能是:统计substr所指子字符 串在str所指字符串中出现的次数。例如,若字符串为aaas Ikaaas,子字符串为as,则应输出2。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!23456789101112linclude <stdio.h> int fun (char *str#char *substr) int ir krnum«0;/"oundf /for (i - 0, stri9 i+)for (k«0; substr k) Mstr (j ; kf *)/foundfm / If(substrk>l-101) (num+;break; return num;13 ; )151617181920212214 ! mainOchar str80,substr80;printf("Input a string:w);gets(str);printf(wInput a substring:w);gets (substr);printf(w%dnwr fun(strrsubstr);39 .下列给定程序中,函数fun()的功能是计算并输出high以内的素数 之和。high由主函数传给fun()函数。若high的值为100,则函数的值 为 1060o请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include < conio.h >#include < stdio.h >int fun(int high) int sum=O, n=0, j, yes ;while(high > =2) yes=l ;for(j=2 ; j < =high/2 ; j+)/ 7, 7,7" 7"7" 7" 7"7,7,7, 7,1 7,7, 7,7,7, 7" 7* *1> 7" 7" 7" *>!> 7,/不小不不不小不小个不不小不tci nd不个不小小不个个不小小小个不/ifhigh%j=O yes=O ;break ;)/vl*kL*1 vl* kL*/不不不不不不不不不不不不不tciinrl不不不不不不不不不不不不不不/if(yes=O) sum+=high ;n+ ;)high-;)return sum ;) main()(clrscr();printf(n%dnn, fun(lOO); )40 .下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include < stdio . h > #include < conio . h >void fun(char*S)(inti, j ;for(i=0, j=0 ; si! =,0,; i+) /* found */ if(si > =W&&si < ='Z')&&(si > = 'a'&&Si < ='z',) sj+=si;/* *!sj="O" ;) main()(char item80;clrscr();printf("nEnter a string :");gets(item);printfnnThe string is : %Snn, item);fun (item);printf(HnnThe string of changingis : %Snn, item);五、程序改错题(2题)41 .下列给定程序中,函数proc()的功能是:对M名学生的学习成绩, 按从高到低的顺序找出前m(mWO)名学生来,并将这些学生数据存放 在一个动态分配的连续存储区中,此存储区的首地址作为函数值返 回。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结 构。试题程序:3 tficlude VadhlK hj> mcludr <cgio«s include VanniU h>* mcludc Vnidi<x h>3 include < mdloc. h>9 drfine M IOlypedef Mrurt char num lOj iUHSTUiSTU proc(STU *】m)STU bM. “Uit i» fouvul t - rallocC tn Micof (STU ) ) i(orj-OiYMsl )/ (oond t(k . eutn ii J. num abGlt*Oiret uni 11votd outre»uh<STU *.FILE pf>mi uFor(i - Oir< Mii > > fpcistfCpG *No* :; Mrk 小一 “i工.i4m. J. .)i fpnnvK|>(*1ivoid mam()STU 7u(M乂Aot 8n.(*A02 U9 ( Au3 .,6.A<M 'B7).AO5 .7力(eAOfi 刈.LA07 *.7»KCA0« Fl). (*A09 e.«0h(*Al0 *.7l)hSTU pl irdrFi mi, mi sy*tem( *CLS* ) | THE RESULT OutFmullC Mu stdout) i prmt( *n<>«vr thr nwraibet o/ ihe who haTT better «corj >>1 cmI( &<*). whale(fniO)peimf( Vn<ftve the number ol tbc <ludrfil» who ha me better score > >i scaaf( - %d.&tn) ipOrder *proc<»tti«m>4 pnniR* THE RESULT n*)e pnmffTlte top An" H loc(i(Hi< > )pnnif< *K» %dn>»p<>r<irrnum* *rdev( i . i / >nirr > i42 .改正下列程序中不正确的语句。 main() int a;scanf("%d",a); if (a = 1) printf("OnerT); 六、操作题(2题)43 .请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9 整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0. 583333o注意:要求n的值不大于100。部分源程序在文件PROG1. C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括main() FILE *fp;char ch9fname10;printf(nInput the nam nn);gets(fname);if(fp= =NULL)printf(nCannot open'rT); exit(O); printf(nEnter datann);while(ch=getchar()!='#')fputc( ,fp);fclose(fp);)二、单选题(10题)11 .有以下程序:mt fun(mt x) int pl0|rctuni(3)i»*一(1>( A-2 ), rvturn piRMitn()t>nntf< * K dn* (un( ? ) > a)执行后的结果是()。A.7B.3 C.2 D.O12 .若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是()oA.x+l=y B.+ x,y=x C.x=x+10=x+y D.double(x)/1013 .有下列程序:main int y=10;doy; )while(y);号中填入你编写的若干语句。Iinclude <stdio.h> double fun(int n)89101112131415161718192021222324NONO()(/请在此函数内打开文件,愉入测试数据.调用fun函数.辎出数据,关闭文件一 /FILE Wwf; int n, i; double s;rf , fopenin.daL Jr”);wf fopen(wout.datwrMww);for(i , 0 ; 1 < 10 J ifscanf (rf, "W,&n);s fun(n);fprintf(wf/w%lfn*r s);fclose(rf); fclose(wf);)main ()(int n; double s;printf(Hnlnput n: H); scanf(w*dMftn);swfun(n);;print!(Hnns-%fnHfa);! NONOO;44.观察题目要求,可以知道以下几点:参考答案1.2462 .x=llx=ll解析:在对无符号数的右移是高位补°。3 .读栈顶元素读栈顶元素解析:栈的基本运算有3种:入栈、退栈和读 取栈顶元素。其中,入栈是指在栈顶插入一个新的元素;退栈是指取出 栈顶元素并赋值给一个变量;读栈顶元素是将栈顶元素赋值给一个指定 的变量,不删除栈顶元素。4 .一对多一对多解析:实体集“项目主管”与实体集“项目”的联系属于一 对多的联系。5 .a=l ; b=l ; s=l ;或 a=b=s=l ;或 a=l . b=ls=l 或给 abs 赋 1 或 1.0 或 l.a=l ; b=l ; s=l ;或 a=b=s=l ;或 a=l . b=l, s=l 或给 a, b, s 赋 1 或 1.0或1.解析:sum函数的功能是求表达式s的级数之和,该函数的大 致思路是:在该函数中,定义了一个整型变量i用作循环计数器,定义 一个变量a用来表示各个子项的分子,初始为第一个子项的分子,故为 1,定义了一个变量b用来表示各个子项大分母,初始为第一个子项的 分母,故为1,定义一个变量s存放累加和,初始为第一个子项的值即 为1,然后给各个定义的变量初始化,然后通过一个for循环将题目中 的数学表达式的各个子项求出来并累加到s中,所以说,在该题的空格 处应该填写将a、b和s赋初值的语句,即为a=l ; b=l ; s=l :(说明:语 句的顺序可任意)或a=b=s=l ;(说明变量的顺序可任意)或a=l,b=l, s=l (说明:赋值表达式的顺序可任意)给a, b, s赋1或1.0或1都可 以。6 .输出输出解析:测试用例曲测试输入数据(输入值集)和与之对应的预 期输出结果(输出值集)两部分组成。7 .物理独立性数据独立性是数据与程序间的互不依赖性,即数据库中数 据独立于应用程序而不依赖于应用程序。也就是说,数据的逻辑结构、 存储结构与存取方式的改变不会影响应用程序。数据独立性一般分为物 理独立性与逻辑独立性两级。8 .黑盒软件测试的方法有三种:动态测试、静态测试和正确性证明。设 计测试实例的方法一般有两类:黑盒测试法和白盒测试法。在使用黑盒 法设计测试实例时,测试人员将程序看成一个“黑盒”,即不关心程序内 部是如何实现的,只是检查程序是否符合它的“功能说明”,所以使用黑 盒法设计的测试用例完全是根据程序的功能说明来设计的。9 .索弓表块索引表V3块10 .fopen(fname "w") chfopen(fname, 'w')rnch 解析:数组 fname 用来存 放终端输入的一个文件的文件名;文件使用方式W是为写而打开文本文 件。若文件不存在,系统将用在fopen调用中以指定的文件名建立一个 新文件;若存在,则覆盖原有内容;fputs(ch, fp)的功能是将字符ch写到 文件指针fp所指的文件中去。11 .C调用函数fun(7)时,由于x的值为7,执行语句“p=x-fun(x-2);”,相当 于执行 p=7-fun(5);调用函数fun(5)时,由于x的值为5,执行语句“p=x-fun(x-2);”,相当 于执行p=7-fun(3);调用函数fun(3)时,由于X的值为3,执行语句 “p=x-fun(x-2);”,相当于执行p=7-fun(l);调用函数fun时,由于x