1、国家二级 C+机试(选择题)-试卷 15 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列关于算法复杂度叙述正确的是(分数:2.00)A.最坏情况下的时间复杂度一定高于平均情况的时间复杂度B.时间复杂度与所用的计算工具无关C.对同一个问题,采用不同的算法,则它们的时间复杂度是相同的D.时间复杂度与采用的算法描述语言有关2.设有栈 S 和队列 Q,初始状态均为空。首先依次将 A,B,C,D,E,F 入栈,然后从栈中退出三个元素依次入队,再将 X,Y,Z 入栈后,将栈中所有元素退出并依次入队,最后将队列中所有元素退出,则退队元素的顺序为(分数
2、:2.00)A.DEFXYZABCB.DEFXYZABCC.FEDXYZCBAD.DEFZYXABC3.下列叙述中正确的是(分数:2.00)A.有两个指针域的链表称为二叉链表B.循环链表是循环队列的链式存储结构C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表D.结点中具有多个指针域的链表称为多重链表4.某二叉树共有 845 个结点,其中叶子结点有 45 个,则度为 1 的结点数为(分数:2.00)A.400B.754C.756D.不确定5.软件需求分析阶段的主要任务是(分数:2.00)A.确定软件开发方法B.确定软件开发工具C.确定软件开发计划D.确定软件系统的功能6.下面对软件测试描述错
3、误的是(分数:2.00)A.严格执行测试计划,排除测试的随意性B.随机地选取测试数据C.随机地选取测试数据D.软件测试是保证软件质量的重要手段7.结构化程序的三种基本控制结构是(分数:2.00)A.顺序、选择和重复(循环)B.过程、子程序和分程序C.顺序、选择和调用D.调用、返回和转移8.数据库中对概念模式内容进行说明的语言是(分数:2.00)A.数据定义语言B.数据操纵语言C.数据控制语言D.数据宿主型语言9.某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中。则实体仓库和零件间的联系是(分数:2.00)A.多对多B.一对多C.多对一D.一对一10.有三个关系 R、
4、S 和 T 如下: (分数:2.00)A.并B.投影C.交D.选择11.下列选项中,正确的 C+标识符是(分数:2.00)A.a3B.a-3C.a3D.a_312.下列选项中,正确的 C+表达式是(分数:2.00)A.a1+B.b+2C.3=cD.-d413.要定义整型数组 x,使之包括初值为 1 的三个元素,下列语句正确的是(分数:2.00)A.static int x3=1;B.int x3;x1=x2=x3=1;C.int x3=1,1,1;D.int x=1,1,1;14.常量 4.2,4.2f,4L 的数据类型分别是(分数:2.00)A.float、float、doubleB.dou
5、ble、float、longC.double、double、floatD.float、float、long15.设变量 x 和 y 为整型变量,若有函数调用为“fun(B.void fun(int C.void fun(int *a,int D.void fun(int *a,int *b)16.下列关于函数参数的叙述中,错误的是(分数:2.00)A.函数的实参与形参应该一一匹配B.定义函数时必须给出函数的实参C.函数形参可以看做函数的局部变量D.C+中可以为形参指定默认值17.下列选项中,不是重载函数调用时选择依据的是(分数:2.00)A.参数个数B.参数类型C.参数名称D.函数名称18.若
6、为类 MyClass 重载运算符“+“,下列声明中,错误的是(分数:2.00)A.friend MyClass operator + (double, double);B.friend MyClass operator + (double, MyClass);C.friend MyClass operator + (MyClass, double);D.friend MyClass operator + (MyClass, MyClass);19.有如下程序: #include using namespace std; void fun(int x=y/4; x+; int main() in
7、t x=4,y=5; fun(x,y); coutfun();C.Base:fun();D.fun();24.如果派生类以 protected 方式继承基类,则基类中的保护成员在派生类中的访问属性是(分数:2.00)A.publicB.protectedC.privateD.protected 或 public25.有如下两个类定义: class XX private: double x1; protected: double x2; public: double x3; ;class YY: protected XX private: double y1; protected: double
8、 y2; public: double y3; ;在派生类 YY 中的保护成员的个数是(分数:2.00)A.1B.2C.3D.426.有如下类声明: class What int n; public: double d; private: char c; ;类 What 的公有数据成员和私有数据成员的数量分别是(分数:2.00)A.1 和 1B.1 和 2C.2 和 1D.2 和 227.除了显式定义的构造函数外,类中还有可能包含编译器自动生成的构造函数,因此一个类所拥有的构造函数的至少有(分数:2.00)A.1 个B.2 个C.3 个D.4 个28.有如下类声明: class How int
9、 k; public: How():k(99) ;则类 How 所拥有的构造函数的数量是(分数:2.00)A.1B.2C.3D.429.在下面的类声明中,错误的是(分数:2.00)A.class AA BB b; ; class BB AA a; ;B.class AA AA *a; ; class BB BB ;C.class BB; class AA BB *b; ; class BB AA a; ;D.class AA; class BB AA ; class AA BB b; ;30.有如下类声明和函数声明: class Base int m; public: int n; prote
10、cted: int p; ; class Derived: public Base int k; ; void f(Derived d);则允许函数 f 访问的参数 d 的数据成员的个数是(分数:2.00)A.1B.2C.3D.431.有如下类声明: class How int k; public: How() coutbark()D.( class AA char c; public: AA():c(X) AA(char ch):c(ch) AA(AA C.Base:fun(); D.fun();解析:解析:基类 Base 和派生类 Derived 中使用同一名字的成员函数 fun,所以在派
11、生类 Derived 的作用域中,派生类 Derived 中的 fun 函数会屏蔽基类 Base 中的 fun 函数,即 Base 的 fun 函数对 Derived 不可见,这是因为编译器在查找名字 fun 时,首先在 Derived 中找到,这样编译器就不再继续查找,所以若想在 Derived 中调用 Base 的 fun 函数,必须显式的说明 fun 函数属于 Base,这里使用作用域运算符访问被屏蔽的 fun,调用语句为:Base:fun();答案为 C。24.如果派生类以 protected 方式继承基类,则基类中的保护成员在派生类中的访问属性是(分数:2.00)A.publicB.
12、protected C.privateD.protected 或 public解析:解析:protected 方式继承中,基类的 public 和 protected 成员在派生类中为 protected 成员,答案为 B。25.有如下两个类定义: class XX private: double x1; protected: double x2; public: double x3; ;class YY: protected XX private: double y1; protected: double y2; public: double y3; ;在派生类 YY 中的保护成员的个数是(
13、分数:2.00)A.1B.2C.3 D.4解析:解析:类 YY 以 protected 方式继承类 XX,所以类 XX 中的 public 成员和 protected 成员在 YY 中为 protected 成员,所以 YY 中的 protected 成员有:x2,x3,y2,答案为 C。26.有如下类声明: class What int n; public: double d; private: char c; ;类 What 的公有数据成员和私有数据成员的数量分别是(分数:2.00)A.1 和 1B.1 和 2 C.2 和 1D.2 和 2解析:解析:class 关键字定义的类,成员默认的
14、访问级别是私有的,所以类 What 中公有成员有 d,私有成员有 n,c;答案为 B。27.除了显式定义的构造函数外,类中还有可能包含编译器自动生成的构造函数,因此一个类所拥有的构造函数的至少有(分数:2.00)A.1 个 B.2 个C.3 个D.4 个解析:解析:一个类,如果没有显示定义的构造函数,那么编译器自动生成一个构造函数;一个类,如果显示定义了构造函数,无论个数多少,编译器也不会再生成任何构造函数,所以一个类所拥有的构造函数至少有 1 个,答案为 A。28.有如下类声明: class How int k; public: How():k(99) ;则类 How 所拥有的构造函数的数量
15、是(分数:2.00)A.1B.2 C.3D.4解析:解析:首先类 How 定义了一个默认构造函数 How(),因而编译器不会自动生成默认构造函数;其次How 中需要一个复制构造函数,这由编译器自动生成,所以 How 有两个构造函数,答案为 B。29.在下面的类声明中,错误的是(分数:2.00)A.class AA BB b; ; class BB AA a; ; B.class AA AA *a; ; class BB BB ;C.class BB; class AA BB *b; ; class BB AA a; ;D.class AA; class BB AA ; class AA BB
16、b; ;解析:解析:在创建类的对象之前,必须完整的定义该类,在一个类的声明之后,定义之前,这个类是一个不完全类型,对于不完全类型,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数;选项 A 中,类 A 中的 BB 还未定义(也未声明),无法创建 BB类对象,错误;选项 B 中,声明之后定义的是指针或引用,正确;选项 C 中,声明 BB 之后定义 BB 类的指针,定义 AA 之后创建 AA 类的对象,正确;选项 D 中,声明 AA 之后定义 AA 类的引用,定义 BB 之后创建BB 类的对象,正确;答案为 A。30.有如下类声明和函数声明: cl
17、ass Base int m; public: int n; protected: int p; ; class Derived: public Base int k; ; void f(Derived d);则允许函数 f 访问的参数 d 的数据成员的个数是(分数:2.00)A.1 B.2C.3D.4解析:解析:C+中,以 class 关键字定义的类默认的访问级别为 private,另外对于公有继承,基类成员保持自己的访问级别(private 成员除外),即基类的 public 成员为派生类的 public 成员,基类的protected 成员为派生类的 protected 成员;本题中,D
18、erived 类以 public 方式继承 Base,所以 Derived中 public 成员有:n,protected 成员有:p,private 成员有:k,不可见的成员有:m;这些成员中,对Derived 类对象可见的只有 public 成员 n,答案为 A。31.有如下类声明: class How int k; public: How() coutbark()D.( class AA char c; public: AA():c(X) AA(char ch):c(ch) AA(AA MyTemp p2; MyTemp p34; 编译系统在处理上面的语句序列时,所生成的模板 MyTem
19、p 的实例的个数是(分数:2.00)A.1B.2C.3 D.6解析:解析:题目中使用 MyTemp 类模板定义了三种类型的类对象,所以生成的模板 MyTemp 实例有 3 个,答案为 C。39.下列关于模板的表述中,正确的是(分数:2.00)A.如果一个类中存在纯虚函数,这个类就是类模板B.函数模板不能带有形式参数表C.类模板带有模板形参表 D.类模板中不能包含构造函数解析:解析:存在纯虚函数的类是抽象基类,选项 A 错误;函数模板的形参表不能为空,不然定义函数模板也没有意义,选项 B 错误;类模板中是可以包含构造函数的,选项 D 错误。答案为 C。40.下列关于基类和派生类关系的叙述中,正确的是(分数:2.00)A.派生类中的成员可以访问基类中的任何成员B.每个类最多只能有一个直接基类C.对基类构造函数的调用不能出现在派生类构造函数的初始化列表中D.派生类除了继承基类的成员,还可以定义新的成员 解析:解析:派生类对基类成员的访问权限由基类成员的访问标识和类派生列表中的访问标识共同决定的,选项 A 错误;多重继承的派生类可以有多个直接基类,选项 B 错误;派生类构造函数可以隐式调用基类的默认构造函数初始化对象的基类部分,也可以在派生类构造函数初始化列表中显示调用基类构造函数,选项 C 错误;答案为 D。