期C语言新增选择题套_第1页
期C语言新增选择题套_第2页
期C语言新增选择题套_第3页
期C语言新增选择题套_第4页
期C语言新增选择题套_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

1、第一套1.下列叙述中正确的是A) 所谓算法就是计算方法B) 程序可以作为算法的一种描述方法C) 算法设计只需考虑得到计算结果 D) 算法设计可以忽略算法的运算时间 参考答案:B【解析】算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等于程序,A选项错误。算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑计算结果,C选项错误。算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,D选项错误。算法在实现时需要用具体的程序设计语言描述,所以程序可以作为算法的一种描述方法,B选项正确。2.下列各序列

2、中不是堆的是A) (91,85,53,36,47,30,24,12) B) (91,85,53,47,36,30,24,12)C) (47,91,53,85,30,12,24,36) D) (91,85,53,47,30,12,24,36) 参考答案:C【解析】若有个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆:大根堆,所有结点的值大于或等于左右子结点的值;小根堆,所有结点的值小于或等于左右子结点的值。A、B、D选项属于大根堆,C选项由于47<91,判断属于小根堆,但91>85,不满足条件,不是堆,故正确答案为C选项。3. 深度为5的完全二叉树的结点数不

3、可能是A) 15B) 16C) 17D) 18 参考答案:A【解析】在树结构中,定义一棵树的根结点所在的层次为,其他结点所在的层次等于它的父结点所在的层次加,树的最大层次称为树的深度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。深度为5的二叉树,结点个数最多为25-1=31,最少为24=16,不可能是15,故正确答案为A选项。4.A) ABDEGCFH B) DBGEAFHC C) DGEBHFCA D) ABCDEFGH 参考答案:A【解析】二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子

4、树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故A选项正确。5. 下面描述不属于软件特点的是A) 软件是一种逻辑实体,具有抽象性B) 软件在使用中不存在磨损、老化问题C) 软件复杂性高D) 软件使用不涉及知识产权 参考答案:D【解析】软件具有以下特点:软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂性高,成本昂贵;软件开发涉及诸多的社会因素,如知识产权等。故选项D正确。6. 下面对类-对象主要特征描

5、述正确的是A) 对象唯一性 B) 对象无关性 C) 类的单一性 D) 类的依赖性 参考答案:A【解析】对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。对象具有的性质,类也具有。故A选项正确。下面对类-对象主要特征描述正确的是A) 对象唯一性 B) 对象无关性 C) 类的单一性 D) 类的依赖性 参考答案:A【解析】对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。

6、对象具有的性质,类也具有。故A选项正确。7. 在数据库中,数据模型包括数据结构、数据操作和A) 数据约束 B) 数据类型C) 关系运算 D) 查询 参考答案:A【解析】数据模型通常由数据结构、数据操作及数据约束部分组成。故A选项正确。8. 一个运动队有多个队员,一个队员仅属于一个运动队,一个队一般都有一个教练,则实体运动队和队员的联系是A) 一对多 B) 一对一 C) 多对一D) 多对多 参考答案:A【解析】一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。实体运动队和队员的关系为1:m联系,故A选项正确。9. 设循环队

7、列为Q(1: m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=30,rear=10。现要在该循环队列中作顺序查找,最坏情况下需要比较的次数为A) 19B) 20 C) m-19 D) m-20 参考答案:D【解析】循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=30,rear=10时,队列中有m-30+10+1=m-19个元素,比较

8、次数为m-20次,D选项正确。设循环队列为Q(1: m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=30,rear=10。现要在该循环队列中作顺序查找,最坏情况下需要比较的次数为A) 19B) 20 C) m-19 D) m-20 参考答案:D【解析】循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=30,rear=10时,队列中有m

9、-30+10+1=m-19个元素,比较次数为m-20次,D选项正确。10. A) 投影 B) 交C) 选择 D) 并 参考答案:A【解析】用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。投影,从关系模式中指定若干个属性组成新的关系,题目中从R中指定AB组成新的关系T,故A选项正确。选择,从关系中找出满足给定条件的元组的操作称为选择,即结果T应该包含R中全部属性,故C选项错误。假设,R与S经过某种关系得到T,则并:RS是将S中的记录追加到R后面;交:RS结果是既属于R又属于S的记录组成的集合。上述两种操作中,关系R与

