1、国家二级( C+)笔试模拟试卷 254及答案与解析 1 原因排除法属于 ( )。 ( A)软件调试方法 ( B)黑盒测试方法 ( C)白盒测试方法 ( D)动态测试方法 2 3 4 对于浯句 cout end1 x;中的各个组成部分,下列叙述中错误的是 ( )。 ( A) “cout”是 个输出流对象 ( B) “end1”的作用是输出回车换行 ( C) “x”是 个变量 ( D) “ ”称作提取运算符 5 6 在任意一棵二叉树的前序序列和后 序序列中,各叶子之间的相对次序关系 ( )。 ( A)不一定相同 ( B)都不相同 ( C)互为逆序 ( D)都相同 7 下列数据结构中,能够按照 “先
2、进后出 ”原则存取数据的是 ( A)循环队列 ( B)栈 ( C)队列 ( D)二叉树 8 下列说法中,不属于数据模型所描述的内容的是 ( A)数据结构 ( B)数据操作 ( C)数据查询 ( D)数据约束 9 软件需求分析阶段的工作,可以分为 4个方面:需求获取、需求分析、编写需求分析说明书和 ( )。 ( A)阶段性报告 ( B)需求评审 ( C)总结 ( D)都不正确 10 下列叙述中正确的是 ( A)数据库系统是一个独立的系统,不需要操作系统的支持 ( B)数据库设计是指设计数据库管理系统 ( C)数据库技术的根本目标是要解决数据共享的问题 ( D)数据库系统中,数据的物理结构必须与逻
3、辑结构一致 11 下面程序的执行结果为 #includ“iostream“ using namespace std; class A int a; public: void Seta(int x) a x; void Display_a() cout a endl; ; class B int b; public: void Setb(int x) b x; void ( A)输出为 2 2 3 ( B)有错误在第 5行 ( C)输出为 1 2 3 ( D)有错误在第 7行 12 下面关于虚函数的描述中正确的是 ( )。 ( A)虚函数是一个静态成员函数 ( B)虚函数 是一个非成员函数 (
4、C)虚函数可以在函数说明时定义,也可以在函数实现时定义 ( D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 13 下列表示纯虚函数的成员函数是 ( )。 ( A) virtual int func(int); ( B) void func(int)=0; ( C) virtual void func 0; ( D) virtual void func(int) 14 下列关于虚函数的说明中,正确的是 ( )。 ( A)从虚基类继承的 函数都是虚函数 ( B)虚函数不得是静态成员函数 ( C)只能通过指针或引用调用虚函数 ( D)抽象类中的成员函数都是虚函数 15 派生类的成员函
5、数不能访问基类的 ( )。 ( A)公有成员和保护成员 ( B)公有成员 ( C)私有成员 ( D)保护成员 16 下列程序中横线处正确的语句是 ( )。 #include using namespace std; class TestClass public: void fun()coutfun(); 17 C+源文件中包含的输入 /输出头文件为 ( )。 ( A) stdio.h ( B) stdafx.h ( C) iostream.h ( D) stream.h 18 在说明一个结构体变量时,系统分配给它的存储空间是 ( )。 ( A)该结构体中第一个成员所需的存储空间 ( B)该结构
6、体中最后一个成员所需的存储空间 ( C)该结构体中占用最大存储空间的成员所需的存储空间 ( D)该结构体中所有成员所需存储空间的总和 19 在 C+语言中, 080是 _。 ( A)十进制数 ( B)八进制数 ( C)十六进制数 ( D)非法数 20 当在使用类模板时,类模板本身被实例化咸了一个具体的 _。 ( A)对象 ( B)实例 ( C)模板类 ( D)类 21 已知在函数 func中语句 this- ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是 _ 。 ( A)迁是某个类的数据成员, func 是该类的友元函数 ( B)迁是某个类的数据成员, func
7、是该类的成员函数 ( C) this- ff和 ff 是同一个变量 ( D) func 不是一个静态成员函数 22 关于友元,下列说法错误的是 _。 ( A)如果类 A是类 B的友元,那么类 B也是类 A的友元 ( B)如果函数 fun()被说明为类 A的友元,那么在 fun()中可以访问类 A的私有成员 ( C)友元关系不能被继承 ( D)如果类 A是类 B的友元,那么类 A的所有成员函数都是类 B的友元 23 若有说明 int a34;,则 a数组元素的非法引用是 ( A) a02*1 ( B) a13 ( C) a420 ( D) a04 24 下列语句中不是死循环的是 ( A) int
8、 i=10; ( B) for(int i=1; i 10; i+) while(1) i-; i-; if(i= =1)break; ( C) int i=0; ( D) int i=1; do for(; )1=i+1; i+; while(i =0); 25 下面关于 C+语言的描述错误的是 ( A) C+语言支持数据封装 ( B) C+语言中引入友元没有破坏封装性 ( C) C+语言允许函数名和运 算符重载 ( D) C+语言支持动态联编 26 存在定义 int a10, x, *Pa;,若 pa= ; class Derived public: Derived() cout “D“;
9、 virtual void fun() Base:fun(); cout “C“; int main () Base *ptr; Derived obj; ptr= p- fun ( ); return 0; ( A) DBC ( B) DCB ( C) BDC ( D) CBD 29 与 C语言 prinft(“Hello word/n“);语句功能相同的 C+语句是 ( )。 ( A) cout “Hello worldn“; ( B) cin “Hello wofldn; ( C) cout “Hello worldn“; ( D) cin “Hello wofldn; 30 假定要对类
10、 AB定义加号操作符重载成员函 数,实现两个 AB类对象的加法,并返回相加结果,则该成员函数的声明语句为 ( )。 ( A) AB operator+(AB cout. write(str, ); ( A) strlen(str) ( B) sizeof(str) ( C) strlen(str+1) ( D) sizeof(str-1) 34 执行语句序列 ofstream outfile(”DATA DAT“); if()cout “OK“; elsec out “FAIL“; 后,如果文件打开成功显示 “OK”,否则就显示 “FAIL”。由此可知,上面 if语句的 处的表达式应是 ( A
11、) outfile fail()或 outfile ( B) outfile good()或 !outfile ( C) outfile good()或 outfile ( D) outfile fail()或 !outfile 35 有如下类定义: class Test public: Test()a=0;c=0; / int f(int a)const this- a=a; / static int g()return a; / void h(int b)Test:b=b; ; / private: int a; static int b; const int c; ; int Test:
12、b=0; 在标注号码的行中,能被正确编译的是 ( A) ( B) ( C) ( D) 36 一个项目具有一个项目主管,一个项目主管只可管理一个项目,则实体 “项目主管 ”与实体 “项目 ”的联系属于 _的联系。 37 软件是程序、数据和 _的集合。 38 有一种只在循环语句或 switch语句中使用的流程控制语句,表示该语句的关键字是 _。 39 在长度为 n的有序线性表中进行二分查找,需要的比较次数为【 】。 40 软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中最重要的是【 】。 41 假定 用户没有给一个名字为 Sampie的类定义构造函数,则系统为其隐含
13、定义的构造函数为 _。 42 有如下程序: #include iostream using namespace std; class A public: A()cout “A”; A()cout “A”; ) ; class B A a; public, B()cout “B”; B()cout “B”; ; int main() B b; return 0; 程序的输出结果是 _。 43 以下程序的输出结果是 _。 #include iostream.h void main( ) int a 0; a (a 8) ; cout a; 44 有如下程序: #include iostream u
14、sing namespace std; class ONE public: virtual void f() cout “1“; ; class TWO: public ONE public: TWO() cout “2“; ; class THREE: public TWO public: virtual void f() TWO:f(); cout “3“; ; int main() ONE aa, *p; TWO bb; THREE cc; p= P- f(); return 0; 执行上面程序的输出是【 】。 45 下列程序的运行结果为【 】。 #include iostream.h
15、void main(void) int a=2, b=-1, c=2; if(a b) if(b 0)c=0; else c=c+1; cout c endl; 46 C+程序是从【 】函数开始执行的。 47 若要把类 B定义为类 A的友元类,则应在类 A的定义中加入语句 _。 48 C+类对象销毁时,自动执行的函数是【 】。 49 【 】是一系列相关函数的模型或样板,这些函数的【 】形式相同,只是所针对的【 】不同。 50 下列程序的输出结果是【 】。 #include iostream using namespace std; class A int a; public: A():a(9)
16、 virtual void print() const cout a; ; class B: public A char b; public: B( )b=S; void print() const cout b; ; void show(A int main() Ad1,*p; B d2; p= d1.print(); d2.print0; p- print(); show(d1); show(d2); return 0; 国家二级( C+)笔试模拟试卷 254答案与解析 1 【正确答案】 A 【试题解析】 软件调试方法有:强行排错法;回塑法,原因排除法。 2 【正确答案】 A 【试题解析】
17、 线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。 3 【正确答案】 D 4 【正确答案】 D 5 【正确答案】 D 6 【正确答案】 D 【试题解析】 前序遍历序列的顺序是先根,再左子树,最后右子树;后序遍历序列的顺序是先左子树,再右子树,最后根。因此各叶子之间的相对次序关系在前序序列和后序序列中是一样的。 7 【正确答案】 B 【试题解析】 栈是限定只在一端进行插入与删除的线性表。通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。栈是按照
18、“先进后出 ”或 “后进先出 ”的原则组织数 据的。 8 【正确答案】 C 【试题解析】 数据模型所描述的内容有 3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操作方式。 9 【正确答案】 B 【试题解析】 本题考核软件需求分析的 4个阶段,分别为需求获取、需求分析、编写需求分析说明书和需求评审。 10 【正确答案】 C 【试题解析】 A选项,数据库系统需要操作系统的支持,必不可少,故其叙述不正确。 B 选项 错误,数据库设计是指设计一个能满足用户要求,性能良好的数据库。
19、 D选项也不对,数据库应该具有物理独立性和逻辑独立性,改变其一而不影响另一个。正确答案为 C。 11 【正确答案】 D 12 【正确答案】 D 【试题解析】 本题考查虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数必须是类的成员函数,虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数 个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。 13 【正确答案】 C 【试题解析】 本题考查纯虚函数的
20、定义形式。由于纯虚函数在最后要有 “=0”,故据此排除 A和 D。而 B 中没有出现 virtual 关键词故正确答案为 C。 14 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在成员函数的声明前面加上 vinllal关键字,即可把函数声明为虚函数。虚函数可以是另一个函数的友元函数而不能是静态成员函数。 15 【正确答案】 C 【试题解析】 基类的私有成员在派生类中都是不可见的,如果一个派生类要访问基类中声明的私有成员,可以将这个派生类声明为友元。 16 【正确答案】 C 【试题解析】 程序中的 TestClass1为 TestClass 的派生类, TestClass1 公有继
21、承TestClass,所以可以调用其中的公有成员 fun函数,如果要显示调用它,那么使用域符号 “: ”,这样就实现了对函数的显示调用,即选择 C)。 17 【正确答案】 C 【试题解析】 C+中使用流类库进行输入输出操作时,要包含 iostream.h 头文件。而 C语言中进行输入输出操作时要包含 stdio.h 文件。 18 【正确答案】 D 19 【正确答案】 D 20 【正确答案】 D 21 【正确答案】 A 【试题解析】 类可以访问友元类的数据。 22 【正确答案】 A 【试题解析】 一个类是另一个类的友元,意味着该类的每一个成员函数都是另 个类的友元函数。 23 【正确答案】 D
22、【试题解析】 本题定义 a为 3行 4 列的数组,它可用的行下标最大为 2,列下标最大为 3。注意: a04超过了数组的范围 。注意:数组的下标是从 0开始的。 24 【正确答案】 A 【试题解析】 选项 A)中 i自减到 l时就会执行 break 语句跳出循环,选项 B)中 i 10永远成立不会跳出循环,选项 C)中第一次进入循环体后 i 0永远不会跳出循环,选项 D)中未给出结束循环的条件。 25 【正确答案】 B 【试题解析】 数据封装就是数据抽象;友元可以访问类中的所有成员,是面向对象的一个重要特征,但是破坏了封装性;重载和动态联编都是面向对象的另一个特点一多态性。 26 【正确答案】
23、 A 【试题解析】 本题考查 的是数组和指向数组的指针之间的关系,选项 A中 x是被数组 a的第一个元素赋值,其余的都是被数组 a的第二个元素赋值。 27 【正确答案】 D 【试题解析】 本题考核虚函数的应用。动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。 28 【正确答案】 A 【试题解析】 本题考核虚函 数的应用。主函数中创建派生类 Derived的对象。obj时,调用其
24、构造函数首先输出字符 D。然后调用 fun()函数,由于派生 Derived已对基类的虚函数 fun()进行了重定义,所以语句 “p- fun(); ”调用的是派生类中的函数 fun(),即输出 BC。所以答案为 A选项。 29 【正确答案】 C 30 【正确答案】 B 31 【正确答案】 C 【试题解析】 cout x+;语句中,程序先输出 x的值,然后再加 1,所以结果为 1,此时 x的值为 2;在 int x=0; x+=y*2;语句中,将 0的值赋给 x,然后再运算 x+=y*2的值,结果为 x=6(此时 x的值为局部变量 ), y的值不变,在最后在执行了 x语句后的值,所以应为 2。
25、 32 【正确答案】 A 【试题解析】 本题考查在 include中采用不同的符号,如或 “,编译器搜索方式的不同。 33 【正确答案】 A 【试题解析】 本题考察在 C+中,字符串的存放方式,以及不同的字符串函数的作用其中, strlen 是专门用于求字符串长度的,其自动去掉字符数组后面的那个 /0,而 sizeof 后面求的则是 str指针,指针在目 前的 32位机器中是固定大小的,其值与字符中的长度是没有关系的。故可以排除 B 和 D。而选项 C则将 /0多考虑了一次。 34 【正确答案】 C 【试题解析】 本题考核 C的文件 I/O操作。函数 good()表示刚进行的操作成功时返回 t
26、rue,否则返回 false,所以可以通过类 ofstream的对象 outfile调用good()函数来检测刚才文件打开是否成功。题中在建立文件流对象的同时打开文件,若打开失败则返回 fail。所以 “outfile”也可以用作判断打开文件成功与否的条件。 35 【正确答 案】 D 【试题解析】 本题考查了类的定义。一个类的常数据成员的初始化只能在成员初始化列表中进行,所以选项 A不正确。常成员函数不能更新对象的数据成员,所以选项 B 不正确。静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,所以选项 C也不正确。故应该选择 D。 36 【正确答案】 一对一 或
27、 1:1 【试题解析】 实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。两个实体间的联系可以归结为三种类型:一对一联系表现为某一实体与另一实体一一对应相关联;一对多联系 表现为某一实体与相关多个实体相关联;多对多联系表现为多个实体与相关多个实体相联系。所以实体 “项目主管 ”与实体 “项目 ”的联系属于一对一的联系。 37 【正确答案】 相关文档 【试题解析】 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。 38 【正确答案】 break 39 【正确答案】 log2n 【试题解析】 二分法查找只适用于顺序存储的有序表。对于长度为 n 的
28、有序线性表,在最坏情况下,二分查找只需要比较 log2n 次。 40 【正确答案】 正确 性 【试题解析】 本题考查软件工程中需求规格说明书的评审。衡量需求规格说明书好坏的标准按重要性次序排列为:正确性、无歧义性、完全性、可验证性、一致性、可理解性、可修改性和可追踪性。因此,划线处应填入 “正确性 ”。 41 【正确答案】 Sample( ) 【试题解析】 尽管系统可以做很多默认的工作,但只是满足了逻辑上的最低要求,其实就是一些空的框架,虽然没有什么实际使用意义,但却可以满足编译器的最低要求。 42 【正确答案】 ABBA。 【试题解析】 本题考查派生类的构造函数与析 构函数的调用。建立一个派
29、生类对象时,派生类的构造函数的调用顺序如下:基类的构造函数、成员对象的构造函数,派生类自身的构造函数。析构函数的调用顺序与构造函数严格相反。 43 【正确答案】 16 【试题解析】 解答本题的关键是要分析清楚表达式 a (a 8) 中, a的值已经被赋为 8,而不是 0。 44 【正确答案】 2213 45 【正确答案】 2 46 【正确答案】 main 【试题解析】 所有的 C+语言程序都是从 main 函数开始执行,而普通函数的存在是为了简化 main 函数的复杂 程度。 47 【正确答案】 friend class B 48 【正确答案】 析构函数 【试题解析】 C+类对象销毁时,自动执
30、行的函数是析构函数。 49 【正确答案】 函数模板 源代码 数据类型 【试题解析】 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不问。注意:声明一个函数的模板格式是: template 模板形参表声明 函数声明 50 【正确答案】 9SS9S 【试题解析】 本题主要考查虚函数的运用。在主函 数中,首先通过基类对象 d1调用 print()函数,即调用基类的 print()函数,输出一个 9。然后通过派生类对象d2调用 print()函数,即调用派生类的 print()函数,输出一个 S。接下来通过基类指针 p调用 print()函数, p 此时指向的是派生类对象,而 print()函数是虚函数,根据选择题 (35)的解析,此时调用的是派生类的 print()函数,输出一个 S。然后,将基类对象 d1传递给 show()函数, show()函数通过基类类型引用形参 x调用print()函数,此时调用基类的 print()函 数,输出一个 9。最后,将派生类对象d2传递给 show()函数,此时 show()函数中通过基类类型引用 x调用派生类对象 d2的 print()函数,根据虚函数的性质,应该调用的是派生类的 print()函数,输出一个 S。故最终输出的结果是: 9SS9S。