1、二级 C+-6-2及答案解析(总分:77.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:52.00)1.设置虚基类的目的是U /U。 A. 简化程序 B. 消除二义性 C. 提高运行效率 D. 减少目标代码行(分数:2.00)A.B.C.D.2.算法的空间复杂度是指U /U。 A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中所需要的存储空间(分数:1.00)A.B.C.D.3.关于函数中的返回类型,下列表述中错误的是U /U。 A.返回类型中有可能包含关键字 int B.返回类型中有可能包含自定义标识符 C.返回类型中有可
2、能包含字符* D.返回类型中可能包含口(分数:2.00)A.B.C.D.4.下列程序执行结果是#includeiostream.hclass A public:int a;A( ):a(10)toutaendl;void main( ) A obj1;A obj2(obj1);cout“ “obj2.aendl; A. 10 10 B. 编译错误缺少拷贝构造函数 C. 10 随机数 D. 随机数随机数(分数:2.00)A.B.C.D.5.数据库设计中,用 E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的U /U。 A.需求分析阶段 B.逻辑设计阶段 C.概念设计阶段 D.
3、物理没计阶段(分数:2.00)A.B.C.D.6.数据库管理系统 DBMS 中用来定义模式、内模式和外模式的语言为 A.C B.Basic C.DDL D.DML (分数:1.00)A.B.C.D.7.以下哪个不是 C+语言中的有效标识符? A. 34a B. _AB C. A_B D. A25(分数:2.00)A.B.C.D.8.关于构造函数 A()的拷贝构造函数正确的是 A.A(A *B) ; B.A(AB) ; C.A(A(分数:1.00)A.B.C.D.9.有如下程序:#includeiostream.husing namespace std;class Basepublic:Base
4、()cout“BB“; f(); void f()cout“BF“;class Derived:public Basepublic:Derived()cout“DD“;void f()cout“Df“;int main()Derived d;return 0;执行上面的程序将输出_。 A.BBBfDD B.BBDfDDDf C.DD D.DDBBBf(分数:1.00)A.B.C.D.10.有如下函数模板定义:templatetypename T1,typename T2T1 FUN(T2 n)return n*5,0;若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型
5、数据,则该调用应表示为_。 A.FUN(9) B.FUN9 C.FUNdouble(9) D.FUN9(double)(分数:1.00)A.B.C.D.11.下面关于对象概念的描述中,U /U是错误的。 A.对象就是 C语言中的结构体变量 B.对象代表着正在创建的系统中的一个实体 C.对象是一个状态和操作(或方法)的封装体 D.对象之间的信息传递是通过消息进行的 (分数:1.00)A.B.C.D.12.下面对静态数据成员的描述中,正确的是U /U。 A. 静态数据成员可以在类体内进行初始化 B. 静态数据成员不可以通过类的对象调用 C. 静态数据成员不能受 private(私有)控制符的作用
6、D. 静态数据成员可以直接通过类名调用(分数:1.00)A.B.C.D.13.下列程序的运行结果为U /U。#includeiostream.htemplateclass TTclass FFTT a1,a2,a3;public:FF(TT b1,TT b2,TT b3)a1b1;a2b2;a3b3;TT Sum()return a1+a2+a3;void main()FFintx(int(1.1),2,3),y(int(4.2),5,6);coutx.Sum()y.Sum()endl; A.6.1 15.2 B.6 15 C.6 15.2 D.6.1 15(分数:2.00)A.B.C.D.1
7、4.用链表表示线性表的优点是U /U。 A. 便于随机存取 B. 花费的存储空间较顺序存储少 C. 便于插入和删除操作 D. 数据元素的物理顺序和逻辑顺序相同(分数:2.00)A.B.C.D.15.在 C+语言中,main 函数默认返回一个U /U类型的值。 A.int B.float C.char D.void(分数:1.00)A.B.C.D.16.下面程序错误的语句是#include“ iostreamh“ void main( ) int A=0; int int fun()static int i=0;int s=1;s+=i;i+;return s;int main()int i,a
8、=0;for(i=0;i5;i+)a+=fun();coutaend1;return 0;程序运行后,输出的结果是U /U。 A. 20 B. 24 C. 25 D. 15(分数:2.00)A.B.C.D.23.假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为 ( )。 A.MyClassunsigned long w=5;double x= 1.42,y=5.2;则以下符合 C+语言语法的表达式是U /U。 A.a+=a-=(b=4)*(a=3) B.a=a*3+2 C.x%(-3) D.y=float i(分数:2.00)A.B.C.D.26.在计算机中,算法是指 A. 加工
9、方法 B. 解题方案的准确而完整的描述 C. 排序方法 D. 查询方法(分数:1.00)A.B.C.D.27.下面不属于同一函数模板的是U /U。 A. templateclass t1 t1 max(t1 if() cout“ok“;else cout“fail“;后,如果文件打开成功,显示“ok”,否则显示“fail”。由此可知,上面 if语句的“”处的表达式是U /U。 A. outfile.fail()或 outfile B. outfile.good()或!outfile C. outfile.good()或 outfile D. outfile.fail()或!outfile(分数
10、:2.00)A.B.C.D.34.数据库、数据库系统和数据库管理系统之间的关系是U /U。 A.数据库包括数据库系统和数据库管理系统 B.数据库系统包括数据库和数据库管理系统 C.数据库管理系统包括数据库和数据库系统 D.3者没有明显的包含关系 (分数:1.00)A.B.C.D.35.在深度为 5的满二叉树中,叶子节点的个数为 A. 32 B. 31 C. 16 D. 15(分数:2.00)A.B.C.D.二、B填空题/B(总题数:15,分数:25.00)36.若要访问指针变量 p所指向的数据,应使用表达式 1。(分数:2.00)填空项 1:_37.目前,有两种重要的高级语言,分别是结构化程序
11、和 1。(分数:2.00)填空项 1:_38.数据结构分为逻辑结构与存储结构,线性链表属于U U /U/U。(分数:1.00)填空项 1:_39.有以下程序: #includeiostream using namespace std; class MyClass public: MyClass();MyClass(); static int s; void SetValue(int val); ); int MyClass:s0; MyClass:MyClass() -s+; Void MyClass:SetValue(int val) 3Val; int main() MyClass my3
12、,*p; pmy; for(int k0;k3;k+) p-SetValue(k+1); p+; coutMyClass:sendl; return 0; 运行后的输出结果是_。(分数:2.00)填空项 1:_40.C+程序第 1条语句是从U U /U /U函数开始执行的。(分数:2.00)填空项 1:_41.按“先进后出”原则组织数据的数据结构是U U /U /U。(分数:2.00)填空项 1:_42.算法的基本特征是可行性、确定性、 1 和拥有足够的情报。(分数:1.00)填空项 1:_43.有如下复数类的声明,请补充完整。 class complex double real; /实部 d
13、ouble imag; /虚部 public: complex(double x,double y) real=x; imag=y; complex operator +(complex c) /重载加法运算符“+“ return complex(U U /U /U); ;(分数:2.00)填空项 1:_44.己知类 sample是一个抽象类,其成员函数 display是无形参、无返回类型的纯虚函数,请完成其声明:class sample public: sample(); _ ;(分数:2.00)填空项 1:_45.运算符重载仍然保持其原来的优先级、_和_。(分数:1.00)填空项 1:_4
14、6.在面向对象方法中,类之间共享属性和操作的机制称为U U /U /U。(分数:1.00)填空项 1:_47.在内存中,存储字符X要占用 1个字节,存储字符串“X“要占用 1 个字节。(分数:1.00)填空项 1:_48.下面程序的输出结果为U U /U /U。 #include iostream using namespace std; void initialize(int printNo, int state=0); void initialize(iht printNo= 1,int state); int main() initialize(); return 0; void ini
15、tialize(int printNo, int state) coutprintNo“,“stateend1; (分数:2.00)填空项 1:_49.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为_的。(分数:2.00)填空项 1:_50.下面是用来计算 n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是) n!=n*(n-1)*.*2*1) unsigned fact(unsigned n) if (n =1) return 1; return_; (分数:2.00)填空项 1:_二级 C+-6-2答
16、案解析(总分:77.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:52.00)1.设置虚基类的目的是U /U。 A. 简化程序 B. 消除二义性 C. 提高运行效率 D. 减少目标代码行(分数:2.00)A.B. C.D.解析:解析 设置虚基类的目的是为了消除二义性。2.算法的空间复杂度是指U /U。 A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中所需要的存储空间(分数:1.00)A.B.C.D. 解析:解析 本题考查算法的空间复杂度,是重点之一。算法的空间复杂度一般是指这个算法执行时所需要的内存空间,其中包括算法程序所
17、占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。3.关于函数中的返回类型,下列表述中错误的是U /U。 A.返回类型中有可能包含关键字 int B.返回类型中有可能包含自定义标识符 C.返回类型中有可能包含字符* D.返回类型中可能包含口(分数:2.00)A.B. C.D.解析:解析 返回类型又称函数类型,表示一个函数所计算(或运行)的结果值类型,这里的类型可以是预定义类型(如 int)、复合类型(如 double*)、用户定义类型(如枚举类),若返回值只做更新(或设置)等操作,则该函数
18、返回类型为 void类型,函数类型和内置数组不能作为返回类型,但类类型和容器类型可以被直接返回。4.下列程序执行结果是#includeiostream.hclass A public:int a;A( ):a(10)toutaendl;void main( ) A obj1;A obj2(obj1);cout“ “obj2.aendl; A. 10 10 B. 编译错误缺少拷贝构造函数 C. 10 随机数 D. 随机数随机数(分数:2.00)A. B.C.D.解析:解析 本题考察拷贝构造函数的知识。如果类中没有实现拷贝构造函数,则编译器会为其自动生成一个。对于本题这种简单对象,默认生成的拷贝构
19、造函数可以完成数据成员的自动赋值,对于复杂对象,则可能需要显式定义拷贝构造函数。5.数据库设计中,用 E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的U /U。 A.需求分析阶段 B.逻辑设计阶段 C.概念设计阶段 D.物理没计阶段(分数:2.00)A.B.C. D.解析:解析 E-R 图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。6.数据库管理系统 DBMS 中用来定义模式、内模式和外模式的语言为 A.C B.Basic C.DDL D.DML (分数:1.00)A.B.C. D.解析:解析:选项 A)、选项 B)显然不合题意。数据定
20、义语言(Data DefinitionLanguage,简称 DDL)负责数据的模式定义与数据的物理存取构建;数据操纵语言(DataManipulation language,简称 DML)负责数据的操纵,包括查询及增、删、改等操作。7.以下哪个不是 C+语言中的有效标识符? A. 34a B. _AB C. A_B D. A25(分数:2.00)A. B.C.D.解析:解析 考查 C+语言标识符规则。 解题要点 在 C+语言中,标识符只能由数字、字母、下画线组成,并且第一个字符不能是数字。 错解分析 选项 A)是以数字开始的。 考点链接 关键字不能用做标识符。8.关于构造函数 A()的拷贝构
21、造函数正确的是 A.A(A *B) ; B.A(AB) ; C.A(A(分数:1.00)A.B.C. D.解析:解析 考查拷贝构造函数的方法。 解题要点 固定的一种拷贝方式就是类名: 类名const类名class Basepublic:Base()cout“BB“; f(); void f()cout“BF“;class Derived:public Basepublic:Derived()cout“DD“;void f()cout“Df“;int main()Derived d;return 0;执行上面的程序将输出_。 A.BBBfDD B.BBDfDDDf C.DD D.DDBBBf(分
22、数:1.00)A. B.C.D.解析:解析 本题考查类的继承和派生。派生类执行构造函故的一般次序为:首先调用基类构造函数;然后调用成员对象的构造函数;最后是派生类构造函数中的内容。题目中定义派生类对象 d时,先调用基类 Base的构造函数,输出 BBBf,然后调用派生类 Derived的构造函数,输出 DD。10.有如下函数模板定义:templatetypename T1,typename T2T1 FUN(T2 n)return n*5,0;若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为_。 A.FUN(9) B.FUN9 C.FUNdou
23、ble(9) D.FUN9(double)(分数:1.00)A.B.C. D.解析:解析 函数返回类型是 double型,则 T1为 double型,T2 为 int型才符合函数模板的定义。11.下面关于对象概念的描述中,U /U是错误的。 A.对象就是 C语言中的结构体变量 B.对象代表着正在创建的系统中的一个实体 C.对象是一个状态和操作(或方法)的封装体 D.对象之间的信息传递是通过消息进行的 (分数:1.00)A. B.C.D.解析:12.下面对静态数据成员的描述中,正确的是U /U。 A. 静态数据成员可以在类体内进行初始化 B. 静态数据成员不可以通过类的对象调用 C. 静态数据成
24、员不能受 private(私有)控制符的作用 D. 静态数据成员可以直接通过类名调用(分数:1.00)A.B.C.D. 解析:解析 对于选项 A,C+规定对静态数据成员的初始化应该在类体外进行初始化。所以选项 A是错误的。 对于 B选项,C+规定静态数据成员可由任意访问权限许可的函数或对象访问,所以选项 B是错误的。 对于选项 C,在 C+中,静态数据成员也可以定义为私有的静态数据成员,所以选项 C的描述是错误的。 对于选项 D,在 C+中,静态数据成员是类的所有对象共享的成员,即可以通过类名访问,也可以通过对象访问。但通过类名访问更方便、更高效。所以选项 D的描述是正确的。13.下列程序的运
25、行结果为U /U。#includeiostream.htemplateclass TTclass FFTT a1,a2,a3;public:FF(TT b1,TT b2,TT b3)a1b1;a2b2;a3b3;TT Sum()return a1+a2+a3;void main()FFintx(int(1.1),2,3),y(int(4.2),5,6);coutx.Sum()y.Sum()endl; A.6.1 15.2 B.6 15 C.6 15.2 D.6.1 15(分数:2.00)A.B. C.D.解析:解析 本题考查模板函数的应用,表达式 int(1.1)和 int(4.2)是将 1.
26、1和 4.2强制转换为整型。14.用链表表示线性表的优点是U /U。 A. 便于随机存取 B. 花费的存储空间较顺序存储少 C. 便于插入和删除操作 D. 数据元素的物理顺序和逻辑顺序相同(分数:2.00)A.B.C. D.解析:解析 在链表中因为除了存放数据元素之外,还要存放指针,所以链表花费的存储空间比顺序表还要多。在插入和删除数据元素时,只需要移动相应的记录指针即可。在链表中,数据的物理结构与逻辑结构不一定相同,因为是靠指针来实现对数据的指定,所以不能进行随机存取。15.在 C+语言中,main 函数默认返回一个U /U类型的值。 A.int B.float C.char D.void(
27、分数:1.00)A. B.C.D.解析:16.下面程序错误的语句是#include“ iostreamh“ void main( ) int A=0; int int fun()static int i=0;int s=1;s+=i;i+;return s;int main()int i,a=0;for(i=0;i5;i+)a+=fun();coutaend1;return 0;程序运行后,输出的结果是U /U。 A. 20 B. 24 C. 25 D. 15(分数:2.00)A.B.C.D. 解析:解析 由主函数入手,在 for循环中调用 fun函数,其中调用次数为 5次。fun 中 i为静
28、态变量,有效到文件结束。第一次调用 fun后为 s=1,a=1;第二次调用后 s=2,a=3;第三次 s=3,a=6;第四次 s=4,a=10;第五次 s=5,a=15。23.假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为 ( )。 A.MyClassunsigned long w=5;double x= 1.42,y=5.2;则以下符合 C+语言语法的表达式是U /U。 A.a+=a-=(b=4)*(a=3) B.a=a*3+2 C.x%(-3) D.y=float i(分数:2.00)A. B.C.D.解析:26.在计算机中,算法是指 A. 加工方法 B. 解题方案的准确而
29、完整的描述 C. 排序方法 D. 查询方法(分数:1.00)A.B. C.D.解析:解析 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。27.下面不属于同一函数模板的是U /U。 A. templateclass t1 t1 max(t1 if() cout“ok“;else cout“fail“;后,如果文件打开成功,显示“ok”,否则显示“fail”。由此可知,上面 if语句的“”处的表达式是U /U。 A. outfile.fail()或 outfile B. outfile.good()或!outfile C. outfile.
30、good()或 outfile D. outfile.fail()或!outfile(分数:2.00)A.B.C. D.解析:34.数据库、数据库系统和数据库管理系统之间的关系是U /U。 A.数据库包括数据库系统和数据库管理系统 B.数据库系统包括数据库和数据库管理系统 C.数据库管理系统包括数据库和数据库系统 D.3者没有明显的包含关系 (分数:1.00)A.B. C.D.解析:35.在深度为 5的满二叉树中,叶子节点的个数为 A. 32 B. 31 C. 16 D. 15(分数:2.00)A.B. C.D.解析:解析 所谓满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有节点都有
31、两个叶子节点。这就是说,在满二叉树中,层上的节点数都达到最大值,即在满二叉树的第 k层上有 2k1 个节点,且深度为 m的满二叉树有 2m1 个节点。二、B填空题/B(总题数:15,分数:25.00)36.若要访问指针变量 p所指向的数据,应使用表达式 1。(分数:2.00)填空项 1:_ (正确答案:*p)解析:解析 此题考查的是指针。指针使用两种特殊的运算符:*和MyClass(); static int s; void SetValue(int val); ); int MyClass:s0; MyClass:MyClass() -s+; Void MyClass:SetValue(in
32、t val) 3Val; int main() MyClass my3,*p; pmy; for(int k0;k3;k+) p-SetValue(k+1); p+; coutMyClass:sendl; return 0; 运行后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:3。)解析:解析 本题程序中把变量 s定义为静态数据成员,它的作用域是类范围。在类 MyClass的构造函数中,每创建一个对象,s 就增 1,由此可知 s用来记录建立对象的个数。由于创建对象指针 p时并不会调用构造函数,所以 s最后的值是 3。40.C+程序第 1条语句是从U U /U /U函数开始执行的
33、。(分数:2.00)填空项 1:_ (正确答案:main)解析:解析 在 C+中,程序总是从 main()函数的第 1条语句开始执行,到 main()函数的最后一条语句结束。41.按“先进后出”原则组织数据的数据结构是U U /U /U。(分数:2.00)填空项 1:_ (正确答案:栈)解析:解析 栈是按照“先进后出”的原则组织的数据结构。42.算法的基本特征是可行性、确定性、 1 和拥有足够的情报。(分数:1.00)填空项 1:_ (正确答案:有穷性)解析:43.有如下复数类的声明,请补充完整。 class complex double real; /实部 double imag; /虚部
34、public: complex(double x,double y) real=x; imag=y; complex operator +(complex c) /重载加法运算符“+“ return complex(U U /U /U); ;(分数:2.00)填空项 1:_ (正确答案:real+c.real,imag+c.imag 或 this-real+c.real,this-imag+c.imag,注意:运算符+的数据可交换次序)解析:解析 本题考查的知识点是:运算符重载。根据题目的要求,要实现类 complex的重载加法运算符“+”。复数的加法是将其实部与虚部分别相加,因此空处应填入
35、real+c.real,imag+c.imag,这样就构造出一个临时的 complex对象,并且它的实部和虚部分别为自身和形参 c的实部与虚部之和,然后通过return语句返回这个结果。44.己知类 sample是一个抽象类,其成员函数 display是无形参、无返回类型的纯虚函数,请完成其声明:class sample public: sample(); _ ;(分数:2.00)填空项 1:_ (正确答案:virtual viod display()=0;)解析:解析 此题考查的是纯虚函数。纯虚函数定义格式是在虚函数的后面加上“=0”。与虚函数不同的是,纯虚函数允许没有函数体,故本题应填入的
36、内容是 virtual viod display()=0;。45.运算符重载仍然保持其原来的优先级、_和_。(分数:1.00)填空项 1:_ (正确答案:结合性 语法结构)解析:46.在面向对象方法中,类之间共享属性和操作的机制称为U U /U /U。(分数:1.00)填空项 1:_ (正确答案:分类性)解析:解析 在面向对象方法中,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质。而一个具体的对象则是其对应类的一个实例。由此可知,类是关于对象性质的描述,它包括一组数据属性和在数据上的一组合法操作。类之间这种共享属性和操作的机制称为分类性。4
37、7.在内存中,存储字符X要占用 1个字节,存储字符串“X“要占用 1 个字节。(分数:1.00)填空项 1:_ (正确答案:2)解析:解析 C+存储字符串与字符的不同。 解题要点 计算机存储一个字符用 1个字节,存储字符串时,每个字符占用 1个字节,另在字符串的有效字符之后存储 1个字符串的结束标记符/0。 考点链接 如用户不指定加入结束标记符/0,则系统会自动加入结束标记符,/0。48.下面程序的输出结果为U U /U /U。 #include iostream using namespace std; void initialize(int printNo, int state=0); v
38、oid initialize(iht printNo= 1,int state); int main() initialize(); return 0; void initialize(int printNo, int state) coutprintNo“,“stateend1; (分数:2.00)填空项 1:_ (正确答案:1, 0)解析:49.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为_的。(分数:2.00)填空项 1:_ (正确答案:public)解析:解析 考查 C+中运算符重载的固定格式和要求。 解题要
39、点 C+中不论用成员函数还是友元函数重载运算符都必须用关键字 operator,都必须将函数声明为公有的。 考点链接 operator 是关键字。50.下面是用来计算 n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是) n!=n*(n-1)*.*2*1) unsigned fact(unsigned n) if (n =1) return 1; return_; (分数:2.00)填空项 1:_ (正确答案:n*fact(n-1))解析:解析 本题考核递归函数。一般递归函数由递归出口和递归体两部分组成。递归出口给出了递归终止的条件;递归体给出了递归的方式。题中程序给出 7递归出口,但是没有给出递归体,由阶乘的定义可知其递归体应该为 n*fact(n-1)。