10、S以及T要求有相同的结构,故B、D选项错误。11. 以下叙述正确的是A) 计算机只接收由0和1代码组成的二进制指令或数据B) 计算机只接收由0和1代码组成的十进制指令或数据C) 计算机可直接接收并运行C源程序D) 计算机可直接接收并运行任意高级语言编写的源程序 参考答案:A【解析】计算机认识自己的母语-机器语言,即0和1代码组成的二进制指令或数据,故A选项正确,B选项错误。C语言是一种高级语言,计算机不能直接运行C源程序和高级语言编写的源程序,C和D选项错误。12. 以下叙述正确的是A) 计算机只接收由0和1代码组成的二进制指令或数据B) 计算机只接收由0和1代码组成的十进制指令或数据C) 计

11、算机可直接接收并运行C源程序D) 计算机可直接接收并运行任意高级语言编写的源程序 参考答案:A【解析】计算机认识自己的母语-机器语言,即0和1代码组成的二进制指令或数据,故A选项正确,B选项错误。C语言是一种高级语言,计算机不能直接运行C源程序和高级语言编写的源程序,C和D选项错误。13. 若有定义:char c; int d; 程序运行时输入:c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是A) scanf("c=%d d=%d", &c,&d);B) scanf("c=%c d=%d", &a

12、mp;c,&d);C) scanf("c=%d,d=%d", &c,&d);D) scanf("c=%c,d=%d", &c,&d); 参考答案:D【解析】scanf()函数中,%d对应的参数是整数型地址,%c对应参数为char型地址,C,A选项错误;如果输入地址有多个,应该用逗号隔开,B选项错误,故答案为D选项。14. 以下选项中,与n=i+ 完全等价的表达式是A) n=i,i=i+1B) n+=i+1 C) i=i+1,n=iD) n=+i 参考答案:A【解析】运算符"+"放在变量后面时,表

13、示变量先参与其他操作,再完成加1,故表达式n=i+运算顺序是先将i赋值给n,再将i+1赋值给i,因此答案为A选项。15. 设有定义:int n = 1234; double x = 3.1415;则语句 printf("%3d,%1.3fn", n, x); 的输出结果是A) 1234,3.142B) 123,3.142C) 1234,3.141D) 123,3.141 参考答案:A【解析】函数printf()中,%md指输出带符号的十进制整数,给定最小宽度为m位,不足m位左端补空格,超过m位按实际位数输出,%.nf表示以小数形式输出实数,小数占n位,对应题目,答案为A选项

14、。16. 有以下程序#include <stdio.h>main( ) int a,b; for (a=0; a<3; a+) scanf("%d", &b); switch(b) default: printf("%d,", +b); case 1: printf("%d,", +b); case 2: printf("%d,", +b); 执行时输入:1 2 3<回车>,则输出结果是A) 2,2,3,4,4,4,B) 2,3,4,C) 2,3,3,4,5,6,D) 2,3,

15、4,3,4,4, 参考答案:C【解析】程序在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,执行对应的case语句,之后不再进行判断,继续执行此case后面的语句,并且各个case和default的出现次序不影响执行结果,即题目中的default放在开始位置,与放在最后是一样的结果;运算符"+"放在变量前面时,表示将变量+1,再参与其他操作。本题,第一次循环输入b=1,执行case 1,输出2,再执行case 2,输出3,第二次循环输入b=2,执行case 2输出3,第三次循环,输入b=3,没有case与其对应,故执行default输出b=4,接着

16、执行case 1:,输出5,再执行case 2,输出b=6,至此退出for语句。因此,最后输出为2,3,3,4,5,6,答案为C选项。17. 设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是A) m=(m*100+0.5)/100.0B) n=m*100+0.5, m=n/100.0C) n=m/100+0.5, m=n*100.0D) m=m*100+0.5/100.0 参考答案:B【解析】n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留m的小数点后两位,需要将m乘以100,若要将m小数点后第三位四舍五入,

17、再需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成有两位小数的浮点数,除号两边操作数有一个是浮点数时,结果为浮点数,将n/100.0赋值给m,得到m的值含两位小数,故答案为B选项。18. 有以下程序#include <stdio.h>main( ) int a = 1, b = 1; for( ; a-; ) b-; printf("%d,%dn", a, b);程序运行后的输出结果是A) -1,0B) 0,0C) -1,-1D) 1,1 参考答案:A【解析】题干中语句for( ; a-; ),条件a-!=0先判断a!=0成立,

