二级C语言选择题专项强化真题试卷17
选择题
1.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。(C)
A. 10
B. 8
C. 6
D. 4
解析:由二叉树的性质可得,对于一个非空的二叉树,叶子结点数等于度为2的结点数目加1。
2.有如下程序段:
int x=1 2;
double y=3.141593;
printf(\\(A)
A. 123.141593
B. 123.141493
C. 12,3.141593
D. 123.1415930
解析:输出的x与y间没有空格,“%8.6f”代表输出字符型数据y的格式应为小数点后保留6位。
3.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈顺序是( )。(B)
A. 12345ABCDE
B. EDCBA54321
C. ABCDEl2345
D. 54321EDCBA
解析:栈按“后进先出”的原则组织数据,因此入栈最晚的最先出栈,因此本题答案为B。
4.下列叙述中正确的是( )。(A)
A. 解决同一个问题的不同算法的时间复杂度一般是不同的
B. 解决同一个问题的不同算法的时间复杂度必定是相同的
C. 对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同
D. 对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同
解析:算法的时间复杂度是指执行算法所需要的计算工作量,而计算工作量是用算法所执行的基本运算次数来度量的。解决同一个问题的不同算法的时间复杂度,可能相同也可能不相同。算法的时间复杂度与数据存储结构无关,对同一批数据做同一种处理或者不同处理,数据存储结构相同或者不同,算法的时间复杂度都可能相同或者不同。故选A选项。
5.设二叉树共有150个节点,其中度为1的节点有10个,则该二叉树中的叶子节点数为( )。(D)
A. 71
B. 70
C. 69
D. 不可能有这样的二叉树
解析:在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。对任何一棵二叉树,度为O的节点总是比度为2的节点多一个。如果有一棵二叉树,节点总数为150,假设度为0的节点个数为n,则有n+10+n—1=150,n=70.5,由于节点个数必须是整数,所以不可能有题目中这样的二叉树。故选择D选项。
6.软件生命周期是指( )。(A)
A. 软件产品从提出、实现、使用维护到停止使用退役的过程
B. 软件从需求分析、设计、实现到测试完成的过程
C. 软件的开发过程
D. 软件的运行维护过程
解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。
7.有以下程序:
#include
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=0;k<2;k++)printf(\\(A)
A. 6,8,
B. 6,9,
C. 6,6,
D. 6,7,
解析:static定义一个静态分布变量,变量只会初始化一次,在for循环体内调用f()函数输出,f()函数首先是将当前n,m,a,k加1后进行累加返回主函数输出,第二次累加时,重新给m,n定义初始值为0,因此,两次输出分别为6,8,故答案为A选项。
8.有以下程序
#include
#include
main()
{
char name[9]=\\(A)
A. 9,7,4,7
B. 8,6,9,6
C. 8,6,3,6
D. 10,8,5,8
解析:由于name是—个长度为9的一维数组,故在内存中占用9个字节长度,而其中字符串“c##1ine”只有7个字符,strlen()函数返回的是该字符串的长度,不包含结束符,str是一个指针变量,占用4个字节长度,但是由于name首地址赋给了str指针变量,在调用strlen()函数时,返回的是指针对应地址单元的字符串的长度7,因此答案为A选项。
9.在最坏情况下,二分查找法的时间复杂度为( )。(C)
A. B.
C. log2n
D. n
解析:二分法查找也称拆半查找,能使用二分法查找的线性表必须满足两个条件,用顺序存储结构以及线性表有序。利用二分法查找元素x的过程如下:将x与线性表的中间项比较,如果x的值与中间项的值相等,则查找成功,结束查找;如果x小于中间项的值,则在线性表的前半部分以二分法继续查找;如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。可以证明,对于长度为n的有序线性表,在最坏情况下,二分法查找需比较log2n次,故时间复杂度为log2n。故选择C选项。
10.设变量已正确定义并赋值,以下正确的表达式是( )。(A)
A. x=y+z+5,++y
B. int(15.8%5)
C. x=y*5=x+z
D. x=25%5.0
解析:B)与D)选项中取模运算符%的左右两个操作数应均为整数,所以B)、D)错误。C)选项中不能将x+y的值赋给表达式y*5,所以C)错误。
11.没有定义:
int k=0;
以下选项的四个表达式中与其他三个表达式的值不相同的是( )。(C)
A. ++k
B. k+=1
C. k++
D. k+1
解析:++k,先使k的值自增1后再使用,k++是先取得k的值再将k的值自增1,所以C选项中表达式的值为0,而其他三个表达式的值均为1,所以选择c。
12.有以下程序:
#include<stdio.h>
main( )
{int x;
scanf(\\(D)
A. 小于3的整数
B. 不等于10的整数
C. 大于3或等于10的整数
D. 大于3且不等10的整数
解析:根据代码可知如果x的值小于等于3,执行空语句,不进行打印操作。如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。
13.以下选项中,能够正确利用随机函数rand( ),产生一个英文字母的表达式是( )。(D)
A. rand( )%2==0?rand( )%’A’
本文档预览:3600字符,共8215字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载