2009年9月计算机等级考试二级C语言笔试试题及答案解析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2009年9月计算机等级考试二级C语言笔试试题及答案解析2009年9月全国计算机等级考试二级C语言笔试试题一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)(1)下列数据结构中,属于非线性结构的是(C)A)循环队列B)带链队列C)二叉树D)带链栈(2)下列数据结果中,能够按照“先进后出”原则存取数据的是(B)A)循环队列B)栈C)队列D)二叉树(3)对于循环队列,下列叙述中正确的是(D)A)队头指针是固定不变的B)队头指针一定大于队尾指针C)队头指针一定小于队尾指针D)队头指针可以大于队尾指针,也可以小于队尾指针(4)算法的空间复杂度是指(A)A)算法在执行过程中所需要的计算机存储空间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的临时工作单元数(5)软件设计中划分模块的一个准则是(B)A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(6)下列选项中不属于结构化程序设计原则的是(A)A)可封装D)自顶向下C)模块化D)逐步求精(7)软件详细设计产生的图如下:该图是(C)A)N-S图B)PAD图C)程序流程图D)E-R图(8)数据库管理系统是(B)A)操作系统的一部分B)在操作系统支持下的系统软件C)一种编译系统D)一种操作系统(9)在E-R图中,用来表示实体联系的图形是(C)A)椭圆图B)矩形C)菱形D)三角形(10)有三个关系R,S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为(D)A)选择B)投影C)交D)并(11)以下叙述中正确的是A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整解析:选D。原文见高教版二级教程P2,程序设计的任务包括A、B、c及相关文档。(12)以下选项中,能用作用户标识符的是A)voidB)8_8C)_0_D)unsigned解析:选C。标识符由字母或下划线开头,关键字不能用作标识符。A、D为关键字,B以数字开头,所以都是错误的。(13)阅读以下程序#includestdio.hmain(){intcase;floatprintF;printf(“请输入2个数:”);scanf(“%d%f”,&case,&pjrintF);printf(“%d%f\n”,case,printF);}该程序编译时产生错误,其出错原因是A)定义语句出错,case是关键字,不能用作用户自定义标识符B)定义语句出错,printF不能用作用户自定义标识符C)定义语句无错,scanf不能作为输入函数使用D)定义语句无错,printf不能输出case的值解析:选A。case是关键字,关键字不能用作标识符。C语言关键字见教材附录。(注:标识符区分大小写,printf是关键字,可用作标识符,当然printF也可以)(14)表达式:(int)((double)9/2)-(9)%2的值是A)0B)3C)4D)5解析:选B。考点为运算符的优先级。括号强制类型转换int乘除加减(int)((double)9/2)一(9)%2=(int)(9.0/2)-(9)%2=(int)(4.5)-1=3(15)若有定义语句:intx=10;,则表达式x-=x+x的值为A)-20B)-10C)0D)10解析:选B。考点为复合的赋值运算符。(注意x+x作为一个整体)x-=x+x→x=x-(x+x)→x=-x=-10(16)有以下程序#includestdio.hmain(){inta=1,b=0;printf(“%d,”,b=a+b);printf(“%d\n”,a=2*b);}程序运行后的输出结果是A)0,0B)1,0C)3,2D)1,2解析:选D。考点为赋值表达式的使用,赋值表达式的值和变量的值是一样的。printf在输出赋值表达式的值时,先赋值再输出。b=a+b=l+0=1a=2*b=217)设有定义:inta=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是A)if(ab)c=a,a=b,b=c;B)if(ab){c=a,a=b,b=c;}C)if(ab)c=a;a=b;b=c;D)if(ab){c=a;a=b;b=c;}解析:选C。考点为if句和逗号表达式的使用。逗号运算符也称为顺序求值运算符,依次执行逗号表达式中的每个表选式。逗号表达式是一个整体,复合语句也是一个整体,当ab时,A、B、D中if后的语句可以作为整体被执行,把a、b的值交换。C的等价语句形式为:if(ab)c=a;a=b;b=c;不能实现a、b的值交换。(18)有以下程序#includestdio.hmain(){intc=0,k;for(k=1;k3;k++)switch(k){default:c+=kcase2:c++;break;case4:c+=2;break;}printf(“%d\n”,c);}程序运行后的输出结果是A)3B)5C)7D)9解析:选A。考点为switch语句的使用。switch语句中case和default的顺序可以任意,不影响程序结果。switch语句在循环中被执行2次。k=l时,c+=kc=0+1=1无break,继续执行c++c=2有break,终止switchk=2时,c++c=3有break,终止switch,循环结束,输出c。(19)以下程序段中,与语句:k=ab?(bc?1:0):0;功能相同的是A)if((ab)&&(bc))k=1;elsek=0;B)if((ab)||(bc)k=1;elsek=0;C)if(a=b)k=0;elseif(b=c)k=1;D)if(ab)k=1;elseif(bc)k=1;elsek=0;解析:选A。考点为条件表达式的使用。语句的功能为:ab且bc时,k=lab且b=e时,k=0a=b时,k=0符合语句功能的只有A。20)有以下程序#includestdio.hmain(){chars[]={“012xy”};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]=’a’&&s[i]=’z’)n++;printf(“%d\n”,n);}程序运行后的输出结果是A)0B)2C)3D)5解析:选B。考点为字符数组的使用。C语言用字符数组存放字符串,用\O作为结束标志。(\0是ASCII码值为0的字符,也即数值0)程序的功能为统计字符数组s中小写字符的个数,n为计数器。(21)有以下程序#includestdio.hmain(){intn=2,k=0;while(k++&&n++2);printf(“%d%d\n”,k,n);}程序运行后的输出结果是A)02B)13C)57D)12解析:选D。考点为while语句的使用。该while(k++&&n++2);的循环体为空语句,所以程序是输出退出while循环后k、n的值。k++为先使用k的值再增1。先使用k的值,k=0,逻辑与结果为。,第一次执行while循环时条件就不成立,直接退出循环,k的值增1,n的值没有任何改变。(22)有以下定义语句,编译时会出现编译错误的是A)chara=’a’;B)chara=’\n’;C)chara=’aa’;D)chara=’\x2d’;解析:选C。考点为字符型变量的赋值和基本概念。字符型为单引号括起的一个字符。A为标准的字符型赋值方法,B为把一个转义字符赋值给字符变量,也是正确的。C为单引号括起的两个字符,不符合字符型定义。D表面看上去是错误的,其实是正确的,也是一个转义字符。‘/x2d’表示ASCII码值为16进制数2d的字符,即‘-’号。(23)有以下程序#includestdio.hmain(){charc1,c2;c1=’A’+’8’-‘4’;c2=’A’+’8’-‘5’;printf(“%c,%d\n”,c1,c2);}已知字母A的ASCII码为65,程序运行后的输出结果是A)E,68B)D,69C)E,DD)输出无定值解析:选A。考点为字符型数据的使用和基本知识。字符型数据在内存中存放的是字符的ASCII码值,可以作为整型数据来处理。英文字符和数字在ASCII码表中是按顺序排列的。c1=‘A’+‘8'-‘4’=‘A’+‘4’=Ec2=‘A’+‘8’-‘5’=‘A’+3=‘D’(24)有以下程序#includestdio.hvoidfun(intp){intd=2;p=d++;printf(“%d”,p);}main(){inta=1;fun(a);printf(“%d\n”,a);}程序运行后的输出结果是A)32B)12C)21D)22解析:选C。考点为函数参数的传递。c语言中函数参数的传递是值传递,是把实参的值传给形参,是单向传递,形参的改变不会影响到实参的值。程序中,把实参a的值传给形参p,p=1,然后p=d++,再次赋值后p=2.输出p的值2。返回到主程序中,输出a的值1。(形参p的改变不会影响到实参a的值,a的值仍为1)(25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能#defineMIN-2147483647intfindmax(intx[],intn){inti,max;for(i=0;in;i++){max=MIN;if(maxx[i])max=x[i];}returnmax;}造成错误的原因是A)定义语句inti,max;中max未赋初值B)赋值语句max=MIN;中,不应给max赋MIN值C)语句if(maxx[i])max=x[i];中判断条件设置错误D)赋值语句max=MIN;放错了位置解析:选D。考点为求最大值的算法。max=MIN.不应该放在循环内,而应该放到for循环的前面。先让max取最小的整数,这样第1次循环时max就可以取得第1个数组元素的值,然后在循环中把后面的数组元素依次和max比较,让max取大值。(26)有以下程序#includestdio.hmain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2解析:选B。考点为指针的基本概念。p、q为指针,初始化时p指向m,q指向n。执行r=p;p:q;q:r;后,p和q的值交换,从而p指向n,q指向m。指针的改变不会影响m、n的值,最后*p和*q的值为n、m的值。(27)若有定义语句:inta[4][10],*p,*q[4];且0≤i4,则错误的赋值是A)p=aB)q[i]=a[i]C)p=a[i]D)p=&a[2][1]解析:选A。考点为指向二维数组的指针的用法。p为基类型为int的指针,指向一个整型数据,也就可咀指向一个数组元素,所以D正确。a是二维数组名,存放二维数组的首地址,但二维数组名是一个行指针,其基类型为具有10个元素的一维数组。所以A错误,二者基类型不一致(p+1指向下一个元素,而a+l指向二维数组的下一行)。如果p定义为int(*p)[10],才可以赋值p=a。在C语言中,二维数组a[4][10]可以看做是由4个元素组成的一维数组,这4个元素为a[0]、a[l]、a[2]、a[3],而其中每个元素又是由10个元素组成的维数组。在这里,a[i]也是一个数组名,可以表示一维数组的首地址,但a[i]是一个列指针,基类型为int.指向一维数组的第1个元素。同时,指针数组q的每个数组元素q[i]的基类型也为int,所以p、a[i]、q[i]的基类型一致,选项B、C是正确的。(28)有以下程序#includestdio.h#includestring.hmain(){charstr[][20]={“One*World”,“One*Drea

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功