1、一、选择题(每小题1分,共40分)1单选题有以下程序(注:字符a的ASCH码值为97):#includemain()Icharabcw;doIPrintf(%d,8%IO);while(a);I程序运行后的输出结果是()。A. 789B. abeB.abeC. 7890D.参考答案:A参考解析:因为小写字符a,b,C的ASCIl码值分别为97,98,99,而在domhile循环语句中,每次对字符的ASCil码值取余数并输出,所以分别输出7,8,9。E. 单选题有以下程序:*includentf(intx,inty)Iretum(y-x)x);:main()ini=3.b=4,c=5,d;d=f
2、a,b).f(.c);printf(%dn,d);I程序运行后的输出结果是()0B. 10C. 8D.9参考答案:D参考解析:调用f(a,b)函数返回3,调用f(a,C)函数返回6,所以外层调用f(f(a,b),f(a,c);即调用f(3,6)函数返回9。D. 单选题下面叙述中错误的是()。A,软件测试的目的是发现错误并改正错误B.对被调试的程序进行“错误定位”是程序调试的必要步骤C.程序调试通常也称为DebUgD.软件测试应严格执行测试计戈I,排除测试的随意性参考答案:A参考解析:软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,所以选项A错误。程序调试的基本步骤有:错误定位
3、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。程序调试通常称为DebUg,即排错。软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计戈J,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。4单选题以下关于结构化程序设计的叙述中正确的是()B)1.2.3。1,口口02.口匚1口3(回车D)l23ABCD参考答案:D参考解析:SCanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以逗号必须输入。6单选题以下四个程序中,完全正确的是()。B ) *includ
4、e main()I / programming * Z printf( programming! D ) include nain()I / * PrOgramnUng / printf( , PrograInmiM JA)WinciudcMmain();/programming/Zprintf(programming!no);,C)Winclutlemain()/PrUgramming/printf(programming!nM);ABCD参考答案:B参考解析:C语言中注释语句的注释方法是:/*注释内容*/或注释一行。所以A与C错误,D选项中预编译命令indade前丢掉了“#号。所以选择7单
5、选题算法的空间复杂度是指()oA.算法在执行过程中所需要的计算机存储空间B.算法所处理的数据量C.算法程序中的语句或指令条数D,算法在执行过程中所需要的临时工作单元数参考答案:A参考解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A08单选题有以下程序:Aincludcvoidfun(in(a.ntb)Iinttjt=a=b;b=t;Imain()Iinic10=11,2,3,4,5.6.7.8,9.0,i;for(i三0;i10;i+=2)fun(cilci1.);for(i=OjiIO;i)printf(-%d,tci)tprintf(n,);程序运行后的输出结果是()
6、A. 1,2,3,4,5,6,7,8,9,0,B.2,1, 4,3, 6,5, 8,7, 0, 9,C.0, 9, 8,7, 6,5, 4, 3, 2,1,D.0,1, 2, 3, 4, 5, 6,7, 8, 9,参考答案:A参考解析:函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参而不能把形参的值反向地传送给实参。因此在函致调用过程中,形参的值发生改变,而实参中的值不会变化,所以数组C中的元素的值并没有变化,选择鼠9单选题若变量x,y已正确定义并赋值,以下符合C语言语法的表达式是()0A.x+l=yB.+x,y=xC. x=z+10=z+yD. double(x)10参考答案:
7、B参考解析:A选项中不能将变量Y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x10E. 单选题若有以下函数首部:intfun(doublex10.inin)则下面针对此函数的函数声明语句中正确的是()。A)intfun(=2.c;c=aA(b2);执行后,C的值为()。A. 7B. 9C. 8D.6参考答案:B参考解析:b为2,二进制为OOOOOOlO,执行左移两位操作后为OOoOIO00,然后与aOOOoOOOl做异或操作结果为00001001,即十进制的9。12单选题数据库应用系统中的核心问题是()。A,数据库设计B.数据库系统设计C.数据库维护D
8、数据库管理员培训参考答案:A参考解析:数据库应用系统中的核心问题是数据库的设计。13单选题以下定义语句中正确的是()。includemain()Iinic0,k;for(klik3jk)*wikh(k)Idefault:c=k;case2:c*:break;CaS4:c三2;break;(printf(%d11,c);ABCD参考答案:B参考解析:A选项语句中b变量还没有定义不能直接用于给a变量赋值。c选项语句中*b、*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。14单选题下列叙述中正确的是()。A.在SWitCh语句中,不
9、一定使用break语句B.在switch语句中必须使用defaultC.break语句必须与switch语句中的case配对使用I).break语句只能用于switch语句参考答案:A参考解析:default语句在SWitCh语句中可以省略,所以B错误;SWiteh语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。15单选题对于一个正常运行的C程序,以下叙述中正确的是(),A.程序的执行总是从main函数开始,在程序的最后一个函数中结束B.程序的执行总是从程序的第一个函数开始,在main函数结束C.程序的执行总是从main函数
10、开始D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束参考答案:C参考解析:任何一个C程序都是从主函数main开始,至主函数main结束,所以选择c选项。16单选题有以下程序:)chare;s三Olympic;B)char7;=Oiympico;C)Char&;=J*(B)Tnpic*I;D)char7s=iOlympicIj程序运行后的输出结果是()oA.7B. 5C. 3D.9参考答案:C参考解析:向SWitCh语句块传送参数后,编译器会先寻找匹配的CaSe语句块,找到后就执行该语句块,遇到break跳出;如果没有匹配的语句块,则执行default语句块。CaSe与def
11、ault没有顺序之分。所以第一次循环k的值为1,执行c+=k,C的值为1,再执行case2后的语句c+,C的值为2,遇到break语句跳出循环;第二次循环k的值为2,执行case2后面的语句c+,C的值为3,跳出循环。17单选题以下定义数组的语句中错误的是()。A. intnum3=1,2,3,4,5,6);B. intnum24=1,2,(3,4,5,6;C. intnum=l,2,3,4,5,6;D. inthum4=l,2,3,4,5,6;参考答案:B参考解析:B)选项中定义的数组为2行4列,而赋值时赋成了3行所以出错。18单选题下列语句组中,正确的是()chare;e三Olympic;
12、B)char7;=Olympic1*;C)char;s=JOlympic-;D)chars7;=i-Olympic0IjABCD参考答案:A参考解析:字符型指针变量可以用选项A的赋值方法:Char*s;s=01ympic,选项C的写法:Char*s,s=01ympic;是错误的。字符数组可以在定义的时候初始化:Chars=Olympic;?或者CharS口=01ympic”,都是正确的。但是不可以在定义字符数组后,对数组名赋值。(数组名是常量,代表数组首地址)所以选项B和选项D都是错误的。对于本例,选项B、D中字符数组8的大小至少为8,才能存放下字符串。(字符串的末尾都有结束标识0)。19单选
13、题以下关于typedef的叙述错误的是()。A.用typedef可以增加新类型B. typedef只是将已存在的类型用一个新的名字来代替C.用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A参考解析:typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强程序的可移植性。所以A选项错误。20单选题在E-R图中,用来表示实体联系的图形是()。A.椭圆形B.矩形C,菱形D.三角形参考答案:C参考解析:在E-R图中实体集用矩形,属性用椭圆,联
14、系用菱形。21单选题有以下程序:inclieWincluieIyprdefMruct;charname9;charsex;inicorr2;STU;STUf(Sa)STUb=I-Zluwo.m.85,90:;inii;strcpy(a.name,b.name);a.sex=b.sex;fbr(i=0;i2;+)a.ScOrei-b.scorei;returna;Itnain()ISTUc=:,Qian*tT,.95,92I,d;d=f(c):Primf(,%sf%c.%d,%d,d.name.d.ex,m 85, 90, ZhaO, m, 85, 90C. Qian,f, 95, 92, Qi
15、an,f, 95, 92D. Qian,f,95,92,ZhaO,m,85,90参考答案:A参考解析:本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量C在栈中的一个拷贝,函数f所做所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量C的值。22单选题耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是()。A.提高耦合性降低内聚性有利于提高模块的独立性B.降低耦合性提高内聚性有利于提高模块的独立性C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度D.内聚性是指模块问互相连接的紧密程度参考答案:B参考解析:模块独立性是指每个模块只完成系统
16、要求的独立的子功能,并且与其他模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以A错误,B正确。耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部各个元素问彼此结合的紧密程度,所以C与D错误。23单选题以下不能输出字符A的语句是()。(注:字符A的ASCH码值为65,字符a的ASCn码值为97)A)printf(%cnw,-32)jB)Printf(%dn-t,A);Oprintf(,%cn.65);D)printf(,%c*B-I);ABCD参考答案:B参考解析:B选项输出的格式为%d
17、即为整型格式,所以输出字符A的ASCIl码值65,而不是字符A。由于大写字母比与其对应的小写字母的ASCIl码值小32,所以A正确。字符A的ASCIl码值就是65,所以以%c格式输出可以输出字符A,所以C正确。由于字符A的ASeIl码值比字符B的小1,所以D正确。24单选题有以下程序:Wincludeintn()staticini=1jx三I;returnx;rmain()Iinti.sI;or(i=l;i三5j)s=fin();winlf(%dn,.8)tI程序运行后的输出结果是().120B.11C. 6D.21参考答案:D参考解析:fun函数中的变量X为静态局部变量,占用固定的内存单元
18、下一次调用时仍可以保留上次调用时的值。也就是说,如果多次调用fun函数,S的定义只在第一次调用时有效,从第二次调用开始,X的定义相当于不存在,直接使用上次X的值。fun函数被调用了5次,每次调用后的返回值累加到S上。5次调用后,X的值为6,s的值为1+2+3+4+5+6=21o因此D选项正确。25单选题软件设计中划分模块的一个准则是(),A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合参考答案:B参考解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。26单选题有以下程序:#includeRtructS:i
19、ntn;nta20;voidf(structSp)nti,j.t;far(i三O;in-I;i)for(j三i1;jn;j)If(P-三i-aj)It=P-ai:p-aj;=p-j;P-j=;Imain()!mlistructSs*IIOt2,3J.6.8,7,5.4.10.9f(*);for(i=0;is.n;i+)Printf(%dJ,s.ai)j程序运行后的输出结果是()oA. 2,3,1,6,8.7,5,4,10,9,B. 10,9,8,7,6,5,4,3,2,1,C. 1,2,3,4,5,6,7,8,9,10,D. 10,9,8,7,6,1,2,3,4,5,参考答案:C参考解析:本题
20、的子函数f的功能是对结构体变量8中第二个成员数组中所有的数据进行从小到大的冒泡排序,所以结果是C。27单选题有三个关系R、S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为()。A.选择B.投影C.交D.并参考答案:D参考解析:关系T中包含了关系R与S中的所有元组,所以进行的是并的运算。28单选题有以下程序:Wincludemain()Iinii,8=0,1.2.3.4S6,7.8.9hfor(i=0ji9ii=2)s*三(t+i);printf(%dn,.);I程序执行后的输出结果是()。A. 20B. 25C. 45D. 36参考答案:B参考解析:统计19九个数中的奇数和,此题考
21、察指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。程序运行的结果是1+3+5+7+9=25。E. 单选题下列数据结构中,能够按照“先进后出”原则存取数据的是()。.循环队列F. 栈C.队列D.二叉树参考答案:B参考解析:栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。30单选题以下叙述中错误的是()。A. gets函数用于从终端读入字符串B. getchar函数用于从磁盘文件读入字符C.fput,函数用于把字符串输出到文件D.fwrite函数用于以二进制形式输出数据到文件参考答案:B参考解析:本题考查字符处理函数
22、和文件操作函数,属于基础知识,其中B选项getehar函数是用于从终端读入一个字符。31单选题有以下程序:MmcludedefineS(X)4(x)xImain()Iintk三5.j=2;phntf(*dn-,S(k*j);I程序运行后的输出结果是()oA. 33B. 197C. 143D. 28参考答案:C参考解析:本题考查带参数的宏定义,S为带参数的宏定义,运行S(k+j)为4*(k+j)*k+j+l=143,选项C正确。32单选题以下选项中能表示合法常量的是()。A. 1,200B. 1.5E2.0C. ,D. 007”参考答案:D参考解析:A选项中整型常量应表示为1200,不能包含“,
23、B选项中E后面的指数必须为整数。C选项中转义字符以“”开始,若要表示字符应写为“”。E. 单选题设有如下函数定义:Wincludeintfun(intk)Iif(k1)return0;elseif(k=I)returnIJelsereturnfun(k-i)+IjI若执行调用语句“n=fun(3);,则函数fun总共被调用的次数是()。A.2B.3C.4D.5参考答案:B参考解析:首先n=fun(3),3被当作参数传递进去,这就进行了一次调用,3被当作参数传进去后,程序会执行这句elsereturnfun(kT)+l;这就调用了第二次,而参数是3T也就是2。2被当作参数传进去后,程序会执行
24、这句elsereturnfun(kT)+l;这就调用了第三次,而参数是2-1也就是1。1被当作参数传进去后,程序会执行这句elseif(k-l)return1;不再递归调用,所以最终结果为3次。34单选题若有定义语句:chars10=00”;则StrIen(三)的值是()。A.7B.8C.9D.10参考答案:A参考解析:StrIen()函数在计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中字符串,从第一个字符开始,遇到第一个结束标识0为止,注意0不占字符串长度,所以字符串长度为7。因此A选项正确。35单选题C源程序中不能表示的数制是()。A.十六进制B.八进制C.十进制D.二进
25、制参考答案:D参考解析:在C语言中整型常量可以用十进制、八进制和十六进制等形式表示,但不包括二进制,所以选择D。36单选题若有以下定义:加x10.p=;则对X数组元素的正确引用是()。A.pt+3B. *&x10C. *(pt+10)D.*(x+3)参考答案:D参考解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误,最大只能引用到x9。*(pt+i)表示引用指针Pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9).因此D选项正确。37单选题有以下程序:“indudevoidfun2(chara.charb)printf(n%c%c,a,b)sIchara=*A,
26、b=*B;Voidfunl()Ia三V5b三T),Iman()Ifunl();rintf(,%r%c.a.b);fun2(E.T);I程序运行后的输出结果是()oA. ABEFB. CDEFC. ABCDD. CDB参考答案:B参考解析:本题考察的是变量的作用范围。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即不起作用。本题中,在科111()和碉行0函数内访问的是全局变量a和b,在fun2()函数中访问的是形参变量a和b。所以,main()函数中的Printf()函数输出的是在funl()函数中被改变的全局变量a和b的值C、D,而fun2()函数
27、中输出的是传递给它的实参值E、F。因此B选项正确。38单选题有以下程序:*includemain()Iinix32=0,“for(i0;i,则输出结果为()oA. 204B. 200C. 240D. 246参考答案:A参考解析:奉题中输入的3个数据2,4,6分别赋值给了x00,xl0,x20ox0l仍为初始时的0,所以打印输出时的结果为A选项。39单选题设有定义:inta=l,b=2,e=3;以下语句中执行效果与其他三个不同的是()。A. if(ab)c=a,a=b,b=c;B. if(ab)e=a,a=b,b=e;C. if(ab)e=a;a=b;b=C;D. if(ab)c-7-a;a=b
28、b=e;参考答案:C参考解析:由于a小于b,所以所有选项中的条件都为假,c选项中实际执行了a=b;b=c;两个操作。而A、B、D选项由于条件不成立.所以什么也没有做,所以选择C选项。40单选题软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A.编译程序B.操作系统C.教务管理系统D.汇编程序参考答案:C参考解析:编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。二、程序填空题(共18分)41填空题下列给定程序中,函数fun的功能是进行数字字符转换。若形参Ch中是数字字符09,则将0转换成9,t转换成8,2转换成7,9转换成0
29、若是其他字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!tfimlude/*found*(1Jfun(CharCh)I*foundif(ch=,&(21)/*foundreturn9,-(ch-13);returnch;main()Icharcl,c2;printf(,nThrrrnull:n):cl=2,;c2三(un(l);printf(cl=%cc2=%cn,cl,c2);c!=8;c2三fun(cl);printf(cl=%cc2=%c
30、n,cl,c2);cl=a,jc2三fun(ci);printf(cl=%cc2=%cn,cl,c2);参考解析:【参考答案】(I)Char(2)eh=9,(3),0,【考点分析】本题考查:函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为“return表达式;”。【解题思路】填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型,所以此处应该填Char0填空2:通过if条件语句判断字符串中字符是否是数字字符,既大于等于字符0,同时小于等于字符9。填空3:return语句完成函
31、数返回操作,要实现字符转换,应填入return*9,-(ch,0,)。【解题宝典】有参函数定义,其一般形式为:类型标识符函数名(形式参数表列)声明部分语句在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参列表中给出类型说明。三、程序修改题(共18分)42简答题下列给定程序中,函数fun的功能是:读入一个字符串(长度20),将该字符串中的所有字符按ASCn码值升序排序后输出。例如,若输入“cdcba,则应输出rtabcde,请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文
32、件MODILC中,不要改动Inain函数,不得增行或删行,也不得更改程序的结构!试题程序:include21includeIvoidfun(chart)charc;intirj;/*found/for(i三strlen(t);i;i-)for(j三0;ji;j+)/*found*/if(tjtj1)c=tj;tj-tj1;tj1-c;main()(chars81;printf(,nPleaseenteracharacterstring:w);gets(s);printf(wnnBeforesorting:n%s,s);fun(s);printf(wXnAftersortingdecend-in
33、gly:n%s,s);)参考解析:【参考答案】(1)fr(i=strlen(I)-1;i;i)或for(i三lrlen(t)I;i0;i-)(2)if(tj:tfj+1)【解题思路】(1)本题是利用选择法对数组元素进行比较排序。所谓选择法,是依次用当前取得的元素和其后面的元素进行比较,在第一个元素和其后面的元素顺次比较时,可以借助中间变量来对两个数进行交换,要保证第一个元素始终存放数组中的最大数,以后依次挑选出次大数,这样最终的数组就是有序的。StrIen函数所求得的字符串长度包括字符串结束符,所以要减1。(2)这里是一个分析逻辑错误,题中要求按升序排序,所以应改为if(tfjjl)四、程序设
34、计题(共24分)43简答题m个人的成绩存放在SCOre数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当SCOre数组中的数据为10、20、30、40、50、E70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。注意:部分源程序在文件PROGLC中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。!includeinclude试题程序:!include!includeintfun(Intscore,intm,below)9voidmain
35、)(FILEwf;inti,n,below9;intscore9三10,20,30,50,60,70,80,90”system(CLSm);n-fun(score,9,below);printf(nBelowtheaverscoreare:;(for(i三0;in;i+)printf(n%dw,belowi);/wf=fopen(,out.datzww);for(i-0;in;i+)fprintf(wfrM%dM/belowi-fclose(Wf);/*/)参考解析:【参考答案】jmtfun(itscorelintmzintbe-low)2 (3 inti,j=0;4 floatav=0.0;5 for(i=0;im;i+)av-av+scorein;/*求平均值”/for(i-0;im;i+)if(scoreiav)*如类分数低于平均分,则将此分数放入below教组中*/belowj+-scorefi;returnj;/*返回低于平均分的人a*/【解题思路】要计算低于平均分的人数,首先应该求出平均分,然后通过for循环语句和if条件语句找出低于平均分的分数。该题第1个循环的作用是求出平均分av,第2个循环的作用是找出低于平均分的成绩记录并存入below数组中。