全国计算机等级考试二级C语言真题2009年9月_第1页
全国计算机等级考试二级C语言真题2009年9月_第2页
全国计算机等级考试二级C语言真题2009年9月_第3页
全国计算机等级考试二级C语言真题2009年9月_第4页
全国计算机等级考试二级C语言真题2009年9月_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机等级考试二级C语言真题2009年9月(总分:100.00,做题时间:90分钟)一、{{B}}选择题{{/B}}(总题数:40,分数:70.00)下列数据结构中,属于非线性结构的是 ()。(分数:2.00)循环队列带链队列二叉树带链栈√解析:[解析]一个算法的空间复杂度,一般是指执行这个算法所需的存储空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。下列数据结构中,能够按照“先进后出”原则存取数据的是 ()。(分数:2.00)循环队列栈√队列二叉树解析:[解析]数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。对于循环队列,下列叙述中正确的是()。(分数:2.00)队头指针是固定不变的队头指针一定大于队尾指针队头指针一定小于队尾指针√队头指针可以大于队尾指针,也可以小于队尾指针解析:[解析]对二叉树的前序遍历是指先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。算法的空间复杂度是指()。(分数:2.00)算法在执行过程中所需要的计算机存储空间算法所处理的数据量算法程序中的语句或指令条数算法在执行过程中所需要的临时工作单元数√解析:[解析]软件是运行在计算机硬件之上的逻辑实体,包括程序、数据和相关的文档,软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制。软件设计中划分模块的一个准则是()。(分数:2.00)低内聚低耦合√高内聚低耦合低内聚高耦合高内聚高耦合解析:[解析]耦合性是模块间互相连接的紧密程度的度量,取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。下列选项中不属于结构化程序设计原则的是()。(分数:2.00)可封装自顶向下√模块化逐步求精解析:[解析]在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个应用程序共享的目标7.7.软件详细设计产生的图如下:(分数:2.00)N-S图PAD图程序流程图E-R图√解析:[解析]软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段:工具支持软件的开发、管理和文档生成;过程支持对软件开发各个环节的控制和管理。数据库管理系统是()。(分数:2.00)操作系统的一部分在操作系统支持下的系统软件√一种编译系统一种操作系统解析:[解析]关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。在E-R图中,用采表示实体联系的图形是()。(分数:2.00)椭圆形矩形√菱形三角形解析:[解析]将E-R图转换成指定RDBMS中的关系模式是数据库逻辑设计的主要工作。从 E-R图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。有如下三个关系R、S和T: 其中关系T由关系R和S通过某种操作得到,该操作为()。(分数:2.00)选择投影交并√解析:[解析]物理设计阶段主要解决选择文件存储结构和确定文件存取方法的问题,包括选择存储结构、确定存取方法、选择存取路径和确定数据的存放位置。下列叙述中正确的是()。(分数:2.00)程序设计的任务就是编写程序代码并上机调试程序设计的任务就是确定所用数据结构程序设计的任务就是确定所用算法以上三种说法都不完整 √解析:[解析]所谓程序设计就是把解题步骤用程序设计语言描述出来的工作过程。简单的程序设计一般包含以下4个部分:确定数据结构、确定算法、编写源代码程序、调试和运行程序。下列选项中,能用作用户标识符的是()。(分数:2.00)void88_0_√