18、则进入循环,然后a减1,起始a=1不等于0,满足条件进入for循环,然后a自减1为0,b自减1为0,继续循环;再跳回for语句时,a!=0不成立,不会进入循环,但是a也要自减1为-1,循环结束;因此最后输出a=-1,b=0.因此答案为A选项。19. 若有定义:char s30 = 0;运行时输入:This is a string.<回车>则以下不能正确读入整个字符串:This is a string. 到字符数组 s 中的语句组是A) i = 0;while (c=getchar()!='n') si+ = c;B) gets(s);C) for (i=0; (c=

19、getchar() != 'n' i+) si = c;D) scanf("%s", s); 参考答案:D【解析】在使用格式符"%s"进行字符串的输入时,空格和回车(Enter)会被读入,并且函数scanf以它们作为分隔符停止一个字符串的输入,因此答案为D选项。20. 有如下程序#include <stdio.h>main( ) int a = 0, b = 1; if (a+ && b+) printf("TRUE"); else printf("FALSE"); pr

20、intf("_OUT:a=%d,b=%dn", a, b);程序运行后的输出结果是A) FALSE_OUT:a=1,b=1B) FALSE_OUT:a=0,b=2C) TRUE_OUT:a=1,b=2D) TRUE_OUT:a=0,b=1 参考答案:A【解析】逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a+ && b+)中,左操作数a+的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b+不再求解,进入else分支执行,a的值+1,b不变,因此答案为A选项。2

21、1. 有如下程序#include <stdio.h>main( ) int i, data; scanf("%d", &data); for (i=0; i<5; i+) if (i < data) continue; printf("%d-", i); 程序运行时,从键盘输入:3<回车>后,程序输出结果为A) 3-4-B) 1-2-3-C) 0-1-2-D) 0-1-2-3- 参考答案:A【解析】从键盘输入3,即data=3,进入for语句,满足i<3时,运行continue语句只结束本次循环,而不是终

22、止整个循环的执行,当i加到3时,if条件不满足,执行printf函数,输出3-,i再加到4,输出4-,i再加1等于5,退出for循环,程序运行后结果是:"3-4-"。因此答案为A选项。22. 有以下程序#include <stdio.h>main( ) int a = 0, b = 1; if (+a = b+) printf("1"); else printf("0"); printf("a=%d,b=%dn", a, b);程序运行后的输出结果是A) 1a=0,b=1B) 0a=1,b=2C) 1a

23、=1,b=2D) 0a=0,b=2 参考答案:C【解析】运算符"+"放在变量后面时,表示先执行其他操作,再将变量+1,运算符"+"放在变量前面时,表示将变量+1,再参与其他操作。因此if(+a=b+) 为真,输出1,再输出a,b,程序运行后的结果是:1a=1,b=2。因此答案为C选项。23. 有如下程序段 for (i=0; i<10; i+) if (i <= 5) break;则循环结束后i的值为A) 1B) 0C) 5D) 10 参考答案:B【解析】if (i <= 5) break语句,表示如果i<=5,执行break语句

24、,跳出循环程序,起始i=0满足if语句,则循环结束后i值为0,因此答案为B选项。24. 设有定义:int a=0,b=1;,以下表达式中,会产生"短路"现象,致使变量b的值不变的是A) a+ && b+B) a+ | +bC) +a && b+D) +a | +b 参考答案:A【解析】运算符"+"放在变量前面时,表示将变量+1,再参与其他操作,a+ && b+时,由于a值是0直接判定与运算结果为0,忽视b+的值,因此b值不发生改变,答案为A选项。25. 有如下程序段 for(i=0;i<10;i+)

25、if(i>5) break;则循环结束后i的值为A) 10B) 5C) 9D) 6 参考答案:D【解析】if(i>5) break;表示判断i值,如果大于5后,执行break语句,结束循环程序,这里i=6,循环结束。因此答案为D选项。26. 有以下程序段 int x ,i ; for(i=1;i<=100;i+) scanf("%d",&x); if(x<0) continue; printf("%4dn",x); 下面针对上述程序段的描述正确的是A) 最多可以输出100个非负整数B) 当x<0时结束整个循环C) 当

26、x>=0时没有任何输出D) printf函数调用语句总是被跳过 参考答案:A【解析】continue语句只结束本次循环,而不是终止整个循环的执行,因此B选项错误;当x>=0时,程序执行printf("%4dn",x)语句,因此排除C,D选项,答案为A选项。27. 关于地址和指针,以下说法正确的是A) 通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量B) 可以取一个常数的地址赋值给同类型的指针变量C) 可以取一个表达式的地址赋值给同类型的指针变量D) 可以取一个指针变量的地址赋值给基类型相同的指针变量 参考答案:A【解析】常数的地址存储在内存的常

