1、 选择题题库1.下列数据结构中,属于非线性结构的是( )。A) 循环队列B) 带链队列C) 二叉树D) 带链栈1、参考答案:C【解析】树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。2.下列数据结构中,能够按照“先进后出“原则存取数据的是( )。A) 循环队列B) 栈C) 队列D) 二叉树2、参考答案:B【解析】栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据3.对于循环队列,下列叙述中正确的是( )。A) 队头指针是固定不变的B) 队头指针一定大于队尾指针C) 队头指针一定小于队尾指针D) 队头指针可以大于队尾指针,也可以小于队尾指针3、参考答案:D【解析】循环队
2、列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以对头指针有时可能大于队尾指针有时也可能小于队尾指针。4.算法的空间复杂度是指( )。A) 算法在执行过程中所需要的计算机存储空间B) 算法所处理的数据量C) 算法程序中的语句或指令条数D) 算法在执行过程中所需要的临时工作单元数4、参考答案:A【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A)。5.软件设计中划分模块的一个准则是( )。A) 低内聚低耦合B) 高内聚低耦合C) 低内聚高耦合 D) 高内聚高耦合5、参考答案:B【解析】一般较优秀的软件设计,应尽量做到高内聚,低耦合
3、,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。6.下列选项中不属于结构化程序设计原则的是( )。A) 可封装B) 自顶向下C) 模块化D) 逐步求精6、参考答案:A【解析】结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。7.软件详细设计生产的图如下:该图是( )A) NS图B) PAD图C) 程序流程图D) ER 图7、参考答案:C【解析】NS图提出了用方框图来代替传统的程序流程图,所以A)不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以B)不对。ER图是数据库中
4、的用于表示ER模型的图示工具,所以D)不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。8.数据库管理系统是( )。A) 操作系统的一部分B) 在操作系统支持下的系统软件C) 一种编译系统D) 一种操作系统8、参考答案:B【解析】数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。9.在ER图中,用来表示实体联系的图形是( )。A) 椭圆形B) 矩形 C) 菱形D) 三角形9、参考答案:C【解析】在ER图中实体集用矩形,属性用椭圆,联系用菱形。10.有三个关系R、S和T如下:则关系T是由
5、关系R和S通过某种操作得到,该操作为( )。A) 选择B) 投影C) 交 D) 并10、参考答案:D【解析】在关系T 中包含了关系R与S中的所有元组,所以进行的是并的运算。11.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是( )。A) C语言程序仅可以编译执行B) C语言程序仅可以解释执行C) C语言程序既可以编译执行又可以解释执行D) 以上说法都不对11、参考答案:A【解析】解释程序是将源程序(如 BASIC)作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。编译程序是把高级语言(如 FORTRAN、 COBOL、 Pascal、 C等)源程序作为输入,
6、进行翻译转换,产生出机器语言的目标程序,然后再让计算机执行这个目标程序,得到计算结果。12.以下叙述中错误的是( )。A) 用户所定义的标识符允许使用关键字B) 用户所定义的标识符应尽量做到“见名识意“C) 用户所定义的标识符中,大、小写字母代表不同标识D) 用户所定义的标识符必须以字母或下划线开头12、参考答案:A【解析】 C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,排除 D);用户定义标识符中大小写字母之间是有区别的并且应尽量做到“见名识意“,排除选项 B)和 C); C语言中还规定标识符不能为 C语言的关键字,故选项 A)叙述错误,正确答案是选项
7、 A)。13.若有说明语句:char c72 ;则变量c( )。A) 包含1个字符B) 包含2个字符C) 包含3个字符D) 说明不合法,c 的值不确定13、参考答案:A【解析】 C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个“开头的字符。其中,“ ddd“表示用 ASCII码(八进制数)表示一个字符,本题中的 char c2 即表示占一个字符的变量 c的 ASCII码值。14.现有定义int a;double b;float c;char k;,则表达式a/bck值的类型为( )。A) intB) doubleC) float D) char14、参考答案:B【解析】双目运算中
8、两边运算量类型转换规律:15.以下定义语句中正确的是( )。A) int ab0;B) char A651,bb;C) float a1,*b&a,*c&b;D) double a0.0;b1.115、参考答案:B【解析】本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开。因此选项 A)和 D)错误;在选项 C)中,变量 c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量 b;所以正确答案为 B)。16.若在定义语句int a,b,c,*p&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。A) scanf(“%d“,a,b,c);B) s
9、canf(“%d%d%d“,a,b,c);C) scanf(“%d“, &p);D) scanf(“%d“, p);16、参考答案:D【解析】 scanf函数中的输入项必须是指针,只有选项 D)符合这个要求。17.以下程序的运行结果是( )。int k0;void fun(int m) mk;km;printf(“m%d k%d “,m,k);main() int i4;fun(i); printf(“i%d k%dn“,i,k);A) m4 k5 i5 k5 B) m4 k4 i5 k5C) m4 k4 i4 k5D) m4 k5 i4 k517、参考答案:B【解析】由于在 main()函数
10、中,变量 i4,所以就调用 fun(4),则输出“ m4 k4“。然后变量 k增1等于5,变量 i增1等于5,所以 main()函数的“ printf(“i% d k% dn“, i, k);“语句输出“ i5 k5“。18.在执行下述程序时,若从键盘输入6和8,则结果为( )。main() int a,b,s;scanf(“%d%d“,&a,&b);sa ;if(a0) switch(k) default : break;case 1 : nk;case 2 :case 3 : nk;k;printf(“%dn“,n);程序运行后的输出结果是( )。A) 0B) 4C) 6D) 719、参考
11、答案:D【解析】本题考查的是 switch语句。在 switch语句中,表达式的值与某一个 case后面的常量表达式的值相等时,就执行此 case后面的语句,若所有的 case中的常量表达式的值都没有与表达式的值匹配的,就执行 default后面的语句,各个 case和 default的出现次序不影响执行结果。所以在本题中,当 k5和 k4的时候, case都没有与其匹配的值,所以执行了 default语句;当 k3时,执行“ case 3 : n k;“得 n3,然后执行 default;当 k2时,执行“ case 2 : case 3 : n k;“得 n5,然后执行 default;当
12、 k1时,执行“ case 1 : n k; case 2 : case 3 : n k;“使得 n加两次 k,得到n7。20.有以下程序:#include main() int x;scanf(“%d“,& x);if(xmain() int a1,b0;printf(“%d,“,bab);printf(“%dn“,a2*b)程序运行后的输出结果是( )。A) 0,0B) 1,0 C) 3,2 D) 1,222.有以下程序:main() int num441,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j;for(i0;ib?(bc?1:0):0;功能相同的
13、是( )。A) if(ab)&(bc)k1;else k0;B) if(ab)(bc)k1;else k0;C) if(ab)k1;else if(bc) k1;else k0;23、参考答案:A【解析】表达式 k ab?( bc?10)0表示:如果( ab)条件为真,则 k取值(bc?10),否则 k取值0;当 ab的情况下,如果 bc,则 k值为1,否则为0。所以该表达式与选项 A)功能相同。24.有以下程序:void ss(char *s,char t) while(*s) if(*st)*st a A ;s; main() char str1100“abcddfefdbd“,c d ;
14、ss(str1,c); printf(“%sn“,str1);程序运行后的输出结果是( )。A) ABCDDEFEDBDB) abcDDfefDbDC) abcAAfefAbA D) Abcddfefdbd24、参考答案:B【解析】在内存中,字符数据以 ASCII码存储,它的存储形式与整数的存储形式类似。C语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进行算术运算,此时相当于对它们的 ASCII码进行算术运算,在本题中, s相当于 s s1,即让 s指向数组中的下一个元素。25.现有如下程序段:#include “stdio.h“main() int k3012,324,45,6
15、,768,98,21,34,453,456;int count0,i0;while(ki) if(ki%20|ki%50)count;i; printf(“%d,%dn“,count,i);则程序段的输出结果为( )。A) 7,8 B) 8,8 C) 7,10 D) 8,1025、参考答案:D【解析】在 C语言中,定义一维数组的语句一般形式如下:类型名 数组名常量表达式;一维数组的引用形式为:数组名下标表达式。 count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。26.以下程序运行后的输出结果是( )。#includevoid f(char *s,char *t) char k
16、;k*s;*s*t;*tk;s;t;if(*s)f(s,t);main() char str10“welcome“,*p;pstrstrlen(str)/21;f(p,p2);printf(“%sn“,str);A) eelcomw B) weoclmeC) welcome D) emoclew26、参考答案:D【解析】该程序中 f函数的功能是交换两个位置字符的值, f函数共调用3次,依次更改了字符串中 l和 o、 e和 m、 w和 e的值,因此更改后的字符串的值是 emoclew。27.设有如下程序段:int x2004,y2008;printf(“%dn“,(x,y);则以下叙述中正确的是
17、A) 输出值为2004B) 输出值为2008C) 运行时产生出错信息D) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出27、参考答案:B【解析】( x, y)考查逗号表达式,逗号运算符的结合性为从左到右,因此,最后一个表达式的值就是此逗号表达式的值,因此选项 B)正确。28.有以下程序:#include void fun(char*c,int d) *c*c1;dd1;printf(“%c,%c,“,*c,d);main() char b a ,a A ;fun(&b,a); printf(“%c,%cn“,b,a);程序运行后的输出结果是( )。A) b,B,b,AB) b,B,
18、B,AC) a,B,B,aD) a,B,a,B28、参考答案:A【解析】函数 fun的第一个参数传指针,可以将更改后的值传回调用函数,第二个参数传值,不能将更改后的值传回调用函数,故选 A)。29.有以下程序:#include #include main() char a10“abcd“;printf(“%d,%dn“,strlen(a),sizeof(a);程序运行后的输出结果是( )。A) 7,4B) 4,10C) 8,8D) 10,1029、参考答案:B【解析】 strlen()用来返回字符串的长度,而 sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。30.若
19、有定义int a23;,则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为( )。A) *(*(ai)j) B) (ai)jC) *(aij)D) *(ai)j30、参考答案:A【解析】本题考查了二维数组元素的引用方法。选项 A)中 a i指向了数组 a的第 i1行,*(a i)则是第 i1行第0列的地址值,*( a i) j指向了数组 a第 i1行, j1列,*(*(a i) j)取到的是数组 a的 aij元素。31.有以下程序:#include main() char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c“,&c1,&c2,&c3,&c4
20、);c5getchar(); c6getchar();putchar(c1);putchar(c2);printf(“%c%cn“,c5,c6);程序运行后,若从键盘输入(从第1列开始)12345678则输出结果是( )A) 1267 B) 1256 C) 1278D) 124531、参考答案:D【解析】 putchar(c1)输出1, putchar(c2)输出2, printf(“%c%cn“, c5, c6)输出45。32.以下程序的运行结果是( )。#include int a1;int f(int c) static int a2;cc1;return(a)c;main() int
21、i,k0;for(i0;i2;i)int a3;kf(a);ka;printf(“%dn“,k);A) 17 B) 16C) 15D) 1432、参考答案:D【解析】 fun函数语句 return(a) c;中访问的 a,是其内部定义的静态局部变量,main函数中语句 k f(a)访问的 a是其局部变量,所以两次调用实际上都是调用 f(3)。第一次调用时, fun函数中 c4,表达式( a) c的值为6, a递增为3, k6。第二次调用时, fun函数中 c4,表达式( a) c的值为7, a递增为4, k6713。语句 k a中的 a是全局变量,所以 k13114。33.设有定义:int n10,n2,*p&n2,*q&n1;,以下赋值语句中与n2n1;语句等价的是( )。