1、国家二级( C+)机试模拟试卷 187及答案与解析 一、选择题 1 下列数据结构中,能用二分法进行查找的是 ( )。 ( A)无序线性表 ( B)线性链表 ( C)二叉链表 ( D)顺序存储的有序表 2 下列叙述中,不属于设计准则的是 ( )。 ( A)提高模块独立性 ( B)使模块的作用域在该模块的控制域中 ( C)设计成多入口、多出口模块 ( D)设计功能可预测的模块 3 下列队列的描述中,正确的是 ( )。 ( A)队列属于非线性表 ( B)队列在队尾删除数据 ( C)队列按 “先进后出 ”进行数据操作 ( D)队列按 “先进先出 ”进行数据操作 4 对下列二叉树进行前序遍历的结果为 (
2、 )。 ( A) ABCDEFGH ( B) ABDGEHCF ( C) GDBEHACF ( D) GDHEBFCA 5 对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ( )。 ( A)冒泡排序为 n(n-1) 2 ( B)简单插入排序为 n ( C)希尔排序为 n ( D)快速排序为 n 2 6 为了使模块尽可能独立,要求 ( )。 ( A)内聚程度要尽量高,耦合程度要 尽量强 ( B)内聚程度要尽量高,耦合程度要尽量弱 ( C)内聚程度要尽量低,耦合程度要尽量弱 ( D)内聚程度要尽量低,耦合程度要尽量强 7 下列选项中不属于软件生命周期开发阶段任务的是
3、( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 8 数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 ( )。 ( A)数据与程序独立存放 ( B)不同的数据被存放在不同的文件中 ( C)不同的数据只能被对应的应用程序所使用 ( D)以上三种说法都不对 9 在 学校中, “班级 ”与 “学生 ”两个实体集之间的联系属于 ( )关系。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 10 软件调试的目的是 ( )。 ( A)发现错误 ( B)改善软件的性能 ( C)改正错误 ( D)验证软件的正确性 11 在公有派生时,派生类中定义的成员
4、函数只能访问原基类的 ( )。 ( A)私有成员、保护成员和公有成员 ( B)保护成员和私有成员 ( C)公有成员和保护成员 ( D)公有成员和私有成员 12 有如下定义: int b10=1: 2, 3, 4, 5, 6, 7, 8, 9, 10), *q=b; 则数值为 8的表达式是 ( )。 ( A) *q+8 ( B) *(q+7) ( C) *q+=8 ( D) q+7 13 下面的符号中可以用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc other ( C) else ( D) radius 14 下列程序执行后,输出的结果是 ( )。 int x=-5,
5、y=0; whileq+x) y+; cout using namespace std; class Base protected; Base1()cout using namespace std; int main() cout fill(*); cout width(6); cout fill(#); cOut void main() int n3=10, 20, 30, 40, 50, 60; int(*p)3; p=n; cout using namespace std; int main() int*p, *q, r=10; q=&r; p=&q; cout using namesp
6、ace std; class TestClass static int i; public: TestClass ()i+; TestClass ()i-; stmic int getVal()return i; ; int TestClass: i=0; void fOTestClass obj2; coutgetVal(); delete obj3; cout using namespace std; class TestClass intn; public: TestClass(int k): n(k) int get()return n; ) int getoconstreturn n
7、+1; ; int main() TestClass p(5); const TestClass q(6); cout using namespace std; int main() intx=3: if(x=5) cout using namespace std; void swap(int x, int y) int temp=x; x=y; y=temp; cout using narnespace std; classA public: A()cout class TestClass1 public: TestClass10 ; *error* private: virtual Tes
8、tClass1() using namespace std; coutm i=i: void print() *error* cout #include #include using namespace std; void WriteFile(char*s) void fun(char*s) void ClearFile() ofstreamoutl; out1 open(“modi2 txt“); out1 close(); int main() ClearFile(); char s1024; cout using namespace std; class TestClass1 publi
9、c: void print() cout是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参: x+y, 3和 min(n-1, y);当调用一个函数时,实参与形参一对一匹配,所以实 参个数也是 3个。 18 【正确答案】 A 【试题解析】 虚函数是非 static类型的成员函数,基类中可以利用 virtual关键字来声明虚函数,派生类中定义相同原型函数时可不必加 virtual说明,直接重写基类中的函数。在派生类中的虚函数必须与基类中的虚函数具有相同的参数个数与类型。 19 【正确答案】 C 【试题解析】 派生类 Derived由基类 Base公有派生,在派生类构造函数
10、声明时系统会自动调用基类的缺省构造函数。调用 Derived d(Derived);后,执行类Derived构造函数的 Derived(char c),系统自动调用基类的缺省构造函数 Base(),输出字母 Base;再执行派生类的构造函数 Derived(char c),输出字母 Derived。 20 【正确答案】 A 【试题解析】 C+在流操作中,利用 cout对象的 width属性设置输出字符的宽度,用 fill函数来设置需要填充的字符。题目程序中,首先设置填充字符为 *,输出宽度为 6,但在输出前又设置了填充字符为 #,所以在输出时,其填充字符为撑,由于 888不足 6个字符,所以在
11、前面以三个 “#”来填充。 21 【正确答案】 C 【试题解析】 因为 aa后减,所以 a=4; b的值与 a、 bb相关, b=4*5=20,与 aa没有任何关系。 22 【正确答案】 A 【试题解析】 extern用于声明外部变量的, register声明寄存器类型变量,无cpu类型。它们都不能声明类成员。 public声明为公有访问权限。 23 【正确答案】 B 【试题解析】 类的定义,如果有自身类对象,会使其循环定义,选项 B)错误。在类中具有自身类的指针,可以实现链表的操作,当然也可以使用对象的引用,类中可以有另一个类的对 象,即成员对象。 24 【正确答案】 D 【试题解析】 地址
12、作为实参,表示实参与形参代表同一个对象。如果实参是数值,形参也是普通变量,此时形参是实参的备份。 25 【正确答案】 B 【试题解析】 如果数组元素都是相同类型的指针,则称这个数组为指针数组。指针数组一般用于处理二维数组。声明的格式为: 。 p表示指向数组 n的行指针,初始化 “(*p)3=n; ”,地址的等价形式:p+i、 pi、 *(p+i)都表示数组第 i+1行的第 1个元素的首地址。 *(p+i)+j、 pi+j、&pij都表示数组第 i+1行、第 j+1列元素的地址。值的等价形式: *(*(p+i)+j)、*(pi+j)、 pij都表示数组第 i+1、第 j+1列元素的值。所以本题中
13、分别访问数组元素 p00, p01, p02。 26 【正确答案】 C 【试题解析】 p为一个二级指针,其存放的是指针变量 q的地址,而 q存放的又是 r的地址。故式子 *p相当于对 r的引用。所以最后输出的结果为 11。 27 【正确答案】 C 【试题解析】 类模板本身在编译 时是不会产生代码的,只有在其实例化以后才产生代码。定义一个对象时,不能省略其实参。 28 【正确答案】 A 【试题解析】 C+中,若没有类的显式声明构造函数则系统会为其提供一个默认的构造函数,若提供了构造函数则会将系统提供的默认的构造函数覆盖。调用构造函数时,实参必须与形参匹配。但是如果声明一个对象指针时,不是定义一个
14、对象,不调用对象的构造函数。 29 【正确答案】 B 【试题解析】 在 C+中,字符串以 0作为字符串结束的标志,所以个数为m1。 30 【正确答案】 B 【试题解析】 由于 i是类 TestClass的静态成员,该成员被类的所有实例共享。当定义 objl时,系统自动调用构造函数 TestClass(), i的值将加 1;调用函数 f()时,在定义 obj2时系统会自动调用构造函数 TestClass(), i的值将再加 1:调用obj2 getVal();后,将 i的值输出,输出值为 2;当调用函数 f()即将结束时,系统自动调用析构函数 TestClass(), i的值将减 1;当定义 o
15、bj3时,系统自动调用构造函数 TestClass(), i的值将加 1,调用 coutgetVal();后,将 j的值输出,输出值为 2;调用 delete obj3后将执行 TestClass的析构函数 TestClass(),执行后, i的值将减 1, TestClass: getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量 i的值 l。 31 【正确答案】 C 【试题解析】 继承方式有公有继承、私有继承和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类是不可直接访问的。 32 【正确答案】 B 【试题解析】 C+中对常
16、对象 的成员函数调用,将自动调用其常成员函数,程序中调用原型为 “int get()const; “的函数,对于非常对象将调用原型为 “int get(); “的函数。因为首先用 5对对象 p进行了初始化,所以执行 p get()时直接返回 5,而对于常对象则以 6对 q进行初始化,在调用 q get()时,将调用原型为 “int get()const: “的函数,该函数将返回 n+1,第二个输出应为 7,所以本题答案为57。 33 【正确答案】 C 【试题解析】 C+中拥有纯虚函数的类称为抽象类。抽象类不能用来定义对象。如果一个 抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生
17、类中仍是纯虚函数,该类仍为抽象类。 34 【正确答案】 C 【试题解析】 if(条件 )语句 1 else语句 2,语句的执行过程是:首先判断条件是否为真 (不为 0),为真则执行语句 1,否则执行语句 2。题日中的条件是 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 35 【正确答案】 D 【试题解析】 C+中的拷贝构造函数是用一个己知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下: (类名 ): (类名 )(const(类名 )&=A&si=a&siprim(); 【试题解析】 (1)题目 1要求 “类 TestClass2公共继承于 TestClass
18、1”。从已有的类产生一个新的子类,成为类的派生。声明派生类的一般形式为: class派生类名:继承方式 基类名。根据题目中的要求以及派生类的一般形式,第 1个标识下添加语句 “class TestClass2: public TestClass1”。 (2)题目 2要求 “print函数为虚函数 ”。在 C+中,用 virtual声明的函数为虚函数,因此第 2个标识下的语句修改为 “virtual void print()”。 (3)题目 3要求 “使得 p指定对象 obj3”。 p为指针变量, obj3为类的对象,将一个指针变量指向另一个变量,只要把被指向的变量的地址赋给指针变量即可。取对象 obj3地址的语句为 &obj3,所以这里补全 “p=&obj3; ”。 (4)题目 4要求 “利用 p调用 print()函数 ”。 C+中用 “-“运算符实现成员访问,因此调用 print(、 )函数,应将第 4个标识下修改为 “p-print(); ”。