27、量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D选项错误。故答案为A选项。28. 有以下程序#include <stdio.h>#define N 4void fun(int aN) int i; for(i=0; i<N; i+) a0i += aN-1N-1

28、-i;main( ) int xNN= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, i; fun(x); for (i=0;i<N; i+) printf("%d,", xii); printf("n");程序运行后的输出结果是A) 4,7,10,13,B) 1,6,11,16,C) 17,6,11,16,D) 5,13,21,29, 参考答案:C【解析】N=4,for(i=0,i<N,i+) printf(xij);此语句输出x00, x11,x22,x33,其中只有x00的值在fun函

29、数中发生改变,在fun函数中,当i=0时,x00= x00+x33=17,程序运行后的输出结果是:17.6.11.16。因此答案为C选项。29. 有以下程序#include <stdio.h>#define N 4void fun(int aN) int i; for(i=0; i<N; i+) a0i += aN-1N-1-i;main( ) int xNN= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, i; fun(x); for (i=0;i<N; i+) printf("%d,", xii

30、); printf("n");程序运行后的输出结果是A) 4,7,10,13,B) 1,6,11,16,C) 17,6,11,16,D) 5,13,21,29, 参考答案:C【解析】N=4,for(i=0,i<N,i+) printf(xij);此语句输出x00, x11,x22,x33,其中只有x00的值在fun函数中发生改变,在fun函数中,当i=0时,x00= x00+x33=17,程序运行后的输出结果是:17.6.11.16。因此答案为C选项。30. 以下叙述正确的是A) 不能在数组说明符的一对方括号中使用表达式B) char c1, *c2, *c3, c4

31、2; 是C语言的合法语句C) 数组下标的最小值可以是负值D) 若有数组定义 int array5; 则语句 printf("%d",array1.23);是合法的 参考答案:B【解析】在B选项中,c1是字符型变量,c2是字符型指针变量,c3是指向字符型指针的指针变量,c42是一个一维字符数组,这些都是C语言的合法语句,因此答案为B选项。31. 有以下程序#include <stdio.h>main( ) int a = 2, *ptr; ptr = &a; *ptr = 8; a = (*ptr) +; printf("%d,%dn"

32、, a, *ptr);程序运行后的输出结果是A) 9,9B) 8,9C) 2,4D) 0,4 参考答案:A【解析】题干中定义一个指针变量ptr,再把a的地址值赋给ptr,此时a和*ptr代表同一内存单元中的值,*ptr=8表示把a和*ptr的值修改为8,a = (*ptr) +表示把指针ptr对应地址单元里的值赋给a,再将ptr对应地址单元里的值加1,因此*(ptr)值为9,同时a也为9,因此答案为A选项。32. 有以下程序#include <stdio.h>main( ) int i, *ptr; int array4 = 0,1; for (ptr=array, i=0; i&

33、lt;3; i+, ptr+) if (*ptr = 0) putchar('#'); else putchar('M' + *ptr); printf("n");程序运行后的输出结果是A) MO#B) #F#C) MMMD) #N# 参考答案:D【解析】for语句中把array数组首地址值赋给ptr,ptr+表示每次执行完循环体后,ptr指向下一数组元素,当指针指向值为0时,输出#,否则'M'再加上指针对应数组值进行输出,当*ptr=1时,'M'+1='N',结果输出为#N#,答案为D选项。3

34、3. 有以下程序段: int m23,(*p)3; p=m;则以下对m数组元素的引用正确的是A) (p+1)0B) *(*(p+2)+1)C) *(p1+1)D) p1+2 参考答案:C【解析】数组元素aij可表示为*(ai+j),因此,在定义数组m和指针变量p后,*(p1+1)表示指向数组m11,因此答案为C选项。34. 有以下程序#include <stdio.h>char *a = "you"char *b = "Welcome you to Beijing!"main( ) char *p; p = b; while (*p != *

35、a) p+; printf("%sn", p);程序运行后的输出结果是A) you to Beijing!B) to Beijing!C) Welcome you to Beijing!D) Beijing! 参考答案:A【解析】程序首先定义两个字符串,a,b指针分别指向这两个字符串首地址,再定义了一个指针p,把b指针指向的地址赋给了p指针后,判断p指针指向地址的内容是否和a指针指向地址的内容相等,如果不是,则移动指针p+1,当p指向*b字符串中的'y'时,和*a首地址元素相等,退出while语句,输出剩下字符串内容,程序运行后的输出结果是"You

