1、国家二级( C+)笔试模拟试卷 212及答案与解析 1 算法的有穷性是指 ( )。 ( A)算法程序的长度是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的运行时间是有限的 ( D)算法只能被有限的用户使用 2 以下描述中,不是线性表顺序存储结构特征的是 ( )。 ( A)不便于插入和删除 ( B)需要连续的存储空间 ( C)可随机访问 ( D)需另外开辟空间来保存元素之间的关系 3 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 4 在三级模式之间引入两层映像,其主要功能之一是 ( )。 ( A)使数据与程
2、序具有较高的独立性 ( B)使系统具有较高的通道能力 ( C)保持数据与程序的一致性 ( D)提高存储空间的利用率 5 自然连接 (Naturaljoin)是一种特殊的等值连接,下列哪个 (些 )是它满足下面的条件( )。 I、两关系间有公共域 、通过公共域的等值进行连接 、可进行逆运算 ( A) 和 ( B) I和 ( C) I和 ( D) I、 和 6 已知一棵二叉树的先根序列为 ABCDEFK,中根序列为 DGBAFCK,则结点的后根序列为 ( )。 ( A) ACFKDBG ( B) GDBFKCA ( C) KCFAGDB ( D) ABCDFKG 7 深度为 6的满二叉树中,度为
3、2的结点个数为 ( )。 ( A) 31 ( B) 32 ( C) 63 ( D) 64 8 设有关键码序列 (Q, G, M, Z, A, N, B, P, X, H, Y, S, T, L, K, E),采用堆排序法 进行排序,经过初始建堆后关键码值 A在序列中的序号是( )。 ( A) 1 ( B) 4 ( C) 8 ( D) 12 9 设 R是一个 2元关系, S是一个 3元关系,则下列运算中正确的是 ( )。 ( A) R-S ( B) RS ( C) RS ( D) R S 10 下列工具中为需求分析常用工具的是 ( )。 ( A) PAD ( B) PFD ( C) N-S (
4、D) DFD 11 关于虚函数,以下说法正确的是 ( )。 ( A)若在重定义虚函数时使用了 virtual,则该重定义函数还是虚函数 ( B)虚函数不能声明为友元 ( C)子类必须重定义父类的虚函数 ( D)虚函数不能是 static的 12 下列关于纯虚函数与抽象类的描述中,错误的是 ( )。 ( A)纯虚函数是一种特殊的虚函数,它没有具体的实现 ( B)抽象类是指具有纯虚函数的类 ( C)一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类 ( D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 13 将 x+y*z中的 “+”用成员函数重载, “*”用友元函数重载应写为
5、( )。 ( A) operator+(operator*(y, z) ( B) x operator+(operator*(y, z) ( C) x operator+(x*(y, z) ( D) x+(operator*(y, z) 14 以下程序的执行结果是 ( )。 #include #include voidfun(int n) if(n!=0) fun(n=1); for(int i=l; i using namespace std; class TestClass public: TestClass(int n)number=n; _拷贝构造函数 TestClass () pri
6、vate: intnumber; ; TestClass fun(TestClass p) TestClass temp(p); return temp; int main() TestClass obj1(10), obj2(0); TestClass obj3(obj1); obj2=fun(obj3); return0: ( A) TestClass(TestClass&other)number=other number; ( B) TestClass(TestClass other)number=other number; ( C) TestClass(TestClass&other)
7、number; ( D) TestClass(&other)number=other, number; 16 执行完下列代码段之后: bool x=true, y=false, z=false; x=x&y|z; y=x|y&z; z=!(x!=y)|(y=z); 则 x=false, y=false, z=( )。 ( A) true ( B)假 ( C)不确定 ( D)异常 17 如果表达式 x y中的 “”和 “ ”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为 ( )。 ( A) operator (x operato(), y); ( B) operator
8、(operator(x), y); ( C) x operator-() operator (y); ( D) y operator (operator(x); 18 将以下程序写成三目运算表达式是 ( )。 if(xy)?x: y ( B) min=(xak)_; return(k); ( A) k=i ( B) k=j ( C) i=j ( D) i=n 22 在 C+程序中,如果要求通过函数来实现一种简单的功能,并且要求尽可能加快程序执行速度,则应该选用 ( )。 ( A)内联函数 ( B)重载函数 ( C)递归调用 ( D)嵌套调用 23 有如下类声明: class MyBASE in
9、t k= public: void sct(int n)k=n; int get()constreturn k; ; class MyDERIVED: protected MyBASE protected: intj; public: void set(int m, int n)MyBASE: set(m); j=n; int getoconstreturn MyBASE: get()+j; ; 则类 MyDERIVED中保护的数据成员和成员函数的个数是 ( )。 ( A) 4 ( B) 3 ( C) 2 ( D) 1 24 下列关于继承的描述中,错误的是 ( )。 ( A)析构函数不能被继承
10、 ( B)派生类是基类的组合 ( C)派生类的成员除了它自己的成员外,还包含了它的基类的成员 ( D)派生类中继承的基类成员的访问权限到派生类保持不变 25 类的析构函数的作用是 ( )。 ( A)一般成员函数 ( B)类的初始化 ( C)对象的初始化 ( D)释放 由对象所占用的资源 26 如果表达式 y*x+中, “*”是作为成员函数重载的运算符, “+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为 ( )。 ( A) x-operator+(0) operator*(y) ( B) operator*(x operator+(0), y) ( C) y oper
11、ator*(operator+(x,0) ( D) operator*(operator+(x, 0), y) 27 有如下程序: classXX protected: intk; public: XX(int=5): k(n); XX() tout T cast(Uu)returnu; 其功能是将 U类型数据转换为 T类型数据。已知 i为 int型变量,下列对模板函数 cast的调用中正确的是 ( )。 ( A) cast(i); ( B) castx; if(x+5) coutSetVariable(5)与语句 my SetVariable(5)等价 33 下列关于虚函数的描述中,正确的是
12、 ( )。 ( A)虚函数是一个 static类型的成员函数 ( B)虚函数是一个非成员函数 ( C)基类中采用 virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual说明 ( D)派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型 34 有如下程序: #include void fun(int&x, int y)int t=x; x=y; y=t; int main() int a2=23, 42; fun(a1, a0); std: cout using namespace std; classA public: staticint a: voi
13、d init()a=1; A(int a=2)init()0; a+; ; int A: a=0: A obj; int main() cout using namespace std; class TestClass int k; public: TestClass(int x=1): k(x) TestClass ()cout using namespace std; int main() intx=3; int&y=x; y+; cout using namespace std; class Base public: Base()cout;其中:关键词 enum表示定义的是枚举类型,枚
14、举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。其中 enumMonday, Tuesday, Wednesday, Thrusday,Friday=2的值由0开始,即 0, 1, 2, 3。 D中的本题中的枚举类型中的数据值 Wednesday为 2,而 Friday的值赋值为 2,所以判断 Wednesday等于 Friday的表达式值为真,即true。即选择 A。 20 【正确答案】 D 【试题解析】 如果函数实参是数组名,形参也应为数组名,函数 swap中形参进行了交换,实际上也是实参进行了交换。而且数组 名代表数组首元素的地址,并不代表数组的全部元素。所以, swap(b
15、, 2)是数组 b第一个元素与第二个元素进行交换,即 b0与 b1,根据题干,知道答案为 2, 1。 21 【正确答案】 A 【试题解析】 函数 fun中首先定义整型变量 k用来存放返回最大值的下标,并将其首先指向第一个元素,即 k=j。然后在 for循环中依次将当前元素 ai与标识为最大值的元素进行比较,如果当前元素大于这个标识元素,那么将最大值标识为当前元素,即 k=i。 22 【正确答案】 A 【试题解析】 此题考查的是内联函数 的相关知识点。 C+引入内联函数是用它来代替 C语言中的预处理宏函数,内联函数在调用时,是将表达式用内联函数体来替换,这样会加快程序的执行速度。 23 【正确答
16、案】 B 【试题解析】 因为在保护继承的情况下,基类中的公有成员 void set(int n)和 int get(const在派生类中是保护成员,再加上派生类自身的保护成员 j,一共是三个保护成员。 24 【正确答案】 D 【试题解析】 派生类中继承的基类成员的访问权限到派生类会发生变化,例如:私有继承时,派生类不能访问基类的成员,所 以选项 D错误,其他选项均正确。 25 【正确答案】 D 【试题解析】 类的在撤销对象时,系统会自动调用类的析构函数,析构函数用来释放由对象所占用的资源。 26 【正确答案】 C 【试题解析】 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即
17、y.operator*(z)或者 operator*(y, z);另一种是通过运算符构成表达式,即y*z。因为 “+”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀 “+”时必须多一个虚拟参数: int。 27 【正确答案】 A 【试题解析】 类 YY公有派生于类 XX,派生类对象可以替代基类对象向基类对象的引用进行赋值初始化,: XX&p=*newYY语句定义了 XX对象 p引用,并用YY对象初始化, p并不是 YY对象的别名,是 XX基类对象的别名,故先调用基类 XX的构造函数将 k初始化为 5p f()首先输出 k-3即 2,然后调用 xx: f()输出
18、 k+3即 8, delete p删除 p,调用 XX的析构函数输出 “XX”。 28 【正确答案】 D 【试题解析】 选项 D是将 double类型的数据转化成 int类型的数 据,正确。 29 【正确答案】 D 【试题解析】 此题首先读入数值 4赋给变量 x,因为 x+5不成立,因为 “+”后缀,之后 x的值变为 5,执行语句 cout5成立,所以执行语句 cout成员函数 (形参表 )或者对象名成语函数名 (形参表 ),故选项 C错误,选项 D正确。 33 【正确答案】 C 【试题解析】 此题考查虚函数的概念。在成员函数声明的前面加上 vfftual修饰,即把该函数声明为虚函数。虚函数只
19、能是类中的一个成员函数,但不能是静态成员函数,所以选项 A和 B错误;在派生 类中重新定义虚函数时必须有相同的函数类型,包括函数的返回类型、函数名、参数个数、参数类型的顺序必须相同。故选项 D错误。 34 【正确答案】 B 【试题解析】 此题考查的是函数的调用以及参数值的传递。函数 fun中的第一个参数是引用传值方式,是双向的;第二个参数是按值传递,是单向的。 35 【正确答案】 B 【试题解析】 此题实际考查的是变量作用域的屏蔽效应。在 C+中,当标识符的作用域发生重叠时,在一个函数中声明的标识符可以屏蔽函数外声明的标识符或全局标识符。声明类 A的全局对象时,构造函数 首先调用缸函数,但由于
20、静态成员变量 a被构造函数内部的形参 a所屏蔽所以 a+改变的是形参 a的值,对静态成员变量 a没有影响。 36 【正确答案】 面向对象 【试题解析】 程序设计主要经历了结构化设计和面向对象的程序设计阶段,面向对象在现在的程序设计中得到广泛的应用。 37 【正确答案】 投影 【试题解析】 关系数据库的专门关系运算包括选择、投影和连接 3种,其中投影是从二维表的列方向上进行的运算,而选择和连接是从二维表的行方向上进行的运算。 38 【正确答案】 类 【试题解析】 在面 向对象方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。 39 【正确答案】 黑箱 (盒 )测试 【试题
21、解析】 黑箱测试方法主要有等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。 40 【正确答案】 关系模型 【试题解析】 数据库系统模型有 3种,分别为:层次模型、网状模型和关系模型。其中,层次模型用树型结构表示,网状结构用无向图表示,关系模型用二维表表示。 41 【正确答案】 抽象类 【试题解析】 C+中拥有纯虚函数的类成为抽象类, 抽象类不能用来定义对象。若一个抽象类的派生类没有重定义其基类中的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。 42 【正确答案】 26 【试题解析】 (*q)+首先是将 q所指向的内存单元的数值取出,然后加 1。故本题答案
22、为 26。 43 【正确答案】 私有继承 【试题解析】 C+中类的继承方式有公有、保护、私有三种。默认的继承方式为私有继承。 44 【正确答案】 11333 【试题解析】 定义 Testclass型数组 a时,将导致 Testclass的构造函数被执 行三次,每次执行时,其传入参数为 3,定义 TestClass指针 p时,将执行两次默认构造函数,其参数为 1,执行 ”delete p”时,将执行 Testclass的构造函数,输出p0 k, p1 k(两者均为 1),在程序运行结束后,将释放局部变量,从而导致数组 a中的三个元素被析构,输出 a0, a1, a2中的值 (均为 3)。 45
23、【正确答案】 4 【试题解析】 C+程序中的引用实际上是为变量起个别名,其后的任何操作都相当于对原变量的操作。所以最后输出 4。 46 【正确答案】 5 【试题解析】 函数 strlen(字符指针 )的作用是求字符指针所指向的当前字符串的实际长度,不包括 0。 47 【正确答案】 BaseDerived 【试题解析】 创建 Derived类型的对象将导致 Deriwd的构造函数被执行,而执行 Derived构造函数时,首先要执行其父类的构造函数,所以先输出 “Base”,然后输出 “Derived”; p是一个指向 Base类型的指针,对其赋值不会引起构造函数的执行,所以本题输出为 “Base
24、Derived”。 48 【正确答案】 TestClass& 【试题解析】 如果要重载一个类的运算符 =,通常需要定义自己特有的拷贝构造函数。在类体中可以增加: (const operator Test Class rhs);,然后在TestClass的类体外给出它的完整定义: TestClass TestClass: operator=(const TestClass&rhs) 所以在 TestClass类的定义中缺少了 TestClass语句。 49 【正确答案】 friend void fun(); 【试题解析】 友元函 数定义时在函数前面加上关键字衔 friend。 50 【正确答案】 15 【试题解析】 函数每次将 f(n)的值转换成相应的关系式 n*fun(n-2),直到 fun(1)时为止。所以 fun(5)=5*fun(5-2)=5*3*fun(1)=5*3*1=15。