1、1一一、选择题(1)(10) 每小题 2 分, (11) (50)每小题 1 分,共 60 分)下列各题 A)、B)、c)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)在数据结构中,从逻辑上可以把数据结构分为_ 。A) 动态结构和静态结构 B)紧凑结构和非紧凑结构c)线性结构和非线性结构 D)内部结构和外部结构答案:C评析:逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。(2)若进栈序列为 l,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_。A)1
2、,4,3 ,2 B)2, 3,4,lC)3,1,4,2 D)3,4, 2, 1答案:C评析:栈是一种后进先出表,选项 c 中,先出栈的是 3,说明此时栈内必然有 1,2,由于 l 先于 2 进栈,所以 l 不可能在 2 之前出栈,故选项 C 这种出栈序列是不可能的。(3)排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为_。A) 希尔排序 B)冒泡排序 c)插入排序 D) 选择排序答案:A评析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。(4)在顺序表(3,6,8,10 ,12,15,16,18,21,25,30)中,用二分法查找关键码
3、值11,所需的关键码比较次数为_。A)2 B)3 C)4 D)5答案:C评析:二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与 ll 比较的关键码分别为 15,8,10,12 四个。(5)对于 n 个结点的单向链表( 无表头结点),需要指针单元的个数至少为_。A)n-1 B)n C)n+l D)2n答案:C2评析:在 n 个结点的单向链表(无表头结点) 中,每个结点都有一个指针单元 (即指针域),加上头指针,至少需要 n+1 个指针单元。(6)在软件开发过程中,软件结构 设计 是描述_ 。A) 数据存储结构 B
4、) 软件体系结构 C)软件结构测试 D) 软件控制过程答案:B评析:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。(7)模块本身的内聚是模块独立性的重要性度量因素之一。在 7 类内聚中,具有最强内聚 的一类是_。A) 顺序性内聚 B)过程性内聚 c)逻辑性内聚 D)功能性内聚答案:D评析:内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。内聚共有 7 类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、 通信 内聚、顺序内聚和功能内聚。(8)数据存储和数
5、据流都是_,仅仅是所处的状态不同。A) 分析结果 B)事件 C)动作 D) 数据答案:D评析:数据流图有 4 种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。(9)数据的完整性是指数据的正确性、有效性和_ 。A) 可维护性 B)独立性 C)安全性 D) 相容性答案:D评析:数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。(10)关系代数运算是以_为基础的运算。A) 关系运算 B)谓词运算 c)集合运算 D) 代数运算答案:C评析:关系
6、代数运算是以关系代数作为运算对象的一组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包垂直分割(投影) 、水平分割 (选择)、关系的结合( 连接)等。(11)能将高级语言程序转换成目标语言程序的是_ 。3A) 调试程序 B)解释程序 C)编译程序 D)编辑程序答案:C评析:用高级语言编写的程序称为“源程序“ ,而计算机只能识别和执行由 0 和 l 组成的二进制指令,所以高级语言必须先用一种称为“编译程序“ 的软件,把源程序翻译成二进制形式的“目标程序 “。(12) _是构成 c 语言程序的基本单位。A) 函数 B)过程 c) 子程序 D) 子例程答案:A评析:c 程序是由函数构成的
7、。一个 c 源程序至少包含一个 main 函数,也可以包含一个 main 函数和若干个其他函数,因此,函数是 c 程序的基本单位。(13)可以在 C 语言中用做用户标识符的是_。A)void B)as_b3 C)for D)2cdefine _123 -abc DoWORD If cas SIG答案:B评析:c 语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。另外还需要注意的是关键字不能作标识符。选项 A 中 void,C 中for 都为关键字,D 中 2c 以字母开头。(14)若有以下类型说明语句:char w;int x;float y,z;则表达式
8、 w*x+z-y 的结果为 _类型。A)float B)char C)int D)double答案:A评析:在进行运算时,不同类型的数据参加运算,需要先将其转换成同一类型的数据,然后再进行运算。转换的顺序由低到高为:char,shortintunsignedlongdoublefloat,故结果为 float 型。(15)main() float x=123A56;printf(“-52fn“,x);以上程序输出的结果是_。A)123 4 B)1235 C)12345 D)123 46答案:D评析:f 格式符,用来输出实数,以小数形式输出。“ -mnf“ 的含义是:输出数据共占 m 列,其中
9、n 位小数,如果输出位数小于 m。则右端补空格。如果总长度大于列数,则4按实际情况四舍五入输出。(16)下面语句的输出结果是_。Printf(“dn“,strlen(“ t“065xff n“) ;A)14 B)8C)5 D)输出项不合法,无正常输出答案:C评析:在 c 语言中,以“开头的字符均为转义字符,其中“ 后可跟 l3 位八进制数或在“后跟字母 x 及 l2 位十六进制数,以此来代表一个特定的字符。(17)下列程序的输出结果是_。main() int a=0,b=0 ,c=0;if(+a0lI+b0)+c;printf(“na=d,b=d,c=d“,a,b,c);A)a=0,b=0,c
10、=0 B)a=l,b=l,c=1C)a=l,b=O, c=I D)a=0, b=1c=1答案:C评析:“是或运算,它有个 “短路“的特点需特别注意,当 “运算符左边的表达式的值为真时,则程序就不再对“ “右边的表达式的值进行运算,而是使得整个表达式的值直接为真。(18)下列程序的输出结果是_。Main() int i;for(i=1 ;i+l;i+) if(i4)printlf(“ d“,i+) ;break;printf(“d“,i+);A)55 B)56c)程序错误,没有输出 D)循环条件永远为真,死循环答案:B评析:本程序中有个 for 循环,但注意到 for 循环的条件是“i+l“,也
11、就是只要 i+l 的值为真(非零值均为真),就执行循环。当 i=l 的时,i+l 的值为真,判断 if 条件不成立,执行i+,输出 i 的值为 5。(19)下列程序的输出结果是_。#define A 1005main() int i=O,sum=O;do if(I=(i2)*2)continue;sum+=i;while(+iprintf(“dn“,sum) ;A)2500 B)2050 C)4 D)O答案:A评析:本题程序的功能是求 1 到_99 之问(包括 1 和 99)所有奇数之和。程序中的 while循环的终止条件为+i=100,在 while 循环体内,如果 i 是偶数,则执行 co
12、ntinue,跳过这一次循环,执行下一次循环,否则求和。最后输出的值是 1 到 99 之间(包括 l 和 99)所有奇数之和(1+99)*502=2500 。(20)下列程序的输出结果是_。main() int I=3;switch(i) case 1:case 2:printf(“d“ ,i);case 3:case 4:break;default:printf(“OK“);A)0 B)3 C)OK D) 没有任何输出答案:D评析:在题中,i 的值为 3,由于“case 3:“后面没有 break 语句,所以继续向下执行“case 4:“后面的语句,由于“case 4:“后面的语句为 bre
13、ak 强行退出 switch 语句,所以,本题没有任何输出。(21)下列程序执行后的输出结果是_。main() int m3=1,4,7,2,5,8,3,6,9 ;int i,k=2 :for(I=0;i=b=0)22的输出是_。A)741 B)852 C)963 D)875421答案:B评析:“ “是求余运算符,所以 if 判断语句中实际是指出只有当 y 可以被 3 整除时方可以继续;-y 是先进行 y 的自减运算,再使用 y 值。所以,最后的打印结果应当为“852“。(13)下列四个叙述中,错误的是_。A)C 语言中的关键字必须小写B)c 语言中的标识符必须全部由字母组成C)c 语言不提供
14、输入输出语句D)C 语言中的注释行可以出现在程序的任何位置答案:B评析:c 语言规定标识符只能由字母、数字和下划线 3 种字符组成,且第一个字符必须为字母或下划线。(14)下面程序main()int a=-l,b=4,k;k=(a+0) y=1;else y=0;所表示的数学函数关系是_.-1(x0) 0 (x0)0 (xO) 0 (xO)答案:C评析:本题的考查点是根据程序写出数学函数关系。题中的两个判断语句实际上指出了 y 取值的条件,即是当 x 大于零时 y 取 l;当 x 小于零时 y 取 0;当 x 等于零时 y 值不变,为-1。(17)下面的程序main() int x=3,y=O
15、,z=O;if(x=y+z)printf(“* * * *“);else printf(“#“);_。A) 有语法错误不能通过编译B)输出* * * *。c)可以通过编译,但是不能通过连接,因而不能运行D)输出 #答案:D评析:本题的考查点是运算符在表达式中的处理原则。本题中把 y+z 的值赋给 x,由于 y 和 z 都等于 0,所以 x 的值也为 0,表达式值为false,输出撑撑撑撑。if 语句中 if 后面的表达式一般为逻辑或关系表达式,但也可以是任意的数值类型。(18)在 c 语言中,合法的长整型常数是_。A)OL B)4962710 C)04312765 D)0xa34b7fe答案:
16、A评析:在一个整常量后面加一个字母 l 或 L,则认为是 long int 型常量。(19)下面函数24int funl(char*x) char*y=x;while(*y+);return(y-x-1);的功能是_。A) 求字符串的长度 B)比较两个字符串的大小C)将字符串 x 复制到字符串 y D)将字符串 x 连接到字符串 y 后面答案:A评折:本题的考查点是 while()循环语句。本题首先要注意的是对*y+的运算,由于+和*为同一优先级别,且结合方向为自右向左,因此它相当于*(y+)。由于+在 y 的右侧,是“后加“,因此先对 y 的原值进行*运算,然后使 y 的值改变。(20)设
17、int i=2j=l,k=3 ,则表达式 i&(i+j)&ki+j 的值是_。A)O B)2 C)l D)3答案:C评析:本题表达式中优先级顺序从高到低为括号、+、&、& 。(21)已知字母 A 的 ASCII 码为十进制的 65,下面程序main() char chl,ch2;chl=A+5-3:ch2=A+6-3:printf(“d,Cn“,chl,ch2);的输出_。A)67 ,D B)B,C C)C,D D)不确定的值答案:A评析:由于字符“5“和“3“的 ASCII 码相差为 2,所以 ch1 过运算后的值应为 65+2=67;同理,ch2 经过运算后的值应为 65+3=68,即是字
18、符“D“。(22)以下程序的输出结果是_。#includemain()int a,b,d=24l:a=dl009;b=(-1)&(-1);printf(“d,dn“,a,b);25A)6 ,1 B)2,1 C)6 ,0 D)2 ,0答案:B评析:第一个表达式中,运算的方向是从左至右,所以 a 的值为 2;第二个表达式中,等式右边是一个逻辑表达式,由于结果为真,所以表达式的值为 l,即 b 为 1。(23)下列选项中非法的表达式是_。A)0main()Printf(n“,NULL);A) 不确定的 (因变量无定义 ) B)0C)-l D)l答案:B评析:NULL 在 c 编译器中是一个值为 0
19、的常量,它的定义在头文件“stdio h“中,本题的程序在一开始就包含了这个头文件,所以,在打印的时候,将打印出 0。(25)在下面的语句中,赋值语句错误的是_。A)a=(b=(c=2 ,d=3); B)i+:C)a-ab=2; D)a=a0 ;j+=2)s=10*s+(pij0);printf(“dn“,s) ;该程序的输出结果是_。A)69825 B)63825 C)6385 D)693825答案:C评析:本题“ch25=“6937“,“8254“ 用于 2 行 5 列的二维数组初始化,chO0-chO4的值分别为:6,9,3,7,0;ch10-ch14 的值分别为: 8,2,5,4,0;
20、第一个 for 循环用于将数组指针分别指向二给数组的第一行和第二行;第二个 for 嵌套循环用于28取出 pO0,pO2,p10,p12 四个存储单元的数组成一个四位数进行输出。12)以下叙述不正确的是_ 。A) 分号是 C 语言的必要组成部分B)C 程序的注释可以写在句的后面C)函数是 C 程序的基本单位D) 主函数的名字不一定用 main 表示答案:D评析:c 语言的程序是由主函数 main()开始运行,由主函数来调用其他函数,所以 D是错误的。(13)若变量已正确定义并赋值,下面符合 c 语言的表达式是_。A)a :_b+1 B)a=b=c+2 C)int 1853 D)a=a+7=c+
21、b答案:B评析:选项 A 和 c 一望而知其错:对于表达式 a=a+7=c+b(答案 D),是先执行赋值表达式 a+7=c+b,再把这个表达式的值赋给 a,显然,表达式 a+7=c+b 非法,因为赋值表达式的左侧不能为常量或表达式。(14)C 语言运算对象必须是整型的运算符是 _。A) = B) C)= D),则输出结果为_。main()int m,n;printf(“Enter m,n:“);scanf(“d dt ,&m,&n);while(mI-n)while(mn)re-=n,while(nm)n-=m;printf(“m= dn“,m);A)m=3 B)m=2 C)m=l D)m=O
22、答案:C评析:分析程序可知,该程序实现的功能是对数 m,n 求其最大公约数。在本题中 m与 n 的值分别为 65 与 14,其最大公约数为 1,故其输出结果为 m=l。(21)能正确表示逻辑关系:“a10 或 a0“ 的 C 语言表达式是_。A)a=10 or a=0 I a=10&a=10 ll a=10答案:D评析:c 语言中的“ 或“关系用“ “表示,其它相关逻辑运算符 “与“用“&“ 表示;运算符“非 “用“!“来表示。(22)已经定义 ch 为字符型变量,以下赋值表达式中错误的是_。A)ch= B)ch=62+3 C)ch=NULL D)ch=xaa答案:A评析:反斜杠字符“ 赋给字
23、符,应该写成 ch=,所以 A 是错误的。(23)有如下程序main() int x=l,a=0,b=0 ;switch(x)case 0:b+:case 1:a+:case 2:a+;b+;printf(“a=d,b。dn“,a,b);)该程序的输出结果是_。A)a:2, b=1 B)a=l,b=1 C)a=l,b:O D)a=2,b=2答案:A评析:在这个 switch 语句中,因为 x 的值为 1,所以执行 case 1:后面的 a+,这样a=1。但又由于其下没有 break 语句,所以其后面的语句“a+;b+“也将被执行,这样一来,a=2,b=1。(24)有如下程序main() float x=20,y;if(xOO)y=00;else if(xlOO)y=1O x;else y=1O;printf( f n“,y) ;该程序输出结果是_。A)0 000000 B)0250000 C)0500000 D)1000000答案:C评析:本题考查的是 if else 语句的使用。x=20,符合第二个 IF 语句的条件xlOO,所以执行 y=10x 语句,即 y=1020=0500000。