unsigned解析:[解析]在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下画线组成的字符串,并且其第一个字符必须是字母或下画线。用户定义的标识符不应与关键字相同。void和unsigned类型声明关键字,不能作为标识符。printF;printf("请输入2个数:");}该程序在编译时产生错误,其出错原阅读下列程序:#include<stdio.h>main()printF;printf("请输入2个数:");}该程序在编译时产生错误,其出错原case是关键字,不能用作用户自定义标识符printF不能用作用户自定义标识符case是关键字,不能用作用户自定义标识符printF不能用作用户自定义标识符scanf不能作为输入函数使用printf不能输出case的值定义语句出错,定义语句出错,定义语句无错,定义语句无错,解析:[解析]在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下画线组成的字符串,并且其第一个字符必须是字母或下画线。用户定义的标识符不应与关键字相同。void和unsigned类型声明关键字,不能作为标识符。表达式:(int)((double)9/2)-(9)%2 的值是()。(分数:2.00)03√45解析:[解析](double)9/2的计算结果被转换为血型,所以截取后的运算结果为4,所以(int)((double)9/2)-(9)%2=3。若有定义语句:intx=10;则表达式X-=x+x的值为()(分数:2.00)-20-10√010解析:[解析]x-=x+x为x=x-(x+x),即运算后结果为-10。有下列程序:#include<stdio.h>main(){inta=1,b=0;printf("%d,",b=a+B);printf("%d/n",a=2*B);}程序运行后的输出结果是()。(分数:2.00)0,01,03,21,2√解析:[解析]第一个printf语句a+b,b=1;第二个printf语句a=2xb=2。设有定义:inta=1,b=2,c=3; ,以下语句中执行效果与其它三个不同的是(分数:2.00)if(a>b)c=a,a=b,b=c;if(a>b){c=a,a=b,b=c;}if(a>b)c=a;a=b;b=c;√if(a>b){c=a;a=b;b=c;}解析:[解析]选项A)和选项B)中运用了逗号表达式。逗号表达式的运算过程为:从左往右逐个计算表达式。逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。所以选项A)和选项B)程序执行后a、b、c的值都分为1、2、3,而选项C)因为对应的if语句没有用{}将交换语句括起来,所以第一句c=a不执行,执行后为:2、3、3。有下列程序:#include<stdio.h>main(){intc=0,k,for(k-1;k <3;k++)switch(k){default:c+=k;case2:C++;break;case4:c+=2;break;}printf("%d/n",C);} 程序运行后的输出结果是()。(分数:2.00)3√579解析:[解析]case语句中default为必执行语句,所以第一次循环执行后 c=1,k=1:第二次k=2,执行case2条件后k=2,c=3,所以c=3。以下程序中,与语句:k=a>b?(b>c?1:0):0;功能相同的是(分数:2.00)if((a>b)&&(b>c))k=1;elsek=0;√if((a>b)||(b>c))k=1;elsek=0;if(a<=b)k=0;elseif(b<=c)k=1;if(a>b)k=1;elseif(b>c)k=1;解析:[解析]e1?7e2:e3首先对e1求值结果不为0(也就是e1表达式关系成立),就对e2求值,并将其结果作为整个表达式的值(e3不起作用)。否则(也就是e1表达式不成立),就对e3求值,并将其结果作为整个表达式的值(e2不起作用)。所以,当a>b为真,执行(b>c?1:0),b>c为真,则为1,其他为0。有下列程序:#include<stdio.h>main(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(S[i]>='a'&&s[i]<='z')n++;printf("%d/n",n);} 程序运行后的输出结果是()。(分数:2.00)02√35解析:[解析]本程序为判断字符串中a到z中的字符个数,所以数组s中的符合条件的字符为x和y,即n=2。有下列程序:#include<stdio.h>main(){intn=2,k=0;while(k++&&n++ >2);printf("%d%d/n",k,n);}程序运行后的输出结果是()。(分数:2.00)02135712√解析:[解析]while判断中k++执行后,取n=2没有执行加加运算,先取值判断,所以n仍然为2。有下列定义语句,编译时会出现编译错误的是()。(分数:2.00)Chara='a';Chara='/n';Chara='aa'; √Chara='/x2d';解析:[解析]因为char是1字节,所以chara='aa';'aa'两个字节赋值错误。有下列程序:#include<stdio.h>main(){charc1,c2;c1='A'+'8'-'4';c2='A'+'8'-'5';printf("%c,%d/n",c1,c2);} 已知字母A的ASCII码为65,程序运行后的输出结果是()。(分数:2.00)E,68√D,69E,D输出无定值解析:[解析]c1执行'A'+'8'后,c1='y',然后加'8'后c1='E',同理,c2执行'A'+'8'后等于'y',然后减去'5'后等于68。有下列程序:#include<stdio.h>voidfun(intp){intd=2;p=d++;printf("%d",p);}main(){inta=1;fun(A);printf("%d/n",A);} 程序运行后的输出结果是()。(分数:2.00)321221√22解析:[解析]fun函数中为传值调用,则在形参的改变并不改变实参,所以在主函数中 a的值为1。函数p=d++;语句中先执行赋值,然后进行d加1的操作,所以p的值为2。下列函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#defineMIN-2147483647intfindmax(intx[],intn){inti,max;for(i=0;i<n;i++){max=MIN;if(max<x[i])max=x[i];}returnmax;} 造成错误的原因是()。(分数:2.00)定义语句inti,max;中max未赋初值在赋值语句max=MIN;中,不应给max赋MIN值语句id(max<Xmax=X中判断条件设置错误赋值语句max=M1N;放错了位置√解析:[解析]循环语句应该是对每一个数组中的元素与max值作比较,如果大于max,则将该值赋值给max,这样就会输出最大值。而本题中每次循环中 max的值都被赋值为MIN,所以都是MIN与数组中值的比较,最后只是输出比MIN大的一个值,而不是所有值中的最大值,所以 max=MIN赋值语句应放在for循环之前。有下列程序:#include<stdio.h>main(){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);} 程序运行后的输出结果是()。(分数:2.00)1,2,1,21,2,2,1√2,1,2,12,1,1,2解析:[解析]*p=&m后p指向m,所以p的值为1,同理,q的值为2。r=p;p=q;q=r;是将p和q进行交换。若有定义语句:inta[4][10],*p,*q[4] ;且0≤i<4,则错误的赋值是()。(分数:2.00)p=a√q=ap=ap=&a[2][1]解析:[解析]选项A)中是把二维数组赋值给指针变量,将数组转换为指针类型,所以错误。有下列程序:#include<stdio.h>#include<String.h>main(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s/n",p);}程序运行后的输出结果是()。(分数:2.00)9,One*World9,One*Dream!10,One*Dream!√10,One*World解析:[解析]*p=str[1]指向第二个字符串,所以p的长度是字符串One*Dream中字符!的个数。有下列程序:#include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case 0:a[i]++;break;case1:a[i]--;)break;case1:a[i]=0; }for(i=0;i<4;i++)primf("%d",a[i]);printf("/n");} 程序运行后的输出结果是()。(分数:2.00)334420503040√0304解析:[解析]进入程序中第一个for循环,当i=0,符合i%2中case=0的条件,因此执行switch(a[i]%2),取数组a中的第一个数,执行case0:a[i]++;break;,然后跳出第一次循环,9[0]=3,第二次循环switch(i%2)后执行case1:a[i]=0;,所以a[1]=0第三次循环同第一次,执行case1:a[i]--; ,所以a[2]=4,第四次同第二次,所以a[3]=0。有下列程序:#iniclude<stdio.h>#include<string.h>main(){chara[10]="abcd";printf("%d,%d/n",strlen(A),sizeof(A));} 程序运行后的输出结果是()。(分数:2.00)7,44,10√8,810,10解析:[解析]strlen用来求字符串的长度,而sizeof用来求指定变量或者变量类型等所占内存大小。下列是有关C语言字符数组的描述,其中错误的是()。(分数:1.00)不可以用赋值语句给字符数组名赋字符串可以用输入语句把字符串整体输入给字符数组字符数组中的内容不一定是字符串字符数组只能存放字符串 √解析:[解析]字符数组用于存储字符串,例如:charstr[]="Hello";。同时,字符数组也用于存储字符或字符变量,例如:charChars[]={'H''e','1','1','o'}; 。下列函数的功能是()。fun(char*a,char*B){while((*b=*A)!='/0'){a++;b++;}}(分数:1.00)将a所指字符串赋给b所指空间√使指针b指向a所指字符串将a所指字符串和b所指字符串进行比较检查a和b所指字符串中是否有'/0'解析:[解析]while((*b=*a)!='10') 语句将a字符串中的值赋值给b,{a++;b++;}将a和b的指针向后移动一位。设有下列函数:voidfun(intn,char*S){ ⋯⋯}则下面对函数指针的定义和赋值均正确的是()。(分数:1.00)void(*p();pf=fun;√void*pf();pr=fun;void*pr();*pf=fun;void(*p(int,cha;pf=&fun;解析:[解析]声明函数指针必须加括号,因为括号优先级高于 *号。另外,函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名即可,fun代表首地址,所以不能加&。有下列程序:#include<Stdio.h>intf(intn);main(){inta=3,s;s=f(A);s=s+f(A);printf("%d/n",s);}intf(intn){staticinta=1;n+=a++;returnn;}程序运行后的输出结果是()。(分数:1.00)789√10解析:[解析]f函数中staticint a=1;的a是静态局部变量,不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。s=f(a);,n+=a++;返回n=4,s=f(a);的s值为4,然后执行s=s+f(a);f(a)返回5,即s=s+f(a);执行后s=9。有下列程序:#include<stdio.h>#definef(x)x*x*Xmain(){inta=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d/n",s,t);} 程序运行后的输出结果是()。(分数:1.00)10,64√10,1064,1064,64解析:[解析]f(a+1)替换后为a*a*a+1,所以为10,f((a+1))替换后为(a+1)*(a+1)*(a+1),所以为64下列结构体的定义语句中,错误的是()。(分数:1.00)structord{intx;inty;intz;};structorda;structord{intx;inty;intz;}stmctorda; √stmctord{intx;inty;intz;}a;struct{intx;inty;intz;}a;解析:[解析]结构(联合),定义结束以后一定有一个分号,必不可少。设有定义:char*c;,下列选项中能够使字符型指针c正确指向一个字符串的是()。(分数:1.00)charstr[]="string";c=str; √scanf("%s",;c=getchar();*c=*string";解析:[解析]字符指针指向字符串,即字符指针应指向字符串地址,字符数组的首地址即为字符数组的名字,所以选择选项A)。有下列程序:#include<stdio.h>#include<string.h>StmctA{inta;charb[10];doublec;};structAf(structAt);main(){structAa= <1001,"ZhangDa",1098.0};a=f(A);printf("%d,%s,%6.1f/n",a.a,a.b,a.C);}structAf(StructAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returnt;} 程序运行后的输出结果是()。(分数:1.00)1001,ZhangDa,1098.01002,ZhangDa,1202.01001,ChangRong,1098.01002,ChangRong,1202.0√解析:[解析]函数f的作用是给结构体赋值,所以主函数中给结构体变量 a初始化值后,再调用函数乙结构体变量a的值为f中赋的值。若有下列程序段:intr=8;printf("%d/n",r >>1);输出结果是()。(分数:1.00)1684√2解析:[解析]>>按位右移操作符:exp>>n,将容器中所有的位向右移n位,空出的位用0填充。下列关于C语言文件的叙述中正确的是()。(分数:1.00)文件由一系列数据依次排列组成,只能构成二进制文件文件由结构序列组成,可以构成二进制文件或文本文件文件由数据序列组成,可以构成二进制文件或文本文件 √文件由字符序列组成,其类型只能是文本文件解析:[解析]C语言文件是一个字符(字节)的序列,也是一字符流或字节流,还是一种流式文件。根据数据的组织形式,可分为文本文件和二进制文件。二、{{B}}填空题{{/B}}(总题数:15,分数:30.00)某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有1个结点。(分数:2.00)填空项1: (正确答案:逻辑)解析:[解析]数据的逻辑结构主要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。程序流程图中的菱形框表示的是1。(分数:2.00)填空项1: (正确答案:队尾)解析:[解析]在队列中,允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中1阶段产生“软件需求规格说明书”。(分数:2.00)填空项1: (正确答案:31)解析:[解析]设队列容量为m,rear>front,则队列中元素个数为rear-front;rear<front,则队列中元素个数为m+(rear-front)。本题rear<front,则m=32+(2-3)=31。在数据库技术中,实体集之间的联系可以是一对一、一对多或多对多的,那么“学生”和“可选课程”的联系为1。(分数:2.00)填空项1: (正确答案:32)解析:[解析]二叉树第k层上,最多有2k-1(k≥1)个结点。第6层的结点数最多是26-1=32。区别“二叉树的结点最多数”和“某一层的结点最多数”。前者的计算是深度为 m的二叉树最多有2m-1个结点。人员基本信息一般包括身份证号、姓名、性别、年龄等。其中可以作为主关键字的是 1。(分数:2.00)填空项1: (正确答案:45)解析:[解析]对于长度为n的线性表,在最坏情况下(即线性表中元素现在的顺序与目标顺序正好相反 ),冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。若有定义语句:inta=5;,则表达式:a++的值是1。(分数:2.00)填空项1: (正确答案:5)解析:[解析]a++先赋值,后进行加1运算,所以表达式的值为5。若有语句doublex=17;inty;,当执行y=(int)(x/5)%2;之后y的值为1。(分数:2.00)填空项1: (正确答案:1)解析:[解析]x/5为3.4000000000000,然后%2取模后,强制转换为血型,所以为1。下列程序运行后的输出结果是 。#include<stdio.h>main(){intx=20;printf("%d",0<x<20);printf("%dkn",0 <x&&x<20);}(分数:2.00)填空项1: (正确答案:10)解析:[解析]0<x<20的布尔值为0<x的值,所以为真,整型为1。0<x&&x<20的值为0<x的值为真,但是x<20值为假,而&&运算为假,整型为0。下列程序运行后的输出结果是 。#include<stdio.h>main(){inta=1,b=7;do{b=b/2;a+=b;}while(b >1;printf("%d/n",A);}(分数:2.00)填空项1: (正确答案:5)解析:[解析]do⋯while语句,第一次执行一个语句块,然后重复循环的执行该语句块,直到条件表达式等于false。第一次进入do⋯while,a=1,b=7执行b=b/2后b=3,然后接着执行a+=b,a=4。仍然符合循环条件,所以重新进行循环执行b=b/2后b=1,然后接着执行a+=b,a=5,判断循环条件,跳出循环。有下列程序:#include<stdio.h>main(){intf,f1,f2,i;f1=0;f2=1;printf("%d%d",f1,f2);for(i:3;i<=5;i++){f=f1+f2;printf("%d",f);f1=f2;f2=f;}printf("/n");} 程序运行后的输出结果是 。(分数:2.00)填空项1: (正确答案:01123)解析:[解析]程序中首先将n和馒的赋值0和1输出,然后进入for循环,首先计算f1+f2,并将其输出,然后将C的值赋值给n,求得的和赋值给熳。第一次循环,f=1,第二次f=2,第三次f=3。有下列程序:#include<stdio.h>inta=5;voidfun(intB){inta=10;a+2b;printf("%d",A);}main(){i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论