1、国家二级 C+机试(选择题)模拟试卷 14 及答案与解析 一、选择题 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 2 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列 中,只需要队尾指针就能反映队列中元素的动态变化情况 ( D)循环
2、队列中元素的个数是由队头指针和队尾指针共同决定 3 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。 ( A) O(n) ( B) O(n2) ( C) O( log2n) ( D) O( nlog2n) 4 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结构能存储有序表,链式 存储结构不能存储有序表 ( D)链式存储结构比顺序存储结构节省存储空间 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱
3、动 ( C)模块调用 ( D)数据流 6 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向对象方法中,不属于 “对象 “基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 一间宿舍可住多个学生,则实体宿舍和学生之间的 联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10
4、有三个关系 R、 S和 T如下: 由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)笛卡尔积 ( B)交 ( C)并 ( D)自然连接 11 下列语句中,错误的是 ( )。 ( A) const int buffer=256; ( B) const double *point; ( C) int const buffer=256; ( D) double * const point; 12 if语句的语法格式可描述为: 格式 1: if() 或 格式 2: if() else 关于上面的语法格式,下列表述中错误的是()。 ( A) 部分可以是一个 if语句,例如 if(
5、if(a=0) ) ( B) 部分可以是一个 if语句,例如 if() if() ( C)如果在 前加上逻辑非运算符 !并交换 和 的位置,语句功能不变 ( D) 部分可以是一个循环语句,例如 if() while() 13 有如下说明: int a 10 =1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为 9的表达式是 ( )。 ( A) *p+9 ( B) *(p+8) ( C) *p+=9 ( D) p+8 14 有如下程序段: int i = 0, j = 1; int / r = j; / int *p = / *p = / 其中会产生编译错误的语句是 ( )。 ( A
6、) ( B) ( C) ( D) 15 下列字符串中,不可以用做 C+标识符的是 ( )。 ( A) y_2006 ( B) _TEST_H ( C) Return ( D) switch 16 为了取代 C中带参数的宏,在 C+中使用 ( )。 ( A)重载函数 ( B)内联函数 ( C)递归函数 ( D)友元函数 17 通过运算符重载,可以改变运算符原有的 ( )。 ( A)操作数类型 ( B)操作数个数 ( C)优先级 ( D)结合性 18 在函数中,可以用 auto、 extern、 register和 static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的
7、存储类型是 ( )。 ( A) auto ( B) extern ( C) register ( D) static 19 下列运算符函数中肯定不属于类 FunNumber的成员函数的是 ( )。 ( A) int operator- (FunNumber); ( B) FunNumber operator - (); ( C) FunNumber operator - (int); ( D) int operator - (FunNumber, FunNumber); 20 若有下面的函数调用: fun(a+b, 3, max(n-1, b) 则 fun的实参个数是 ( )。 ( A) 3
8、( B) 4 ( C) 5 ( D) 6 21 关于运算符重载,下列表述中正确的是()。 ( A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 ( C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 22 有如下程序: #include using namespace std; int main() void function(double val); double val; function(val); cout using namespace std; class Base public: voi
9、d fun() coutfun(); ( D) fun(); 29 有如下程序: #include using namespace std; class MyClass public: MyClass() cout using namespace std; int i=1; class Fun public: static int i; int value() return i-1; int value()const return i+1; ; int Fun:i=2; int main() int i=3; Fun fun1; const Fun fun2; return 0; 若程序的输出
10、结果是: 123 则程序中下画线处遗漏的语句是 ( )。 ( A) cout using namespace std; class Obj static int i; public: Obj() i+; Obj() i-; static int getVal() return i; ; int Obj:i=0; void f() Obj ob2; coutgetVal(); delete ob3; cout using namespace std; class Pair int m,n; public: Pair(int j,int k):m(j),n(k) int get() return
11、m; int get() const return m+n; ; int main() Pair a(3,5); const Pair b(3,5); cout using namespace std; class Base protected: Base() cout using namespace std; class Instrument public: virtual void Display()=0; ; class Piano : public Instrument public: void Display() /*函数体略 */ ; int main() Instrument s
12、; Instrument *p=0; / ; return 0; 下 列叙述中正确的是 ( )。 ( A)语句 “Insturment *p=0;“编译时出错 ( B)语句 “Instrument s;“编译时出错 ( C)类 Piano中的 Display函数不是虚函数 ( D)类 Instrument是一个虚基类 36 有如下程序: #include using namespace std; class A public: virtual void func1() coutfunc1(); p-func2(); delete p; return 0; 执行这个程序的输出结果是 ( )。 (
13、 A) B1B2 ( B) A1A2 ( C) B1A2 ( D) A1B2 37 关于在调用模板函数时模板实参的使用,下列表述中正确的是 ( )。 ( A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略 ( B)对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略 ( C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略 ( D)对于常规参数所对应的模板实参,任何情况下都不能省略 38 关于关键字 class和 typename,下列表述中正确的是 ( )。 ( A)程序中的 typename都可以替换为 clas
14、s ( B)程序中的 class都可以替换为 typename ( C)在模板形参表中只能用 typename来声明参数的类型 ( D)在模板形参表中只能用 class或 typename来声明参数的类型 39 在下列枚举符号中,用来表示 “相对于当前位置 “文件定位方式的是 ( )。 ( A) ios_base:cur ( B) ios_base:beg ( C) ios_base:out ( D) ios_base:end 40 下列关于 C+流的描述中,错误的是 ( )。 ( A) coutA表达式可输出字符 A ( B) eof()函数可以检测 是否到达文件尾 ( C)对磁盘文件进行流
15、操作时,必须包含头文件 fstream ( D)以 ios_base:out模式打开的文件不存在时,将自动建立一个新文件 国家二级 C+机试(选择题)模拟试卷 14 答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B。 2 【正确答案】 D 【试题解析】 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列 中元素的动态变化情况,所以 B)与 C)错误。 3 【正确答案】 C 【试题解析】 当有序线性表为顺序存储时才能用二分法查找。可以证明的是对
16、于长度为 n 的有序线性表,在最坏情况下,二分法查找只需要比较 log2n 次,而顺序查找需要比较 n 次。 4 【正确答案】 A 【试题解析】 链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B)与 C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以 D)错误。 5 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表 示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 6 【正确答案】 B 【试题解析】 在需求分析阶段可以使用的工具有数据流图 DFD图,数据字典DD,判定树与判定表,所以选择 B。 7 【正确答案】 A 【试题解
17、析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A。 8 【正确答案】 B 【试题解析】 因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。 9 【正确答案】 C 【试题解析】 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C。 10 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组
18、,并且在结果中把重复的属性列去掉,所以根据 T 关系中的有序组可知 R与 S 进行的是自然连接操作。 11 【正确答案】 D 【试题解析】 const是 一个 C+关键字,用于限定不允许改变的变量。选项 B 是指向常量的指针,定义时可以不初始化;选项 D是指针常量,定义时必须初始化。故答案为 D。 12 【正确答案】 A 【试题解析】 本题考查 if语句, if语句的条件部分不能嵌套 if 语句,所以 A选项错误; B选项就是 if语句嵌套; C选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样; D选项也正确。 13 【正确答案】 B 【试题解析】 本题考查指向数组的指针,本题中指
19、针变量 p 指向数组 a,那么 *p的值就是 1,即表示数组的第一个元素,那么数值 为 9的表达式就是将指针向后移动 8个地址,即 p+8指向的是数组元素值为 9,所以数值为 9的表达式是 *(p+8)。 14 【正确答案】 A 【试题解析】 本题考查指针和引用。 为引用,使用正确; 中 来调用基类的成员函数 fun。 29 【正确答案】 D 【试题解析】 构造函数和析构函数的调用顺序为先构造的后析构,后构造的先析构。所以本题答案为 D。 30 【正确答案】 A 【试题解析】 本题考查构造函数、常成员函数和静态数据成员。外部同名的变量赋值,不能改变类的静态变量值,所以 Fun对象里的 i值为
20、2,所以本题答案为A。 31 【正确答案】 D 【试题解析】 本题考查构造函数和析构函数的调用顺序,调用顺序为先构造的后析构,后构造的先析构。本题中先定义了一个对象 ob1,会执行构造函数,那么 i就变为了 1;再执行函数 f 后,由于又定义了一个对象 ob2,所以再次执行构造函数, i就变为了 2,输出了 2。函数执行完后执行析构函数, i变为了 1,然后又定义了对象指针, i变为了 2。释放 ob3后, i变为了 1,所以答案为 D。 32 【正确答案】 B 【试题解析】 本题考查常对象、常成员函数 及构造函数。常对象只能调用常成员函数,所以本题中,对象 a为普通对象,执行 a.get()
21、后,会执行默认构造函数,输出 3;对象 b 为常对象,执行 b.get()后,会执行常构造函数,输出 8。 33 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数;对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个派生类对象d1,首先执行基类的构造函数,输出 A;然后执行派生类的构造函数,输出 B。所以答案为 C。 34 【正确答案】 A 【试题解析】 默认继承方式为私有继承,私有继承将基类的公用成员和保护成员都变为了私有成员,基类的私有成员依然属于基类私有,派生类不能访问基类
22、的私有成员。所以 A选项正确。 35 【正确答案】 B 【试题解析】 本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被 “初始化 “为 0的函数,包含纯虚函数的类为抽象类,抽象类不能被实例化,所以语句“Instrument s;“在编译时出错。 36 【正确答案】 C 【试题解析】 本题考查虚函数。虚函数指在基类中声 明为 virtual 并在一个或多个派生类中被重新定义的成员函数。题中定义了一个派生类对象 B,并使用类 A的对象指针指向 B,由于基类 A中的 func1 为虚函数,所以会执行派生类的func1,输出 B1,而基类中的 func2不是虚函数,所以 p-func2( )会执行
23、基类的func2,输出 A2。故答案为 C。 37 【正确答案】 D 【试题解析】 在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表 (用 “括起来的参数表 )或从 模板函数实参表 (用 “()“括起来的参数表 )。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表 “也可以不要,因此选项 D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能
24、省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。 38 【正确答案】 A 【试题解析】 程序中的 typename都可以替换为 class,但程序中的 class 不可以全部替换为 typename。在模板类型形参中除了 typename和 class 以外,也可以用常规类型来声明参数的类型,所以 C、 D选项错误。 39 【正确答案】 A 【试题解析】 streamoff定义于 iostream.h 中,定义有偏移量 offset所能取得的最大值, seek_dir表示移动的基准位置,是一个有以下值的枚举: ios:beg:(文件开头)、 ios:cur:(文件当前位置)、 ios:end:(文件结尾)。 40 【正确答案】 A 【试题解析】 本题考查 C+流,想要输出字符 “A“,则应该是 cout“A“,所以本题答案为 A。