1、国家二级( C+)笔试模拟试卷 113及答案与解析 1 已知一棵二叉树前序遍历和中序遍历分别为 ABDEGCFH和 DBGEACHF,则该二叉树的后序遍历为 ( A) GEDHFBCA ( B) DGEBHFCA ( C) ABCDEFGH ( D) ACBFEDHG 2 树是结点的集合,它的根结点数目是 ( A)有且只有 1 ( B) 1或多于 1 ( C) 0或 1 ( D)至少 2 3 如果进栈序列为 e1, e2, e3, e4,则可能的出栈序列是 ( A) e3, e1, e4, e2 ( B) e2, e4, e3, e1 ( C) e3, e4, e1, e2 ( D)任意顺序
2、4 在设计程序时,应采纳的原则之一是 ( A)不限制 goto语句的使用 ( B)减少或取消注解行 ( C)程序越短越好 ( D)程序结构应有助于读者理解 5 程序设计语言的基本成分是数据成分、运算成分、控制成分和 ( A)对象成分 ( B)变量成分 ( C)语句成分 ( D)传输成分 6 下列叙述中,不属于软件需求规格说明书的作用的是 ( A)便于用户、开发入员进行理解和交流 ( B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确 认测试和验收的依据 ( D)便于开发入员进行需求分析 7 下列不属于软件工程的 3个要素的是 1 ( A)工具 ( B)过程 ( C)方法
3、 ( D)环境 8 单个用户使用的数据视图的描述称为 ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 9 将 E R图转换到关系模式时,实体与联系都可以表示成 ( A)属性 ( B)关系 ( C)键 ( D)域 10 SQL语言又称为 ( A)结构化定义语言 ( B)结构化控制语言 ( C)结构化查询语言 ( D)结构化操纵语言 11 C+语言对 C语言做了很多改进, C+语言相对于 C语言的最根本的变化是 ( A)增加了一些新的运算符 ( B)允许函数重载,并允许设置缺省参数 ( C)规定函数说明符必须用原型 ( D)引进了类和对象的概念 12 下列哪个是 C+语言的有效
4、标识符 ? ( A) No1 ( B) No.1 ( C) 12345 ( D) int 13 设有定义 int x; float y;,则 10+x+y值的数据类型是 ( A) int ( B) double ( C) float ( D)不确定 14 下列程序的执行结果为 #include iostream.h void main( ) int a=3,b=0; int * p=a+) a+; cout a end1; ( A) 10 ( B) 11 ( C) 12 ( D) 0 16 下列选项,不正确的是 ( A) for(int a=1; a =10; a+); ( B) int a=
5、1; do a+; while(a =10) ( C) int a=1; while(a =10) a+; ( D) for(int a=1; a =10; a+)a+; 17 下面关于数组的初始化正确的是 ( A) char str =a, b, c ( B) char str2=a, b, c ( C) char str23= a, b, c, d, e, f ( D) char str( )=a, b, c 18 下列程序的输出结果为 #include iostream h void main( ) char * a =“hello“, “the“, “world“; char * *
6、pa=a; pa+; cout *pa end1; ( A) hello ( B) the ( C) world ( D) hellotheworld 19 决定 C+语言中函数的返回值类型的是 ( A) return语句中的表达式类型 ( B)调用该函数时系统随机产生的类型 ( C)调用该函数时的主调用函数类型 ( D)在定义该函数时所指定的数据类型 20 下列程序的输出结果是 #include iostream h int min(int a, int b) if(a b) return a; else return b; return0; void main( ) cout min (1
7、, min (2, 3) end1; ( A) 0 ( B) 1 ( C) 2 ( D) 3 21 下列程序的运行结果为 #include iostream h void print(double a) cout +a; void print(int a, int b) cout b a; void main( ) print(1 2); tout “; print(3, 4); ( A) 1.2 34 ( B) 2.2 34 ( C) 1.2 43 ( D) 2.2 43 22 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是 ( A)公有类型 ( B)私
8、有类型 ( C)保护类型 ( D)友元类型 23 在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是 ( A)友元函数 ( B)虚函数 ( C)构造函数 ( D)析构函数 24 类的析构函数的作用是 ( A)一般成员函数的初始化 ( B)类的初始化 ( C)对象的初始化 ( D)删除类创建的对象 25 下列说法正确的是 ( A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 ( B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 ( C)类的内联函数必须在类体内定义 ( D)类的内联函数必须在类体外通过加关键字 inline
9、定义 26 下面对静态数据成员的描述中,正确的是 ( A)静态数据成员可以在类体内进行初始化 ( B)静态数据成员不可以被类的对象调用 ( C)静态数据成员不能受 private控制符的作用 ( D)静态数据成员可以直接用类名调用 27 下面对于友元函数描述正确的是 ( A) 友元函数的实现必须在类的内部定义 ( B)友元函数是类的成员函数 ( C)友元函数破坏了类的封装性和隐藏性 ( D)友元函数不能访问类的私有成员 28 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是 ( A)派生类的对象可以赋给基类的对象 ( B)派生类的对象可以初始化基类的引用 ( C)派生类的对
10、象可以直接访问基类中的成员 ( D)派生类的对象的地址可以赋给指向基类的指针 29 下面程序的运行结果为 #include iostream h class A public: A( )cout “1“; A( )cout “2“; ; class B: public A public: B( )cout “3“; B( )cout “4“; ; void main( ) B ( A) 1234 ( B) 1324 ( C) 1342 ( D) 3142 30 下列关于虚基类的描述,错 误的是 ( A)设置虚基类的目的是为了消除二义性 ( B)虚基类的构造函数在非虚基类之后调用 ( C)若同一
11、层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用 ( D)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数 31 下列关于多态性的描述,错误的是 ( A) C+语言中的多态性分为编译时的多态性和运行时的多态性 ( B)编译时的多态性可通过函数重载实现 ( C)运行时的多态性可通过模板和虚函数实现 ( D)实现运行时多态性的机制称为动态绑定 32 下列运算 符中,在 C+语言中不能重载的是 ( A) * ( B) = ( C) : ( D) / 33 当使用 fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 ( A) ios:in
12、 ( B) ios:out ( C) ios:in | ios:out ( D)以上都不对 34 下列程序的运行结果是 #include iostream h class A int a; public: A( )a=0; A(int aa) a=aa; couta+; ; void main( ) A x,y(2), z(3); cout end1; ( A) 0 ( B) 23 ( C) 34 ( D) 25 35 下面程序的输出结果是 #include iostream, h class example int a; public: example(int b) a=b+; void p
13、rint( )a=a+1; cout a “; void print( )constcout a “; ; void main( ) example X(3); ( A) 22 ( B) 43 ( C) 42 ( D) 32 36 在长度为 n的有序线性表中进行二分查找,需要的比较次数为【 】。 37 需求分析阶段的工作,可以分成以下 4个方面:【 】、分析与综合、编写需求规格说明书和评审。 38 联接运算是将两个或两个以上的关系根据联接条件生成一个【 】。 39 若 a是 float型变量,且 a=6,则表达式 “a/2+(int)(a+1)%2”的值为【 】。 40 选择运算的结果关系同原
14、关系具有【 】的结构框架,投影运算的结果关系同原关系通常具有【 】的结构框架。 41 下面语句段的输出结果是【 】。 int x=0,y=2,z=3; switch(x) case 0 : switch(y) case 1 : cout *; break; case 2 : cout %; break; case 1 : switch(z) case 1 : cout $; bre 42 若要把类 FriendClass 定义为类 MyClass 的友元类,则应在类 MyClass 的定义中加入语句【 】。 43 有如下的类的模板定 义: template class T class MyCl
15、ass private: T number; public: MyClass(T k); ; 其中构造函数 MyClass()用 k的值初始化数据成员 n。因此在模板类体外,构造函数 MyClass应定义为【 】。 44 有以下程序: #include iostream using namespace std; class MyClass public: MyClass(); MyClass(); static int s; void SetValue(int val); ; int MyClass:s=0; MyClass:MyClass() s+; void My 45 有以下程序 : #
16、include iostream using namespace std; class Base private: int a,b; public: Base(int x, int y) a=x; b=y; void Show() cout a , b end1; 46 设文件 temp.txt 已存在,则以下的打印结果是【 】 #include iostream #include fstream using namespace std; int main() ofstream outf (“temp.txt“,ios base: :trunC) ; outf “How you doing“;
17、 outf.close(); ifstream inf(“temp.txt“); 47 写出执行完下列代码段之后指定变量的值: bool x=true , y=false, z=false; x=x 【 】 ; int k=0; do s+=d; k+; d=1.0/(k*k+1); while(【 】 ); (b) double s=1.0; for(int k=1;k =10;k+) s+=1.0/(k*(k+1); 国家二级( C+)笔试模拟试卷 113答案与解析 1 【正确答案】 B 【试题解析】 利用前序和中序遍历的方法可以确定二叉树的结构,具体步骤如下: 前序遍历的第一个结点 A为
18、树的根结点; 中序遍历中 A的左边的结点为A的左子树, A右边的结点为 A的右子树; 再分别对 A的左右子树进行上述两步处理,直到每个结点都找到正确的位置。 2 【正确答案】 A 【试题解析】 树是一个或多个结点组成的有限集合,其中一个特定的结点称为根,其余结点分为若干个不相交的集合。每个集合同时又是一棵树。树有且只有 1个根结点。 3 【正确答案】 B 【试题解析】 由栈 “后进先出 ”的特点可知:选项 A)中 e1不可能比 e2先出,选项C)中 e3不可能比 e4先出,且 e1不可能比 e2先出,选项 D)中栈是先进后出的,所以不可能是任意顺序。选项 B)中出栈过程如图所示:4 【正确答案
19、】 D 【试题解析】 滥用 goto语句将使程序流程无规律,可读性差,因此选项 A)不选;注解行有利于对程序的理解,不应减少或取消,选项 B)也不选;程序的长短要依照实际情况而论,而不是越短越好,选项 C)也不选。 5 【正确答案】 D 【试题解析】 程序设计语言是用于书写计算机程序的语言,其基本成分有以下 4种,数据成分:用来描述程序中的数据。运算成分:描述程序中所需的运算。控制成分:用来构造程序的逻辑控制结构。传输成分:定义数据传输成分,如输入输出语言。 6 【正确答案】 D 【试题解析】 软件需求规格说明书 (SRS, Soft ware Requirement Specificatio
20、n)是需求分析阶段的最后成果,是软件开发中的重要文档之一。它有以下几个方面的作用: 便于用户、开发人员进行理解和交流; 反映出用户伺题的结构,可以作为软件开发工作的基础和依据; 作为确认测试和验收的依据。 7 【正确答案】 D 【试题解析】 软件工程包括 3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。 8 【正确答案】 A 【试题解析】 选项 A)正确,外模式是用户的数据视图,也就是用 户所见到的数据模式;选项 B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项
21、C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项 D)不正确,存储模式即为内模式。 9 【正确答案】 B 【试题解析】 数据库逻辑设计的主要工作是将 E-R图转换成指定 RDBMS中的关系模式。首先,从 E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系, E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。 10 【正确答案】 C 【试题解析】 结构化查询语言 (Structured Query Language,简称 SQL)是集数据定义、数据操纵和数据控制功能于一体的数据库语言。 11 【正确答案】 D 【试题解析】 C+语言最重要
22、的特点是其为一种面向对象的程序设计语言,但是C+语言也包含了全部的 C语言的特征。 12 【正确答案】 A 【试题解析】 标识符是一个以字母或下划线开始的,由字母、下划线和数字组成的字符串,标识符不能与任意关键字同名。 13 【正确答案】 C 【试题解析】 由算术运算符组成 的表达式中,若含有不同类型的操作数,则系统隐含地将低类型转化为高类型,由低至高的顺序为 int- float- double。 14 【正确答案】 B 【试题解析】 *p为所指对象 a的值,语句 “b=+a+; ”等价于 “b=b+a;a=a+1;”。 15 【正确答案】 C 【试题解析】 在进入最后一次循环时 a=10,
23、在循环体内执行 “a+;”后 a=11,执行完该次循环体计算 for循环的增量部分后 a=12小于 10,循环结束。 16 【正确答案】 B 【试题解析】 本题考查的是基本循环 语句的使用,选项 A),选项 C)和选项 D)都为正确的形式,在选项 B)中的 while(a =10)后缺少结束符分号 “; ”。 17 【正确答案】 A 【试题解析】 本题考查的是字符数组的初始化。选项 B)中用 3个元素初始化大小为 2的数组,越界了;选项 C)中应该是 2行 3列的数组,题中使用 3行 2列初始化;选项 D)中数组合后应用方括号。 18 【正确答案】 B 【试题解析】 本题主要考查的是指针数组和
24、指向指针的指针之间的关系,其中 a是指针数组, pa是指向指针数组行的指针,所以 pa自加 1相当于指向 下一行。 19 【正确答案】 D 【试题解析】 C+语言中,在定义该函数时所指定的数据类型决定函数的返回值类型。 20 【正确答案】 B 【试题解析】 本题考查的是函数的调用,第一次调用 min(2, 3),因为 2 3,所以返回值为 2,第二次调用 min(1, 2),因为 1 2,所以返回 1。 21 【正确答案】 D 【试题解析】 本题考查的是对重载函数的掌握,因为 +a是右结合的,所以 a先自加 1再输出,即为 2.2,之后调用函数 print(int a, int b)输出 b和
25、 a,即 43。 22 【正确答案】 D 【试题解析】 所谓的访问控制只包含公有类型、私有类型和保护类型 3种,友元可以是一个函数,也可以是一个类。 23 【正确答案】 C 【试题解析】 构造函数在创建对象时系统自动调用,其功能是使用给定的值将对象初始化。 24 【正确答案】 D 【试题解析】 析构函数就是用来释放对象的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放了。 25 【正确答案】 B 【试题解析】 本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效 率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了
26、,如果不加 inline关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。 26 【正确答案】 D 【试题解析】 静态数据成员必须在类体外初始化,它是类的所有对象的共有成员,需要使用类名调用,静态数据成员的初始化与权限控制无关。 27 【正确答案】 C 【试题解析】 友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性 ,使得类的非成员函数可以访问类的私有成员。 28 【正确答案】 C 【试题解析】 公有继承的派生类和基类是子类型的关系,所谓子类型是类型间一般和特殊的关系,即派生类是基类的子类型或者说基类的操作可以被用于操作派
27、生类的对象。 29 【正确答案】 C 【试题解析】 本题考查的是在继承中构造函数和析构函数的调用顺序,应该是先调用基类的构造函数,再调用派生类的构造函数,调用析构函数时的顺序是先调用派生类的析构函数,后调用基类的析构函数。 30 【正确答案】 B 【试题解析】 虚基类的引 入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数选于非虚基类的构造函数执行。 31 【正确答案】 C 【试题解析】 编译时的多态性是通过函数重载和模板体现的,运行时的多态性是通过虚函数体现的。 32 【正确答案】 C 【试题解析】 不能被重载的运算符还包
28、括: “.”, “.*”, “- *”和 “?:”。 33 【正确答案】 D 【试题解析】 使用 fstream类建立文件流必须定义打开方式,否则编译器无法判断该文件 流是读还是写。 34 【正确答案】 B 【试题解析】 本题考查的是对构造函数的掌握,另外 “+”运算符是右结合的,所以在进行输出的时候都是先把原来的输出后再自加 1。 35 【正确答案】 C 【试题解析】 “+”是右结合的,所以先赋值为 3,最后输出 3+1;常成员函数只有常对象才能调用,所以输出 2。 36 【正确答案】 log2n 【试题解析】 二分法查找只适用于顺序存储的有序表。对于长度为 n的有序线性表,在最坏情况下,二
29、分查找只需要比较 log2n次。 37 【正确答案】 需求获取 【试题解析】 需求分析的任务是发现需求、求精、建模和定义需求的过程,由需求分析的定义可知,需求分析的内容包括:提炼、分析和仔细审查已收集到的需求。因此需求分析阶段的工作,可以分成以下四个方面:需求获取、分析与综合、编写需求规格说明书和评审。 38 【正确答案】 新关系 【试题解析】 关系的联接运算是指将两个或两个以上的关系根据联接条件生成一个新关系。常见的联接有等值联接和自然联接。 39 【正确答案】 4 【试题解析】 a/2的值为 3,表达式 (int)(a+1)%2的值为 1,所以 最后结果为 4。 40 【正确答案】 相同
30、不同 【试题解析】 结构框架是由 n个命名的属性组成, 如果将一个关系看作一张表,那么选择操作就是从这张表中选出一些行而丢弃另一些行。而投影操作则是从这张表中选出某些列而丢弃另一些列。如果只对一个关系中的某些属性感兴趣,那么就需要使用投影操作在这些属性上投影该关系。因此,选择运算的结果关系同原关系具有相同的结构框架,投影运算的结果关系同原关系通常具有不同的结构框架。 41 【正确答案】 %# 【试题解析】 本题考核选择语句的嵌套使用。由于第 1个 case后面没有跳转语句 “break; ”,所以程序还要进入第 2个分支执行。因此程序最后输出 “%#”。 42 【正确答案】 friend Fr
31、iendClass; 【试题解析】 本题考核友元类的声明。友元类可以在另一个类的公有部分或私有部分进行说明,说明的方法为: friend类名; 43 【正确答案】 template classT /MyClass T: MyClass(T k): number(k) 【试题解析】 类模板的成员函数的类体外的定义以 “template class T ”开头。 44 【正确答案】 3 【试题解析】 本题程序中把变量 s定义为静态数据成员,它被 MyClass类的所有对象所共享,但它不属于类的任何一个对象,它的作用域是类范围。在类MyClass的构造函数中,每创建一个对象, s就增 1。由此可知,
32、 s用来记录建立对象的个数。由于创建对象指针 p时并不会调用构造函数,所以 s最后的值是 3。 45 【正确答案】 10,20 【试题解析】 本题考核基类指针的使用。本题首先定义了一个基类 Base和一个由 Base派生出来的派生类 Derive。在主函数 中,定义了一个基类 Base指针 pb和基类对象 b,还定义了派生类 Derive的对象 d。然后将派生类对象 d的地址赋值给指向基类 Base的指针 pb。由于 Derive是 Base的子类型,因此允许上述赋值。但这时指针 pb只能使用从基类 Base继承的成员,即当 pb指向 d对象时, pb-show还是调用基类 Base的成员函数
33、 show()。所以程序最后输出的对象 d中对基类成员的初始化值,即 10,20。 46 【正确答案】 How 【试题解析】 本题考核文件的 I/O操作。程序中定义了 ofstream类的对象 outf和 ifstream类的对象 inf。然后利用对象 outf在文件 test txt中写入 “How you doing”。最后利用对象 inf打开文件,将其中的数据输入到变量 str中,由于读时遇到空格时就终止,所以 str中存放的字符串为 “How”。 47 【正确答案】 false true 【试题解析】 执行语句 “x&y|z; ”后, x的值变为 false。执行 “x|y&z”后, y的值变为 false,执行 “!(x!=y)|y=z); ”后, z的值变为 true。 48 【正确答案】 d=1.0 k =10 【试题解析】 本题考核 while循环与 for循环之间的转换。只要把握住循环的起始条件、结束条件和变量控制,就易解这种类型的题目。