1、国家二级 C+机试(选择题)模拟试卷 45 及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)每一个结点有两个指针域的链表一定是非线性结构 ( B)所有结点的指针域都为非空的链表一定是非线性结构 ( C)循环链表是循环队列的链式存储结构 ( D)线性结构的存储结点也可以有多个指针 2 使用白盒测试方法时,设计测试用例应根据 ( A)程序的内部逻辑 ( B)程序的复杂结构 ( C)程序的功能 ( D)使用说明书 3 在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可 在多个科室治疗。则实体医生和患者之间的联系是 ( A)多对多 ( B)多对一 ( C)一对多 (
2、 D)一对一 4 设序列长度为 n,在最坏情况下,时间复杂度为 O( log2n)的算法是 ( A)二分法查找 ( B)顺序查找 ( C)分块查找 ( D)哈希查找 5 设数据集合为 D= 1,3,5,7,9 , D上的关系为 R,下列数据结构 B=( D, R)中为非线性结构的是 ( A) R= (5,1), (7,9), (1,7), (9,3) ( B) R= (9,7), (1,3), (7,1), (3,5) ( C) R= (1,9), (9,7), (7,5), (5,3) ( D) R= (1,3), (3,5), (5,9) 6 深度为 7的二叉树共有 127个结点,则下列说
3、法中错误的是 ( A)该二叉树有一个度为 1的结点 ( B)该二叉树是满二叉树 ( C)该二叉树是完全二叉树 ( D)该二叉树有 64个叶子结点 7 某二叉树的中序序列为 BDCA,后序序列为 DCBA,则前序序列为 ( A) DCBA ( B) BDCA ( C) ABCD ( D) BADC 8 下面能作为软件需求分析工具 的是 ( A) PAD图 ( B)程序流程图 ( C)甘特图 ( D)数据流程图 (DFD图 ) 9 下面不属于对象主要特征的是 ( A)唯一性 ( B)多态性 ( C)可复用性 ( D)封装性 10 关系 R经过运算 A=BC 4D 3(R)的结果为 ( A) (c,
4、c,11,4) ( B) (c,c,11,4) ( C) (a,a,2,4) ( D) (a,a,2,4)和 (e,e,6,1) 11 有下列语句,编号分别是 1、 2、 3、 4, char s1 = “abcde“; /1 char s2 = “abcde“; /2 char s34 = “abcde“; /3 char s45 = “abcde“; /4 其中错误的是 ( A) 2 ( B) 1,3 ( C) 1,3,4 ( D) 1,2,3,4 12 有如下程序段: int i=2;int j=3; int main() i=j=9; cout using namespace std;
5、 void fun(int a,_) int c; c=a; a=*b; *b=c; int main() int x,y; x=1; y=2; fun(x, cout using namespace std; int fun1(int x) return +x; int fun2(int int main() int a=0,b=0,c=0; c=fun1(a)+fun2(b); cout using namespace std; class AA char c; public: AA(char ch):c(ch) cout using namespace std; class AA cha
6、r c; public: AA(char ch):c(ch) AA() coutbark() ( D) (*p).bark() 36 有如下程序 #include using namespace std; class AA char c; public: AA():c(X) AA(AA class AA public: AA(int n) cout“必须重载为成员函数,将这些操作符定义为非成员函数将在编译时标记为错误,友元函数是非成员函数,答案为 B。 17 【正确答案】 A 【试题解析】 运算符重载不能通过连接其他合法符号来创建任何新的运算符,选项 B 错误;重载运算符必须具有至少一个类类型
7、或枚举类型的操作数,选项 C错误;不能重载的运算符有:成员访问运算符 “.“、成员指针访问运算符 “.*“、作用域操作符 “:“、 sizeof 运算符 和条件运算符 “?:“,选项 D错误;答案为 A。 18 【正确答案】 B 【试题解析】 由于重载运算符并不改变运算符的优先级,所以 c1+c2*c1首先进行 c2*c1运算,由于 c2 是运算符 “*“的左操作数,所以 c2*c1相当于 c2 对象调用重载运算符函数 operator*,参数为 c1,即 c2.operator*(c1);同理 c1 作为运算符“+“的左操作数, c1+c2*c1相当于 c1 对象调用重载运算符函数 oper
8、ator+,参数为c2*c1,即 c1.operator+(c2.operator*(c1),答案为 B。 19 【正确答案】 D 【试题解析】 C+规定,赋值运算符 “=“、下标运算符 “、调用运算符 “()“和成员访问箭头运算符 “-“必须作为成员函数,将这些运算符重载为非成员函数将在编译时标记为错误;选项 A中,运算符 “+“可以作为友元函数重载;选项 B、 C中的流运算符 “bark()、 (*p).brak(),选项 A错误,答案为 A。 36 【正确答案】 A 【试题解析】 程序使用默认构造函数创建 AA 类对象 m,使得 m中数据成员c=X,然后调用 f1函数,由于函数 f1形参
9、 为 AA类对象,需要创建局部对象 a,并使用实参 m初始化,所以需要调用复制构造函数,输出 “2“;再执行 f1函数体,输出 “X“, f1函数执行完后,需要销毁局部对象 a,调用 AA的析构函数,输出 “3“;再调用 f2函数, f2函数的形参为 AA类引用,因而不需要调用构造函数,直接执行函数体输出 “X“,当然,由于没有创建局部对象, f2函数执行完之后也不需要销毁任何数据;最后 main 执行结束,需要销毁对象 m,调用 AA的析构函数,输出 “3“;整个程序输出结果为: “2X3X3“,答案为 A。 37 【正确答案】 D 【试题 解析】 构造函数初始化列表仅指定用于初始化成员的值
10、,并不指定这些初始化执行的次序;初始化执行的次序是根据类定义中成员的声明顺序完成的,初始化列表结束后,再执行函数体;程序创建 CC 对象 c,调用 CC的构造函数,由于在类 CC中, AA类对象 a首先声明,所以先调用 AA类的构造函数,完成成员a的初始化,输出 “1“,再调用 BB类的构造函数,完成成员 b的初始化,输出“2“,最后执行 CC构造函数的函数体,输出 “3“;答案为 D。 38 【正确答案】 D 【试题解析】 模板形参可以由 class 或 typename声明,选 项 D错误,答案为D。 39 【正确答案】 B 【试题解析】 模板形参表两边的尖括号是不能省略的,及时只有一个形参,答案为 B。 40 【正确答案】 A 【试题解析】 类 Derived以 public方式继承 Base,所以 a在 Derived中是 public成员, b 在 Derived 中是 protected 成员, c对 Derived不可见;所以对类 Derived对象 obj可见的成员为 a,答案为 A。