2007年9月计算机等级考试二级C语言考前密卷及答案2
2007年9月计算机等级考试二级C语言考前密卷及答案(二)一、选择题(1)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为 A)log2n B)n2 C)O(n1.5) D)n(n-1)/2(2)算法分析的目的是 A)找出数据结构的合理性 B)找出算法中输入和输出之间的关系 C)分析算法的易懂性和可靠性 D)分析算法的效率以求改进(3)线性表L=(a1,a2,a3,…ai,…an),下列说法正确的是 A)每个元素都有一个直接前件和直接后件 B)线性表中至少要有一个元素 C)表中诸元素的排列顺序必须是由小到大或由大到小 D)除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件(4)在单链表中,增加头结点的目的是 A)方便运算的实现 B)使单链表至少有一个结点 C)标识表结点中首结点的位置n D)说明单链表是线性表的链式存储实现(5)软件工程的出现是由于 A)程序设计方法学的影响 B)软件产业化的需要 C)软件危机的出现 D)计算机的发展(6)软件开发离不开系统环境资源的支持,其中必要的测试数据属于 A)硬件资源 B)通信资源 C)支持软件 D)辅助资源(7)在数据流图(DFD)中,带有名字的箭头表示 A)模块之间的调用关系 B)程序的组成成分 C)控制程序的执行顺序 D)数据的流向(8)分布式数据库系统不具有的特点是 A)数据分布性和逻辑整体性 B)位置透明性和复制透明性 C)分布性 D)数据冗余(9)关系表中的每一横行称为一个 A)元组 B)字段 C)属性 D)码(10)下列数据模型中,具有坚实理论基础的是 A)层次模型 B)网状模型 C)关系模型 D)以上3个都是(11)以下叙述不正确的是 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面(12)在C语言中,int,char和short三种类型数据在内存中所占用的字节数 A)由用户自己定义 B)均为2个字节 C)是任意的 D)由所用机器的机器字长决定(13)以下叙述正确的是 A)在C程序中,每行中只能写一条语句 B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 C)在C程序中,无论是整数还是实数,都能被准确无误地表示 D)在C程序中,%是只能用于整数运算的运算符(14)C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符 A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母,数字和下划线中任一字符(15)已知各变量的类型说明如下: intk,a,b; unsignedlongw=5; doublex=1.42; 则以下不符合C语言语法的表达式是 A)x%(-3) B)w+=-2 C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3)(16)x,y,z被定义为int型变量,若从键盘给x,y,z输入数据,正确的输入语句是 A)INPUTnx、y、z; B)scanf("%d%d%d",&x,&y,&z); C)scanf("%d%d%d",x,y,z); D)read("%d%d%d",&x,&y,&z);(17)设x、y均为整型变量,且x=10y=3,则以下语句的输出结果是 printf("%d,%d\n",x--,--y); A)10,3 B)9,3 C)9,2 D)10,2(18)以下程序的输出结果是 main() {inta=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\n",d);} A)1 B)0 C)非0的数 D)-1(19)执行下列程序时输入:123<空格>456<空格>789<回车>输出结果是 main() {chars[100];intc,i; scanf("%c",&c);scanf("%d",&i);scanf("%s",s); printf("%c,%d,%s\n",c,i,s);} A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456(20)下面有关for循环的正确描述是 A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体 D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来(21)以下程序的输出结果是 main() {inti,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<3;j++) {nif(j%2)continue; x++; } x++; } printf("x=%d\n",x); } A)x=4 B)x=8 C)x=6 D)x=12(22)设有以下程序段 intx=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次(23)对下Ⅰ,Ⅱ两个语句描述正确的是 Ⅰ.while(1)Ⅱ.for(;;) A)都是无限循环 B)Ⅰ是无限循环,Ⅱ错误 C)Ⅰ循环一次,Ⅱ错误 D)以上答案都错(24)若有以下定义,则能使值为3的表达式是 intk=7,x=12; A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5)(25)设有: inta=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b)&&(n=c>d)后n的值是 A)1 B)2 C)3 D)4(26)以下描述中正确的是 A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C)在do-while循环体中,是先执行一次循环,再进行判断 D)do-while循环中,根据情况可以省略while(27)以下函数返回a所指数组中最小的值所在的下标值 fun(int*a,intn) {intni,j=0,p; p=j; for(i=j;i
next=&b; D)(*p).next=q;(41)下面程序的输出结果是 structst {intx; int*y; }*p; intdt[4]={10,20,30,40}; structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() {p=aa; printf("%d\n",++p->x); printf("%d\n",(++p)->x); printf("%d\n",++(*p->y));} A)10 20 20 B)50 60 21 C)51 60 n21 D)60 70 31(42)下面程序的输出结果是 #include #include main() {char*p1="abc",*p2="ABC",str[50]="xyz"; strcpy(str+2,strcat(p1,p2)); printf("%s\n",str);} A)xyzabcABC B)zabcABC C)xyabcABC D)yzabcABC(43)以下程序的输出结果是 longfun(intn) {longs; if(n==1||n==2)s=2; elses=n-fun(n-1); returns;} main() {printf("%ld\n",fun(3));} A)1 B)2 C)3 D)4(44)以下所列的各函数首部中,正确的是 A)voidplay(var:Integer,varb:Integer) B)voidplay(inta,b) C)voidplay(inta,intb) D)Subplay(aasinteger,basinteger)(45)不合法的main函数命令行参数表示形式是 A)main(inta,char*c[]) B)main(intarc,char**arv) C)main(intargc,char*argv) D)main(intargv,char*argc[])(46)有如下程序 main() {charch[2][5]={"6937","8254"},*p[2]; intni,j,s=0; for(i=0;i<2;i++)p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>′\0′;j+=2) s=10*s+p[i][j]-′0′; printf("%d\n",s);} 该程序的输出结果是 A)69825 B)63825 C)6385 D)693825(47)以下程序的输出结果是 unionmyun {struct {intx,y,z;}u; intk;}a; main() {a.u.x=4;a.u.y=5;a.u.z=6; a.k=0; printf("%d\n",a.u.x);} A)4 B)5 C)6 D)0(48)以下程序的输出结果是 main() {charx=040; printf("%o\n",x<<1);} A)100 B)80 C)64 D)32(49)C语言中,系统的标准输入文件是指 A)键盘 B)显示器 C)软盘 D)硬盘(50)下面的程序执行后,文件test中的内容是 #include voidfun(char*fname,char*st) {FILE*myf;inti; myf=fopen(fname,"w"); for(i=0;i fclose(myf);} main() {fun("test","newworld");fun("test","hello,");} A)hello, B)newworldhello, C)newworld D)hello,rldn二、填空题(1)在算法正确的前提下,评价一个算法的两个标准是【1】。(2)将代数式Z=x2+y2a+b转换成程序设计中的表达式为【2】。(3)软件危机出现于60年代末,为了解决软件危机,人们提出了【3】的原理来设计软件,这就是软件工程诞生的基础。(4)【4】是数据库设计的核心。(5)在关系模型中,把数据看成一个二维表,每一个二维表称为一个【5】。(6)以下程序段的输出结果是【6】。intx=17,y=26;printf("%d",y/=(x%=6));(7)关系表达式x(8)若有如下定义,double a[100];则a数组元素的下标上限是【8】。(9)下面程序的输出结果【9】。main(){enumteam{y1=4,y2,y3};printf("%d",y3);}(11)若有以下程序段:intc1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是【11】。(12)若有以下定义:chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为【12】。(13)设有代码“staticinta[3][4]={{1},{2},{3}};”,则a[1][1]和a[2][1]的值为【13】。(14)以下函数用来在w数组中插入x。n所指向的存储单元中存放w数组中字符个数。数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。voidfun(char*w,charx,int*n){ inti,p;p=0;w[*n]=x;while(x>w[p])p++;for(i=*n;i>p;ni--)w[i]=【14】;w[p]=x;++*n;}(15)设inta,b=10;执行a=b<<2+1;后a的值是【15】。(16)以下程序的输出结果是【16】。main(){intx=100,a=10,b=20,ok1=5,ok2=0;if(aelseif(ok2)x=10;elsex=-1;printf("%d\n",x);}(17)以下程序的输出结果是【17】。main(){inty=9;for(;y>0;y--)if(y%3==0){printf("%d",--y);continue;}}(18)以下函数的功能是【18】。floatav(a,n)floata[];intn;{inti;floats;for(i=0,s=0;ireturns/n;}(19)以下程序的输出结果是【19】。#define PR(ar)printf("%d,",ar)main(){intj,a[]={1,3,5,7,9,11,15},*p=a+5;for(j=3;j;j--)switch(j){case1:case2:PR(*p++);break;case3:PR(*(--p));}printf("\n");}(20)以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在h所指的数组中注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。请填空。#includen#define N 16typedef struct{charnum[10];int s;}STREC;int fun(STREC*a,STREC*b){inti,j=0,max=a[0].s;for(i=0;i8、999、611、012、double或双精度13、0 014、w[i-1]15、8016、-117、85218、求出数组元素n19、9,9,11,20、max==a[i]