36、 To BeiJing!"答案为A选项。35. 有以下程序#include <stdio.h>void f(int x, int n) if (n > 1) printf("%d,", xn-1); f(x, n-1); printf("%d,", xn-1); else printf("%d,", x0);main( ) int z3 = 1, 2, 3; f(z,3); printf("n");程序运行后的输出结果是A) 3,1,3,B) 3,2,1,2,3,C) 1,2,3,1,2

37、,3,D) 1,2,3,2,1, 参考答案:B【解析】本题考查了函数的递归调用,在main函数中调用f(z,3)后,系统进入f()函数,随后进入if语句,输出x2,再进入f()函数,输出x1,再进入f函数,输出x0,随后结束返回输出上一个f()函数,输出xn-1,程序运行后的结果是:3,2,1,2,3。答案为B选项。36. 有以下程序#include <stdio.h>int a = 2;int f(int k) static int n; int m; m = n = 0; n+; a+; m+; k+; return n+m+a+k;main( ) int k; for (k=

38、0; k<2; k+) printf("%d,", f(k); printf("n");程序运行后的输出结果是A) 6,8,B) 6,9,C) 6,6,D) 6,7, 参考答案:A【解析】static定义一个静态分布变量,变量只会初始化一次,在for循环体内调用f()函数输出,f()函数首先是将当前n,m,a,k加1后进行累加返回主函数输出,第二次累加时,重新给m,n定义初始值为0,因此,两次输出分别为6,8,答案为A选项。37. 有以下程序#include <stdio.h>int sum(int* array, int len) i

39、f (len = 1) return array1; else return array1 + sum(array+1, len-1);main( ) int array5 = 0,9,1,2, res; res = sum(array, 3); printf("%dn", res);程序运行后的输出结果是A) 27B) 11C) 8D) 12 参考答案:D【解析】main函数中先定义一个数组array,调用sum(array,3)函数,形参array指向数组首地址,形参len的值为3,在sum函数中, array1指向数组中元素9,sum函数调用三次,完成功能是将数组ar

40、ray1+ array2+ array3累加后返还给输出,累加后的值为12。因此,答案为D选项。38. 有以下程序#include <stdio.h>main() char s10 = "verygood", *ps = s; ps = "too" s4 = '0' puts(ps); 程序的运行结果是A) tooB) verygoodC) veryD) good 参考答案:A【解析】程序中定义指针ps后,将数组s首地址赋给ps初始化后,再使指针ps指向字符串"too"的首地址,修改s4(即字符g)不会改变

41、ps的值,所以输出ps的结果是"too",答案为选项A。39. 以下叙述中错误的是A) 函数中的形参属于局部变量B) 在函数内部定义的变量只能在本函数范围内使用C) 在函数外部定义的变量在所有函数中都有效D) 在不同的函数中可以使用相同名字的变量 参考答案:C【解析】全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的函数访问所以C选项说法错误,答案为C选项。40. 有以下程序#include <stdio.h>main( ) FILE *fp; int i, a6 = 1,2,3,

42、4,5,6, k; fp = fopen("data.dat", "w+"); fprintf(fp, "%dn", a0); for (i=1; i<6; i+) rewind(fp); fprintf(fp, "%dn", ai); rewind(fp); fscanf(fp, "%d", &k); fclose(fp); printf("%dn", k);程序运行后的输出结果是A) 6B) 21C) 123456D) 654321 参考答案:A【解析】本题

43、首先定义文件指针变量fp和一个数组a,再打开一个文件"data.dat",随后先给文件写入数据a0,由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k值,答案为A选项。第二套1. 下列叙述中正确的是A) 循环队列是顺序存储结构 B) 循环队列是链式存储结构C) 循环队列是非线性结构 D) 循环队列的插入运算不会发生溢出现象 参考答案:A【解析】循环队列是队列的一种

44、顺序存储结构. 线性结构是个数据元素构成的有限序列,除第一个元素外的每一个元素,有且只有一个前件,除最后一个元素外,有且只有一个后件。循环队列是线性结构。当需要插入的数据大于循环队列的存储长度,入队运算会覆盖前面的数据,发生溢出现象。故A选项正确。2. 下列叙述中正确的是A) 所有数据结构必须有根结点 B) 所有数据结构必须有终端结点(即叶子结点)C) 只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D) 没有根结点或没有叶子结点的数据结构一定是非线性结构 参考答案:D【解析】一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为

