2考试简介选择题分值分布:选择题选择题选择题数据结构1~2C语言公共知识程序设计1~2软件工程2~3数据库3~43010第十二套4选择题0809-11.31.(2007-4-1)下列叙述中正确的是A)算法的效率只与问题的规模有关,而与数据的存储结构无关B)算法的时间复杂度是指执行算法所需要的计算工作量C)数据逻辑结构与存储结构是一一对应的D)算法时间复杂度与空间复杂度一定相关解析:B算法的效率与问题的规模和数据的存储结构都有关,A错误。算法的时间复杂度,是指执行算法所需要的计算工作量,B正确。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的,C错误。算法的时间复杂度和空间复杂度没有直接的联系,D错误。5选择题0809-12.32.(2010-9-1类似)下列叙述中正确的是A)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构B)线性表的链式存储结构与顺序存储结构所需要的存储空间都是连续的C)线性表的链式存储结构的存储空间可以是连续的也可以是不连续的D)以上说法都不对解析:C线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此C正确。6选择题0809-13.33.某二叉树共有12个结点,其中叶子结点只有1个,则该二叉树的深度为(根结点在第1层)A)3B)6C)8D)12解析:D二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,n0=1,则n2=0,总节点数为12=n0+n1+n2=1+n1+0,则度为1的节点数n1=11,故深度为12,选D。7选择题0809-14.34.对长度为n的线性表作快速排序,在最坏情况下比较次数为A)nB)n-1C)n(n-1)D)n(n-1)/2解析:D快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。8选择题0809-15.35.结构化程序设计中,下面对goto语句使用描述正确的是A)禁止使用goto语句B)使用goto语句程序效率高C)应避免滥用goto语句D)以上说法都不对解析:C结构化程序设计中,要注意尽量避免goto语句的使用,故选C。9选择题0809-16.36.下面不属于软件测试实施步骤是A)集成测试B)回归测试C)确认测试D)单元测试解析:B软件测试主要包括单元测试、集成测试、确认测试和系统测试。10选择题0809-17.37.不属于软件需求分析阶段主要工作A)需求变更申请B)需求分析C)需求评审D)需求获取解析:A需求分析阶段的工作可概括为4个方面:①需求获取。②需求分析。③编写需求规格说明书。④需求审评。11选择题0809-18.38.当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的A)记录B)行C)属性D)元组解析:C自然连接是一种特殊的等值连接,它满足下面的条件:①两关系间有公共域;②通过公共域的等值进行连接,选C。12选择题0809-19.39.有三个关系R,S,和T如下:则由关系R和S得到关系T的操作是A)选择B)差C)交D)并RSTABCABCABCa12d32a12b21c31b21c31解析:B关系T是关系R的一部分,并且是关系R去掉R和S相同的元素,符合差操作。13选择题10.40.有表示公司和职员及工作的三张表,职员可在多家公司兼职。其中公司C(公司号,公司名,地址,注册资本,法人代表,员工数),职员S(职员号,姓名,性别,年龄,学历),工作W(公司号,职员号,工资),则表W的键(码)为A)公司号,职员号B)职员号,工资C)职员号D)公司号,职员号,工资解析:A由于职员可以再多加公司兼职,表W的键(码)应为公司关系和职员关系的主码,即公司号和职员号。14选择题11.49.57、关于算法,以下叙述中错误的是A)某个算法可能会没有输入B)某个算法可能会没有输入C)一个算法对于某个输入的循环次数是可以事先估计出来的D)任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕解析:D算法的特征:①有穷性。一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。②确定性。算法中的每一步都有确切的含义。③可行性。算法中的操作能够用已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。⑤输出:一个算法有一个或者多个输出,以反映出数据加工的结果。所以选择D选项。15选择题12.50.58、关于C语言的变量,叙述中错误的是A)变量所占存储单元地址可以随时改变B)所谓变量是指在程序运行过程中其值可以被改变的量C)程序中用到的所有变量都必须先定义后才能用D)由三条下划线构成的符号名是合法的变量名解析:A一个变量实质上是代表了内存中的某个存储单元,必须先定义后使用,且在定义时为之分配存储单元,不能随时改变,所以选择A选项。16选择题13.51.关于do循环体while(条件表达式);以下叙述中正确的是A)条件表达式的执行次数总是比循环体的执行次数多一次B)循环体的执行次数总是比条件表达式的执行次数多一次C)条件表达式的执行次数与循环体的执行次数一样D)条件表达式的执行次数与循环体的执行次数无关解析:Cdo…while循环的执行过程是先执行一遍循环体后再执行条件表达式判断条件,直到条件不成立跳出循环,所以循环体和条件表达式的执行次数是一致的。17选择题14.52.59、若有以下程序#includestdio.hmain(){inta=-11,b=10;a/=b/=-4;printf(%d%d\n,a,b);}则程序的输出结果是A)4-3B)-1-2C)5-2D)5-3解析:C先执行b/=-4,即b=b/-4,结果为-2,然后执行a/=-2,即a=a/-2,结果为5。所以选择C。18选择题15.53.60与47.55对比若有以下程序#includestdio.hmain(){inta=0,b=0,c=0c=(a+=++b,b+=4);printf(%d,%d,%d\n,a,b,c);}则程序的输出结果是A)1,5,1B)1,5,5C)-1,4,4D)-1,4,-1解析:B逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。且逗号运算符的优先级最低。先计算a+=++b,结果a为1,b为1,然后计算b+=4,b的值为5。逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,即a为1,b为5,c为5。所以选择B。19选择题16.54.93若有定义inta;floatb;doublec;程序运行时输入:345回车能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是A)scanf(%d%f%lf,&a,&b,&c);B)scanf(%d%lf%lf,&a,&b,&c);C)scanf(%d%f%f,&a,&b,&c);D)scanf(%lf%lf%lf,&a,&b,&c);解析:Ascanf()函数的格式串中,必须含有与输入项一一对应的格式转换说明符,整型数据、float型数据、double型数据对应的格式转换说明符分别为%d、%f、%lf。所以选择A。20选择题0809-117.#includestdio.hmain(){inta=1,b=2,c=3,d=4;if((a=2)&&(b=1))c=2;if((c==3)||(d=-1))a=5;printf(%d,%d,%d,%d\n,a,b,c,d);}则程序的输出结果是A)2,2,2,4B)2,1,2,-1C)5,1,2,-1D)1,2,3,4解析:C第1个if语句的判断条件中是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第1个运算对象a=2非零,判断第2个表达式b=1也非零,所以条件成立执行c=2的赋值操作。执行第2个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第2个运算对象d=-1,结果为-1非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。21选择题0809-118.#includestdio.hmain(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;if(c!=3);r+=3;if(d==4)r+=4;printf(%d\n,r);}则程序的输出结果是A)3B)7C)6D)10解析:D第一个if语句a!=1条件为假,所以执行else后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。22选择题0809-119.#includestdio.hmain(){ints=0,n;for(n=0;n4;n++){switch(n){default:s+=4;case1:s+=1;break;case2:s+=2;break;case3:s+=3;}}printf(%d\n,s);}则程序的输出结果是A)10B)11C)13D)1523选择题19解析:Bbreak语句的作用是终止正在执行的switch流程,跳出switch结构或者强制终止当前循环,从当前执行的循环中跳出。题干中第一次循环n值为0,执行default语句后的s+=4,s的值变为4,执行case1语句后的s+=1,s的值变为5,遇到break语句跳出switch语句,进入第二次循环。第二次循环时n的值为1,执行case1后的s+=1,s的值变为6,遇到break语句跳出switch语句,进入第三次循环。第三次循环时n的值为2,执行case2后的s+=2,s的值变为8,遇到break语句跳出switch语句,进入第四次循环。第四次循环时n的值为3,执行case3后的s+=3,s的值变为11。再判断循环条件为假,退出循环打印s的值11。24选择题20.52.46.与46对比若有以下程序#includestdio.hmain(){inta=-2,b=0;do{++b;}while(a++);printf(%d,%d\n,a,b);}则程序的输出结果是A)1,3B)0,2C)1,2D)2,3解析:A本题重点考察do-while语句及do-while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),++b即变量b自增1后再参与运算,而a++则表示a参与运算后,再自增1。所以第一次循环结束后,b=1,a=-1。第二次循环后,b=2,a=0。第三次循环后,b=3,a=1。因此A选项正确。25选择题21.53.47若有以下程序#includestdio.hmain(){inta=6,b=0,c=0;for(;a&&(b==0);){b+=a;a-=c++;}printf(%d,%d,%d\n,a,b,c);}则程序的输出结果是A)5,6,0B)6,0,0C)6,6,1D)5,6,1解析:Cfor(;a&&(b==0);){b+=a;a-=c++;}相当于while(a&&(b==0)){b+=a;a-=c++;}。26选择题0809-122.以下选项中非法的C语言字符常量是A)'\x9d'B)'9'C)'\x09'D)'\09'解析:本题考察字符常量,字符常量是用单引号括起来的一个字符。例如:'a'、'='、'+'等。转义字符是一种特殊的字符常量。转义字符以反斜线\开头,后跟一个或几个字符。D选项中'\09',\0表示后面的字符是八进制数。又出现9所以是非法的,故D选项