1、国家二级 C+机试(选择题)模拟试卷 97及答案与解析 一、选择题 1 在结构化方法中,用数据流程图 (DFD)作为描述工具的软件开发阶段是 ( )。 ( A)逻辑设计 ( B)需求分析 ( C)详细设计 ( D)物理设计 2 对序线性表 (23, 29, 34, 55, 60, 70, 78)用二分法查找值为 60的元素时,需要比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 3 下列描述中,正确的是 ( )。 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向链表是非线性结构 ( D)只有根结点的二叉树是线性结构 4 开发大型软件
2、时,产生困难的根本原因是 ( )。 ( A)大型系统的复杂性 ( B)人员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 5 两个或两个以上的模块之间关联的紧密程度称为 ( )。 ( A)耦合度 ( B)内聚度 ( C)复杂度 ( D)连接度 6 下列关于线性表的叙述中,不正确的是 ( )。 ( A)线性表可以是空表 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件 和后件 ( D)线性表是由 n个元素组成的一个有限序列 7 设有如下关系表: 则下列操作正确的是 ( )。 ( A) T=R S ( B) T=RxS ( C) T=RS ( D) T=R S 8
3、 以下描述中,不是线性表顺序存储结构特征的是 ( )。 ( A)可随机访问 ( B)需要连续的存储空间 ( C)不便于插入和删除 ( D)逻辑相邻的数据物理位置上不相邻 9 在三级模式之间引入两层映像,其主要功能之一是 ( )。 ( A)使数据与程序具有较高的独立性 ( B)使系统具有较高的通道能力 ( C)保 持数据与程序的一致性 ( D)提高存储空间的利用率 10 下列方法中,属于白盒法设计测试用例的方法的是 ( )。 ( A)错误推测 ( B)因果图 ( C)基本路径测试 ( D)边界值分析 11 关于虚函数,以下说法正确的是 ( )。 ( A)若在重定义虚函数时使用了 virtual,
4、则该重定义函数还是虚函数 ( B)虚函数不能声明为友元 ( C)子类必须重定义父类的虚函数 ( D)虚函数不能是 static的 12 下列关于纯虚函数与抽象类的描述中,错误的是 ( )。 ( A)纯虚函数是一 种特殊的虚函数,它没有具体的实现 ( B)抽象类是指具有纯虚函数的类 ( C)一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类 ( D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 13 将 x+y*z中的 “+”用成员函数重载, “*”用友元函数重载应写为 ( )。 ( A) operator+(operator*(y, z) ( B) x operator+(o
5、perator*(y, z) ( C) x operator+(x*(y, z) ( D) x+(operator*(y, z) 14 以下程序的执行结果是 ( )。 #include #include void fun(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() private: intnumber; ; TestClass fun(TestClass p) TestC
6、lass ( A) TestClass(TestClass ( D) TestClass r&other)number=other number; 16 执行完下列代码段之后: bool x=true, y=false, z=false; x=x&yllz; y=xy&z; z=!(x!=y)(y=z); 则 x=false, y=false, z=( )。 ( A) true ( B) false ( C)不确定 ( D)异常 17 如果表达式一一 x y中的 “一 ”和 “ ”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为 ( )。 ( A) operator (x
7、 operato-一 0, y); ( B) operator (operator-一 (x), y); ( C) x operator-() operator (y); ( D) y opemtor (operator-一 (x); 18 将以下程序写成三目运算表达式是 ( )。 if(x和作用域运算符 ( D)静态数据成员不是所有对象所共用的 25 )以下程序的执行结果是 ( )。 #include int a8=1, 2, 3, 4, 5, 6, 7); void fun(int*pa, int n); void main() intm=8; fun(a, m); coutak); re
8、tum(k); ( A) k=i ( B) k=j ( C) i=j ( D) i=n 27 在 C+程序中,如果要求通过函数来实现一种简单的功能,并且要求尽可能加快程序执行速度,则应该选用 ( )。 ( A)内联函数 ( B)重载函数 ( C)递归调用 ( D)嵌套调用 28 有如下类声明: class MyBASE int k: public: void set(int n)k=n; int getoconstreturn k; ; class MyDERIVED: protected MyBASE protected: intj; public: void set(int m, int
9、n)MyBASE: set(m); j=n; int geto ( A) 4 ( B) 3 ( C) 2 ( D) 1 29 下列关于继承的描述中,错误的是 ( )。 ( A)析构函数不能被继承 ( B)派生类是基类的组合 ( C)派生类的成员除了它自己的成员外,还包含了它的基类的成员 ( D)派生类中继承的基类成员的访问权限到派生类保持不变 30 类的析构函数的作用是 ( )。 ( A)一般成员函数 ( B)类的初始化 ( C)对象的初始化 ( D)释放由对象所占用的资源 31 如果表达式 y*cx+中, “+”是作为成员函数重载的运算符, “+”是作为友元函数重载的运算符 ,采用运算符函数
10、调用格式,该表达式还可表示为 ( )。 ( A) x operator+(0) operator*(y) ( B) operator*(x operator+(0), y) ( C) y operator*(operator+(x, 0) ( D) operator*(operator+(x, 0), y) 32 有如下程序: #include using namespace std; class XX protected: int k: public: XX(int n=5): k(n); XX() coutT cast(U u)return u; 其功能是将 U类型数据转换为 T类型数据。
11、已知 i为 int型变量,下列对模板函数cast的调用中正确的是 ( )。 ( A) cast(i); ( B) castx; if(x+5) coutSeWariable(5)与语句 my SetVariable(5)等价 38 下列关于虚函数的描述中,正确的是 ( )。 ( A)虚函数是一个 static类型的成员函数 ( B)虚函数是一个非成员函数 ( C)基类中采用 virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual说明 ( D)派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型 39 有如下程序: #include void fun(i
12、nt&x,int”illt t=: x; x=y; y=t; ) intmain() int a2=23,42); fun(a1, a0); std: cout using namespace std; class A public: static int a: void init()a=1; ) A(int a=2)init();卅; ) ; iIlt A: a=0: A obj; int main() cout:其中:关键词 enum表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。其中 enumMonday,Tuesday, Wednesday, Thr
13、usday,Friday=2的值由 0开始,即 0, 1, 2, 3。 D中的本题中的枚举类型中的数据值 Wednesday为 2,而Fridav的值赋值为 2,所以判断 Wednesday等于 Friday的表达式值为真,即true。即选择 A)。 20 【正确答案】 D 【试题解析】 如果函数实参是数组名,形参也应为数组名,函数 swap中形参进行了交换,实际上也是实参进行了交换。而且数组名代表数组首元素的地址,并不代表数组的全部元素。所以, swap(b, 2)是数组 b第一个元素与第二个元素进行交换,即 b0与 b1,根据题干,知道答案为 2, 1。 21 【正确答案】 D 【试题解析
14、】 循环条件 i=i=4:是个赋值语句,使得 i, i的值非 0,所以是死循环。 22 【正确答案】 A 【试题解析】 在 switch语句中 default的位置不是固定在最后的位置,同时default也是可以省略。 23 【正确答案】 C 【试题解析】 可见性足函数内部,存在整个程序中,第二次调用值不变。 24 【正确答案】 D 【试题解析】 静态数据成员是在类装载的时候就分配子内存空间,而类的成员变量是作牛成对象时分配内存 空间。所以只要类装载了,就可以用类名访问静态数据成员。事实上,该类的所有对象都只保存类静态数据成员的引用,它们都指向同一块内存区域。 25 【正确答案】 D 【试题解
15、析】 void fun(int木 pa, int n)函数定义的功能就是把数组的每个元素的值加到元素 pa7中,也就是数组的元素之和放在 a7中存储,所以结果 28。 26 【正确答案】 A 【试题解析】 函数 fun中首先定义整型变量 k用来存放返回最大值的下标,并将其首先指向第一个元素,即 k=j。然后在 for循环中依次将当 前元素 ai与标识为最大值的元素进行比较,如果当前元素大于这个标识元素,那么将最大值标识为当前元素,即 k=i。 27 【正确答案】 A 【试题解析】 此题考查的是内联函数的相关知识点。 C+引入内联函数是用它来代替 C语言中的预处理宏函数,内联函数在调用时,是将表
16、达式用内联函数体来替换,这样会加快程序的执行速度。 28 【正确答案】 B 【试题解析】 因为在保护继承的情况下,基类中的公有成员 void set(int n)和 int get()const在派生类中是保护成员,再加上派生类 自身的保护成员 j,一其是二三个保护成员。 29 【正确答案】 D 【试题解析】 派生类中继承的基类成员的访问权限到派生类会发生变化,例如:私有继承时,派生类不能访问基类的成员,所以选项 D)错误,其他选项均正确。 30 【正确答案】 D 【试题解析】 类的在撤销埘象时,系统会自动调用类的析构函数,析构函数用来释放由对象所占用的资源。 31 【正确答案】 C 【试题解
17、析】 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即 y operator*(z)或者 operator*(y, z);另一种是通过运算符构成表达式,即 y*z。因为 “+”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀 “+”时必须多一个虚拟参数: int。 32 【正确答案】 A 【试题解析】 类 YY公有派生于类 XX,派生类对象可以替代基类对象向基类对象的引用进行赋值初始化, XX&p=*new YY语句定义了 XX对象 p引用,并用YY对象初始化, p并不是 YY对象的别名,是 XX基类对象的别名,故先调用基类 XX的构造函数将 k
18、初始化为 5, p f()首先输出 k一 3即 2,然后调用 XX:f()输出 k+3即 8, delete&p删除 p,调用 XX的析构函数输出 “XX”。 33 【正确答案】 D 【试题解析】 选项 D)是将 double类型的数据转化成 int类型的数据,正确。 34 【正确答案】 D 【试题解析】 此题首先读入数值 4赋给变量 x,因为 x+5不成立,因为 “+”后缀,之后 x的值变为 5,执行语句 cout5成立,所以执行语句 cout成员函数 (形参表 )或者对象名,成语函数名 (形参表 ),故选项 C)错误,选项 D)正确。 38 【正确答案】 C 【试题解析】 此题考查虚函数的
19、概念。在成员函数声明的前面加上 virtual修饰,即把该函数声明为虚函数。虚函数只能是类中的一个成员函数,但不能是静态成员函数,所以选项 A)和 B)错误;在派生类中重新定义虚函数时必须有相同的函数类型,包括函数的返回类型、函数名、参数个数、参数类型的顺序必须相同。故选项 D)错误。 39 【正确答案】 B 【试题解析】 此题考查的是函数的调用以及参数值的传递。函数 fun中的第一个参数是引用传值方式,是双向的;第二个参数是按值传递,是单向 的。 40 【正确答案】 B 【试题解析】 此题实际考查的是变量作用域的屏蔽效应。在 C+中,当标识符的作用域发生重叠时,在一个函数中声明的标识符可以屏蔽函数外声明的标识符或全局标识符。声明类 A的全局对象时,构造函数首先调用 int函数,但由于静态成员变量 a被构造函数内部的形参 a所屏蔽所以 a+改变的是形参 a的值,对静态成员变量 a没有影响。