45、线性结构,在数据结构中习惯称为线性表,D选项正确。图是可能不包含根结点或叶子结点的数据结构,AB选项错误。数据结构中若有中间结点不满足只有一个前件或者后件条件,则不属于线性结构,C选项错误。3. 下列关于算法的描述中错误的是A) 算法强调动态的执行过程,不同于静态的计算公式B) 算法必须能在有限个步骤之后终止C) 算法设计必须考虑算法的复杂度 D) 算法的优劣取决于运行算法程序的环境 参考答案:D【解析】算法是指对解题方案的准确而完整的描述,简单地说,就是解决问题的操作步骤。算法不同于数学上的计算方法,强调实现,A选项叙述正确。算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时

46、间内完成,B选项叙述正确。算法复杂度包括算法的时间复杂度和算法的空间复杂度。算法设计必须考虑执行算法所需要的资源,即时间与空间复杂度,故C选项叙述正确。算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行受到计算机系统运行环境的限制,故正确答案为D选项。4. 在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数A) 相同,元素的存储顺序与逻辑顺序一致B) 相同,但其元素的存储顺序可以与逻辑顺序不一致C) 不同,但元素的存储顺序与逻辑顺序一致D) 不同,且其元素的存储顺序可以与逻辑顺序不一致 参考答案:A【解析】顺序表具有以下两个基本特征:线性表中所有元素所占

47、的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中,每个元素占有相同的存储单元。A选项正确。5.A) ABDEGCFH B) DBGEAFHC C) DGEBHFCAD) ABCDEFGH 参考答案:B【解析】二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故B选项正确。6. 下面不属于软件需求分析阶段工作的是A) 需求获取 B) 需求计

48、划 C) 需求分析 D) 需求评审 参考答案:B【解析】需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审,而需求计划不属于需求分析阶段的工作,故正确答案为B选项。7. 下面不属于黑盒测试方法的是A) 边界值分析法B) 基本路径测试C) 等价类划分法 D) 错误推测法 参考答案:B【解析】常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等。基本路径测试属于白盒测试,故正确答案为B选项。8. 在数据库系统中,数据模型包括概念模型、逻辑模型和A) 物理模型 B) 空间模型 C) 时间模型D) 数据模型 参考答案:A【解析】数据模型按照不同

49、的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型,故A选项正确。9. 若实体A和B是一对一的联系,实体B和C是多对一的联系,则实体A和C的联系是A) 多对一B) 一对多 C) 一对一 D) 多对多 参考答案:A【解析】一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。A与B是1:1联系,B与C是m:1联系,则A与C是m:1联系,即多对一,故A选项正确。10. 某二叉树中共有935个结点,其中叶子结点有435个,则该二叉树中度为2的结点个数为A) 64B) 66C) 436 D) 434 参考答案:D【解析

50、】在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。叶子结点有435个,则度为2的结点为434,D选项正确。11. 简单程序设计步骤中不包括A) 编码B) 确定算法C) 安装编译程序D) 调试 参考答案:C【解析】简单程序设计步骤为:确定数据结构、确定算法、编码、调试、整理文档,不包括安装编译程序,故答案为C选项。12. 若想给已定义为int型的变量a,b,c,d赋值为1,以下选项中错误的语句是A) d=1, c=d, b=c, a=b;B) a=b=c=d=1;C) a=1, b=a, c=

51、b, d=c;D) a=b, b=c, c=d, d=1; 参考答案:D【解析】赋值是将一个常量的值赋给一个变量,在D选项中,变量b的值相当于一个未知的数,用b对a赋值不满足,不满足题干要求的变量a、b、c、d赋值为1的条件,因此答案选D选项。13. 有C语言表达式 2*3+4+15%3 ,关于其执行顺序,以下叙述正确的是A) 先执行2*3得6,再执行6+4得10,再执行15%3得0,最后执行10+0得10B) 先执行2*3得6,再执行15%3得5,最后执行6+4+5得15C) 先执行15%3得0,再执行2*3得6,最后执行6+4+0得10D) 先执行15%3得3,再执行4+3得7,再执行2*3得6,最后执行6+7得13 参考答案:A【解析】首先运算符"*"和运算符"%"有相同优先级,并且优先级都高于运算符'+',再根据运算结合性,乘法和取余运算都满足从左到右的运算规则,C,D选项错误;因为15%3=0,排除B选项,答案为A选项。14. 若有定义:int a; float b; double c; ,程序运行时输入

温馨提示

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

最新文档

评论

0/150

提交评论