国家二级C++机试(选择题)模拟试卷239
选择题
1.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(B)
A. 12345ABCDE
B. EDCBA54321
C. ABCDE12345
D. 54321EDCBA
解析:栈是按照“先进后出”或“后进先出”的原则组织数据的。所以出栈顺序是EDCBA54321。
2.对如下二叉树
(D)
A. ABCDEF
B. DBEAFC
C. ABDECF
D. DEBFCA
解析:所谓后序遍历是指在访问根据结点、遍历左子树与遍历右予树这三者中,首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。其简单描述为:若二叉树为空,则结束返回;否则,先后序遍历左子树,然后后序遍历右子树,最后访问根结点。对于后序遍历,第一个访问的结点一定是最左下的结点,最后一个访问的结点一定是根结点,所以选项D为正确答案。
3.以下关键字不能用来声明类的访问权限的是( )。(B)
A. public
B. static
C. protected
D. private
解析:类的成员访问权限有3种:public(公用)、protected(保护)、private(私有)。
4.若已定义
int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a数组元素不正确的引用是( )。(D)
A. a[p-a]
B. *(&a[i])
C. p[i]
D. a[10]
解析:数组有N个元素,则数组元素引用为a(0)~a(N.1),共计N个,没有a(10)这个元素,最后的元素是a(9)。
5.结构化程序所要求的基本结构不包括( )。(B)
A. 顺序结构
B. GOTO跳转
C. 选择(分支)结构
D. 重复(循环)结构
解析:结构化程序的基本结构有;顺序结构、选择结构和循环结构,没有GOTO跳转结构。
6.下面的描述中,正确的是( )。(A)
A. virtual可以用来声明虚函数
B. 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
C. 即使基类的构造函数没有参数,派生类也必须建立构造函数
D. 静态数据成员可以通过成员初始化列表来初始化
解析:在基类中用virtual声明成员函数为虚函数,所以A是正确的。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。
7.假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。(B)
A. MyClass(MyClass x);
B. MyClass(MyClass &x);
C. MyClass(&x);
D. MyClass(x);
解析:拷贝构造函数也是构造函数,所以函数名字为MyClass,但它只有一个参数,这个参数是本类的对象,即x;而且采用对象的引用的形式,也就是&x。所以本题答案是B。
8.下列枚举类型的定义中,包含枚举值3的是( )。
A
解析:声明枚举类型的语法格式为:enum<类型名>{<枚举值表>};<枚举值表>包含多个枚举值,它们用逗号隔开,每个枚举值就是一个枚举常量。枚举值有两种定义形式:一是<值名>;二是<值名>=<整型常量>。关于枚举类型有以下4点说明:
①一个enum类型实际上是int类型的一个子集,其每一个枚举值代表一个整数。
②n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1,…n-1对应。
③若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2…对应,直到下一个赋了值的枚举值或结束。因此,为枚举值赋的整型常量值应从左到右递增。
④枚举类型的声明也可作为组声明若干整型符号常量的方法。也就是说,把每个要声明的符号常量作为一个枚举值,将各个枚举值合在一起定义成一个枚举类型。
对于本题来说,在选项A)中,对4个枚举值没有赋常量值,所以它们从左到右与整数0,1,2,3相对应。因而选项A)为正确选项。
9.计算斐波那契数列第n项的函数定义如下:
int fib(int n){
if(n==0)return 1;
else if(n=1) return 2;
else retum fib(n一1)+fib(n一2);
}
若执行函数调用表达式fib(2),函数fib被调用的次数是( )。(B)
A. 1
B. 2
C. 3
D. 4
解析:斐波那契数列是递归函数,所以fib(2)=fib(1)+fib(0)=2+1=3。因而执行函数调用表达式fib(2)时,函数fib被调用的次是2次。
10.若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是( )。(D)
A. XV operator*(XV,XV);
B. XV*(XV);
C. operator*(XV);
D. XV operator*(XV);
解析:*是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以一this指针的形式隐藏在参数表中。
11.有如下程序:
#include<iostream>
using namespace std;
int main()
{
char str [100],*p;
cout<<’’Please input a string:’’;
cin;str;
p=str;
for(int i=0;*p!=’\0’;p++,i++);
cout<<’’i’’<<end1;
return 0;
}
运行这个程序时,若输入字符串为:
abcdefg abcd
则输出结果是( )。(A)
A. 7
B. 12
C. 13
D. 100
解析:此题考查的是默认输入格式。本题输入数据类型为char,因此输入的数据是“从第一个非空白字符开始到下一个空白字符结束”,而输入数据为abcdefg abed,其中abcdefg后有空格。所以输入后str中的字符串为\\
12.下列定义语句中,错误的是( )。(A)
A. int px*;
B. char*acp[10];
C. char(
本文档预览:3600字符,共7742字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载