1、全国计算机等级考试二级 C+真题 2011年 3月及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于栈叙正确的是( )。(分数:2.00)A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对2.下列叙述中正确的是( )。(分数:2.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构C.循环链表是非线性结构D.双向链表是非线性结构3.某二叉树共有 7个结点,其中叶子结点只有 1个,则该二叉树的深度为(假设根结点在第 1层)( )。(分数:2.0
2、0)A.3B.4C.6D.74.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书5.结构化程序所要求的基本结构不包括( )。(分数:2.00)A.顺序结构B.GOTO跳转C.选择(分支)结构D.重复(循环)结构6.下面描述中错误的是( )。(分数:2.00)A.系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD图是软件详细设计的表示工具7.负责数据库中查询操作的数据库语言是( )。(分数:2.00)A.数据定义语言B
3、.数据管理语言C.数据操纵语言D.数据控制语言8.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是( )。(分数:2.00)A.1:1联系B.1:m联系C.m:1联系D.m:n联系9.有二个关系 R、S 和 T如下( )。(分数:2.00)A.B.C.D.10.定义无符号整数类为 UInt,下面可以作为类 UInt实例化值的是( )。(分数:2.00)A.-369B.369C.0.369D.整数集合 1,2,3,4,511.为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。(分数:2.00)A.内联函数B.重载函数C.递归函数D.函数模板12.若 AA
4、为一个类,a 为该类的非静态数据成员,在该类的一个成员函数定义中访问 a时,其书写格式为( )。(分数:2.00)A.aB.AA.aC.aD.AA:a13.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。(分数:2.00)A.任何B.公有或保护C.保护或私有D.私有14.若要对 Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(分数:2.00)A.Data+(DatA) ;B.Data operator+Data;C.Data+operatorData;D.o15.下列关于函数模板的描述中,正确的是( )。(
5、分数:2.00)A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数16.C+系统预定了 4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。(分数:2.00)A.coutB.cinC.cerrD.cset17.Windows环境下,由 C+源程序文件编译而成的目标文件的扩展名是( )。(分数:2.00)A.cppB.exeC.objD.lik18.字符串“a+b=12/n/t”的长度为( )。(分数:2.00)A.12B.10C.8D.619.有如下程序:#includei
6、ostreamusing namespace std;int main()int f, f1=0, f2=1;for(int i=3; i=6; i+) f=f1+f2;f1=f2; f2=f;coutfend1;return 0;运行时的输出结果是( )。(分数:2.00)A.2B.3C.5D.820.有如下程序:#includeiostreamusing namespace std;int main() int a6=23, 15, 64, 33, 40, 58;int s1, s2;s1, s2=a0;for(int*p=a+1; pa+6; p+) if(s1*p)s1=*p;if(s
7、2*p)s2=*p;couts1+s2end1;return 0;运行时的输出结果是( )。(分数:2.00)A.23B.58C.64D.7921.有如下程序:#includeiostreamusing namespace std;void f1(int x=y; y=z;)void f2(int x, int y)int z=x; x=y; y=z;intmain()int x=10, y=26;f1(x, y);f2(x, y);coutyend1;return 0;运行时的输出结果是( )。(分数:2.00)A.10B.16C.26D.3622.有如下程序:#includeiostrea
8、musing namespace std;class XAint a;public:static int b;XA(int a(分数:2.00)A.: a(aA) b+;XA()int get()return a;int XA:b=0;int main()XA d1(2), d2(3);coutd1. get()+d2. get()+XA:bend1;return 0;运行时的输出结果是( )。A) 5B.6C.7D.823.有如下程序:#includeiostreamusing namespace std;class Pointint x, y;public:Point(int x1=0,
9、int y1=0):x(x1), y(y1)int get()return x+y;);class CirclePoint center;int radius;public:Circle(int CX, int cy, int r):center(cx, cy), radius(r)int get()return center. get()+radius;;int main()circle c(3, 4, 5);coutc. get()end1;return ():运行时的输出结果是( )。(分数:2.00)A.5B.7C.9D.1224.若要对类 BigNumber中重载的类型转换运算符 l
10、ong进行声明,下列选项中正确的是( )。(分数:2.00)A.operator long()const;B.operator long(bigNumber);C.long operator long() const;D.long operator long(BigNumber);25.有如下函数模板定义:templatetypename T1, Typename T2T1 Fun(T2 n)return n*5.0;若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为( )。(分数:2.00)A.FUN(9)B.FUN9C.FUNdouble9D
11、.FUN9(doubl26.下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。(分数:2.00)A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345;27.下列关于析构函数的描述中,错误的是( )。(分数:2.00)A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数28.下列关于构造函数的描述中,错误的是( )。(分数:2.00)A.构造函数名与类名相同B.构造函数可以有返回值C.构造函数可以重载D.每个
12、类都有构造函数29.若 PAT是一个类,则程序运行时,语句“PAT*aD) 3;”调用 PAT的构造函数的次数是( )。(分数:2.00)A.0B.1C.2D.330.下列描述中,错误的是( )。(分数:2.00)A.公有继承时基类中的公有成员在派生类中仍是公有成员B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时基类中的公有成员在派生类中仍是公有成员D.保护继承时基类中的保护成员在派生类中仍是保护成员31.生成派生类对象时,派生类构造函数调用基类构造函数的条件是( )。(分数:2.00)A.无需任何条件B.基类中显示定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函
13、数明确调用了基类构造函数32.下列关于派生类和基类的描述中,正确的是( )。(分数:2.00)A.派生类成员函数只能访问基类的公有成员B.派生类成员函数只能访问基类的公有和保护成员C.派生类成员函数可以访问基类的所有成员D.派生类对基类的默认继承方式是公有继承33.有如下类模板定义:templatetypename Tclass BigNumberlong n;public:BigNumber(T i):n(i)BigNumber operator+(BigNumber B) return BigNumber(n+b.n);已知 b1、b2 是 BigNumber的两个对象,则下列表达式中错误
14、的是( )。(分数:2.00)A.b1+b2B.b1+3C.3+b1D.3+334.下列关于文件流的描述中,正确的是( )。(分数:2.00)A.文件流只能完成针对磁盘文件的输入和输出B.建立一个文件流对象时,必须同时打开一个文件C.若输入流要打开的文件不存在,将建立一个新文件D.若输出流要打开的文件不存在,将建立一个新文件35.有如下程序:#includeiostreamusing namespace std;class Pairint m, n;public:Pair(int j, int k):m(j), n(k)int get()return m;int get()constretur
15、n m+n;);int main() Pair a(3, 5);const Pair b(3, 5);couta. get()b. get();return 0;运行时的输出结果是( )。(分数:2.00)A.33B.38C.83D.88二、填空题(总题数:15,分数:30.00)36.有序线性表能进行二分查找的前提是该线性表必须是 1 存储的。(分数:2.00)填空项 1:_37.一棵二叉树的中序遍历结果为 DBEAFC,前序遍历结果为 ABDECF,则后序遍历结果为 1。(分数:2.00)填空项 1:_38.对软件设计的最小单位(模块或程序单元)进行的测试通常称为 1 测试。(分数:2.0
16、0)填空项 1:_39.实体完整性约束要求关系数据库中元组的 1 属性值不能为空。(分数:2.00)填空项 1:_40.在关系 A(S,SN,D) 和关系 B(D,CN,NM)中,A 的主关键字是 S,B 的主关键字是 D,则称 1 是关系A的外码。(分数:2.00)填空项 1:_41.若有定义语句“int x=10, y=20 z=20;”,则表达式 xzwhile(+x)运行时 while循环体的执行次数为_。(分数:2.00)填空项 1:_43.有如下语句序列int arr22=9, 8), 7, 6;int*p=arr0+1; cout*pend1;运行时的输出结果是_。(分数:2.0
17、0)填空项 1:_44.函数 fun的功能是将一个数字字符串转换为一个整数,请将函数补充完整。int fun(char*str)int hum=0;while(*str)num*=10;num+=_str+;return num;(分数:2.00)填空项 1:_45.若要将函数“void FriFun;”声明为类 MyClass的友元函数,则应在类 MyClass的定义中加入语句 1。(分数:2.00)填空项 1:_46.下列程序的输出结果为 012,请根据注释将横线处的缺失部分补充完整。#includeiostreamusing namespace std;class Testpublic:
18、Test(int A) data=a;Test()void print()coutdata;)private:int data;int main()Test t3=_;/对有 3个元素的 Test类对象数组 t初始化for(int i=0; i3; i+) ti. print();return 0;(分数:2.00)_47.请在横线处填写派生类 Derived的继承方式,使得程序的输出结果为 Base。#includeiostreamusing namespace std;class Basepublic:void print()cout“Base“;);class Derived:_Base
19、;int main()Derived d;d.print();return 0;(分数:2.00)_48.下列程序的输出结果为 1 2.3 2 4.6,请将横线处的缺失部分补充完整。#includeiostreamusing namespace std;class Basepublic:Base(int A) :idata(A) void print()coutidata ;private:int idata;class Derived: public Basepublic:Derived(int a, double B) :_, ddata(B) void priat()Base:print
20、(); coutddata ;private:double ddata;int main()Derived d1(1, 2.3), d2(2, 4.6);d1. print();d2. print();return 0;(分数:2.00)填空项 1:_49.下列程序的输出结果为-5/8-3/4,请将横线处的缺失部分补充完整。#includeiostreamusing namespace std;class Fraction/“分数“类public:Fraction(double a, double B) : num(A) , den(B) Fraction()Fraction operator
21、 -()_;f. num=-f. num;return f;void print()coutnum/den private:double num;double den; /分母;int main()Fraction f1(5,8), f2(3, 4);(-f1) print(); (-f2). print();return 0:(分数:2.00)填空项 1:_50.函数 Min的功能是返回具有 n个元素的数组 array中的最小值。请将横线处的缺失部分补充完整,使得程序的输出结果为 1.24。#includeiostreamusing namespace std;templatetypenam
22、e TT Min(T*array, int n)T min=array0;for(int i=1; in; i+)if(arrayimin)min=arrayi;return min;int main()double art8=5.2, 48.45, 41.01, 42, 51.2, 1.24, 14.12, 42;cout_;return 0:(分数:2.00)填空项 1:_全国计算机等级考试二级 C+真题 2011年 3月答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于栈叙正确的是( )。(分数:2.00)A.栈顶元素最先能被删除
23、 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对解析:解析 栈是先进后出的线性表,栈顶的元素最先被删除,栈底的元素最后被删除。2.下列叙述中正确的是( )。(分数:2.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构 C.循环链表是非线性结构D.双向链表是非线性结构解析:解析 在数据结构中,树这类的数据结构只有一个根结点,但它不是线性结构。3.某二叉树共有 7个结点,其中叶子结点只有 1个,则该二叉树的深度为(假设根结点在第 1层)( )。(分数:2.00)A.3B.4C.6D.7 解析:解析 根据二叉树的性质,度为
24、 0的结点(即叶子结点)总是比度为 2的结点多一个。题目中的二叉树的叶子结点为 1,因此度为 2的结点的数目为 0,因而这个二叉树的深度为 7。4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 在软件开发过程中,需求分析阶段产生的要文档是软件需求规格说明书。5.结构化程序所要求的基本结构不包括( )。(分数:2.00)A.顺序结构B.GOTO跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 结构化程序的基本结构有:顺序结构、选择结构和循环结构,没有 GOTO跳转结构。6.下面
25、描述中错误的是( )。(分数:2.00)A.系统总体结构图支持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD图是软件详细设计的表示工具解析:解析 软件设计是将软件需求转换为软件表示的过程;数据结构与数据库设计是软件设计的任务之一;PAD 图,即问题分析图,是一种主要用于描述软件详细设计的图形工具。7.负责数据库中查询操作的数据库语言是( )。(分数:2.00)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析 负责数据库中查询操作的数据库语言是数据操纵语言。8.一个教师可讲授多门课程,一门课程可由
26、多个教师讲授。则实体教师和课程间的联系是( )。(分数:2.00)A.1:1联系B.1:m联系C.m:1联系D.m:n联系 解析:解析 一个教师可讲授多门课程,一门课程可由多个教师讲授,则实体教师和课程的联系是多对多的联系。9.有二个关系 R、S 和 T如下( )。(分数:2.00)A.B.C. D.解析:解析 从关系 R、S 和 T的结构可以得出关系 T是由关系 R、S 经过除运算后得到的。10.定义无符号整数类为 UInt,下面可以作为类 UInt实例化值的是( )。(分数:2.00)A.-369B.369 C.0.369D.整数集合 1,2,3,4,5解析:解析 UInt 表示的是无符号
27、整数类,所以它的每小实例都是一个无符号整数,所以排除选项 A)和选项 C),选项 D)是整数集合,所以也排除。11.为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。(分数:2.00)A.内联函数 B.重载函数C.递归函数D.函数模板解析:解析 C+引入内联函数的原因是用它来取代 C中的预处理宏函数。两者的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的。内联函数在调用时像宏函数样展开,所以它没有一般函数的参数压栈和退栈操作,减少了调用开销,因此,内联函数比普通函数有更高的执行效率。12.若 AA为一个类,a 为该类的非静态数据成员,在该类的一个成员函数定
28、义中访问 a时,其书写格式为( )。(分数:2.00)A.a B.AA.aC.aD.AA:a解析:解析 类 AA的成员函数直接引用类 AA的非静态数据成员。13.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。(分数:2.00)A.任何B.公有或保护 C.保护或私有D.私有解析:解析 基类的公有成员和保护成员只有在以保护继承方式继承时,其在继承类中是保护成员。14.若要对 Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(分数:2.00)A.Data+(DatA) ;B.Data operator+Data;
29、 C.Data+operatorData;D.o解析:解析 “+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字 operator构成的。15.下列关于函数模板的描述中,正确的是( )。(分数:2.00)A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数 解析:解析 函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函
30、数模板是一种参数化类型的函数。16.C+系统预定了 4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。(分数:2.00)A.coutB.cinC.cerrD.cset 解析:解析 C+流有 4个预定义的流对象,它们分别是:cin 标准输入;cout 标准输出;cerr 标准出错信息输出;clog 带缓冲的标准出错信息输出。17.Windows环境下,由 C+源程序文件编译而成的目标文件的扩展名是( )。(分数:2.00)A.cppB.exeC.obj D.lik解析:解析 在 VC6.0集成开发环境下,用户可以使用编译(compile)命令将一个.cpp 为扩展名的 C+源程序文件
31、转换成一个以.obj 为扩展名的目标文件。18.字符串“a+b=12/n/t”的长度为( )。(分数:2.00)A.12B.10C.8 D.6解析:解析 题目给出的字符串古有 7个字符,再加字符串的结束字符,所以共 8个字符。19.有如下程序:#includeiostreamusing namespace std;int main()int f, f1=0, f2=1;for(int i=3; i=6; i+) f=f1+f2;f1=f2; f2=f;coutfend1;return 0;运行时的输出结果是( )。(分数:2.00)A.2B.3C.5 D.8解析:解析 在主函数中 for循环语
32、句执行 4次,第一次循环结束时,变量 f的值等于 1,f1 的值等于1,f2 的值等于 1;第二次循环结束时,变量 f的值等于 2,f1 的值等于 1,f2 的值等于 2;第三次循环结束时,变量 f的值等于 3,f1 的值等于 2,f2 的值等于 3;第四次循环结束时,变量 f的值等于 5,f1的值等于 3,f2 的值等于 5;结束循环。20.有如下程序:#includeiostreamusing namespace std;int main() int a6=23, 15, 64, 33, 40, 58;int s1, s2;s1, s2=a0;for(int*p=a+1; pa+6; p+
33、) if(s1*p)s1=*p;if(s2*p)s2=*p;couts1+s2end1;return 0;运行时的输出结果是( )。(分数:2.00)A.23B.58C.64D.79 解析:解析 变量 s1和 s2的初值都等于 23,那么在执行第一次 for循环时,*p 的值等于 15,它小于23,所以把 15赋给变量 s1;执行第二次 for循环时,*p 的值等于 64,它大于 23,所以把 64赋给变量s2;而数组 a中 a2后面的元素的值都大于 15,小于 64,因而变量 s1,s2 的值不会再发生变化,最终值为 15+6=79,所以程序输出 79。21.有如下程序:#includeio
34、streamusing namespace std;void f1(int x=y; y=z;)void f2(int x, int y)int z=x; x=y; y=z;intmain()int x=10, y=26;f1(x, y);f2(x, y);coutyend1;return 0;运行时的输出结果是( )。(分数:2.00)A.10 B.16C.26D.36解析:解析 子函数 f1中的形参是引用变量,所以执行子函数实现了变量 x,y 值的交换,变量 x的值等于 26,而变量 y的值等于 10。而子函数 f2中的形参是普通变量,因为 C+的函数之间的参数传递是传值,所以执行函数 f
35、2不能实现变最 x,y 值的交换。22.有如下程序:#includeiostreamusing namespace std;class XAint a;public:static int b;XA(int a(分数:2.00)A.: a(aA) b+;XA()int get()return a;int XA:b=0;int main()XA d1(2), d2(3);coutd1. get()+d2. get()+XA:bend1;return 0;运行时的输出结果是( )。A) 5B.6C.7 D.8解析:解析 执行 XA类的实例变量 d1(2)时,成员函数 d1.get()的返回值等于 2
36、,XA.b 的值等于 1,执行 XA类的实例变量 d2(3)时,成员函数 d1.get()的返同值等于 3,XA.b 的值等于 2,所以输出结果为2+3+2=7。23.有如下程序:#includeiostreamusing namespace std;class Pointint x, y;public:Point(int x1=0, int y1=0):x(x1), y(y1)int get()return x+y;);class CirclePoint center;int radius;public:Circle(int CX, int cy, int r):center(cx, cy)
37、, radius(r)int get()return center. get()+radius;;int main()circle c(3, 4, 5);coutc. get()end1;return ():运行时的输出结果是( )。(分数:2.00)A.5B.7C.9D.12 解析:解析 根据类 Point和类 Circle的定义可知,类 Circle的实例 c(3, 4, 5)的成员函数 c.get()返回值为 3+4+5=12。24.若要对类 BigNumber中重载的类型转换运算符 long进行声明,下列选项中正确的是( )。(分数:2.00)A.operator long()cons
38、t; B.operator long(bigNumber);C.long operator long() const;D.long operator long(BigNumber);解析:解析 在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。25.有如下函数模板定义:templatetypename T1, Typename T2T1 Fun(T2 n)return n*5.0;若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为( )。(分数:2.00)A.FUN(9)B.FUN9C.FUNdouble9 D.
39、FUN9(doubl解析:解析 根据函数模板的定义,在选项 C的调用中,把 double类型传递给 T1,int 型传递给 T2。26.下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。(分数:2.00)A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345; 解析:解析 选项 A),B),C)都没有指输出数据的宽度,所以在输出时,按实际字符的宽度输出,而选项 D)指定输出字符的宽度为 6,而实际输出的宽度等于 5,所以最后一个字符用空格补齐。27.下列关于
40、析构函数的描述中,错误的是( )。(分数:2.00)A.析构函数可以重载 B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数解析:解析 一般情况下,析构函数在对象的生存周期即将结束的时候由系统自动调用。在调用完成之后,对象也就消失了,相应的内存空间也被释放。析构函数没有参数,因此析构函数不能重载,一个类中只能定义一个析构函数。28.下列关于构造函数的描述中,错误的是( )。(分数:2.00)A.构造函数名与类名相同B.构造函数可以有返回值 C.构造函数可以重载D.每个类都有构造函数解析:解析 构造函数具有下面 4个特殊的性质:构造函数的名字必须与类名相同;构造函
41、数不指定返回类型,它隐含有返回值,由系统内部使用;构造函数可以有一个或多个参数,因此构造函数可以重载;在创建对象时,系统会自动调用构造函数。29.若 PAT是一个类,则程序运行时,语句“PAT*aD) 3;”调用 PAT的构造函数的次数是( )。(分数:2.00)A.0 B.1C.2D.3解析:解析 语句“PAT(*aD) 3”定义了含有 3个元素的指向类 PAT类型的指针数组 ad。30.下列描述中,错误的是( )。(分数:2.00)A.公有继承时基类中的公有成员在派生类中仍是公有成员B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时基类中的公有成员在派生类中仍是公有成员 D
42、.保护继承时基类中的保护成员在派生类中仍是保护成员解析:解析 保护继承时基类中的公有成员在派生类中是保护成员。31.生成派生类对象时,派生类构造函数调用基类构造函数的条件是( )。(分数:2.00)A.无需任何条件 B.基类中显示定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数解析:解析 因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构造函数。32.下列关于派生类和基类的描述中,正确的是( )。(分数:2.00)A.派生类成员函数只能访问基类的公有成员B.派生类成员函数只能访问基类的公有和保护成员 C.
43、派生类成员函数可以访问基类的所有成员D.派生类对基类的默认继承方式是公有继承解析:解析 派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。33.有如下类模板定义:templatetypename Tclass BigNumberlong n;public:BigNumber(T i):n(i)BigNumber operator+(BigNumber B) return BigNumber(n+b.n);已知 b1、b2 是 BigNumber的两个对象,则下列表达式中错误的是( )。(分数:2.00)A.b1+b2B.b1+3C.3+b1 D.3+3解析:解
44、析 C+运算符的重载有两个方式,一种是做为成员函数,另种是做为友无函数。前种 C+默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperator operaior+(Coperator ,在调用的过程中我们可以理解为 result=operator+(op);友元方式为 friend COperator operator-(COperator ,在调用的过程中我们可以理解为 result=operator-(op1, op2);。对于本题来说,整数 3与 b1相加时,3 是 int型,b1 是 BigNumberT型,int 型不能和别的型
45、做运算。34.下列关于文件流的描述中,正确的是( )。(分数:2.00)A.文件流只能完成针对磁盘文件的输入和输出B.建立一个文件流对象时,必须同时打开一个文件C.若输入流要打开的文件不存在,将建立一个新文件D.若输出流要打开的文件不存在,将建立一个新文件 解析:解析 对于输入文件流类 ifstream,默认的打开模式是 ios_base:in,以这种方式打开文件而文件又不存在时,通过 fail()可测试扣开失败(返回值为 true),对于输出文件流类 ofstream,默认的打开模式是 ios_base:out,当以这种方式打开文件而文件又不存在时,将自动建立新文件。35.有如下程序:#in
46、cludeiostreamusing namespace std;class Pairint m, n;public:Pair(int j, int k):m(j), n(k)int get()return m;int get()constreturn m+n;);int main() Pair a(3, 5);const Pair b(3, 5);couta. get()b. get();return 0;运行时的输出结果是( )。(分数:2.00)A.33B.38 C.83D.88解析:解析 在主函数中定义了类 Pair的一个实例变量 a,并分别对实例变量 a的数据成员 m,n 赋初值 3
47、,5。所以调用 a.get()成员函数时,输出 3。又定义类 Pair的一个常实例变量 b,并分别对实例变量b的数据成员 m,n 赋初值 3,5。所以调用成员函数 b.get()时,输出 8。二、填空题(总题数:15,分数:30.00)36.有序线性表能进行二分查找的前提是该线性表必须是 1 存储的。(分数:2.00)填空项 1:_ (正确答案:顺序)解析:解析 二分法查找则适用于顺序存储的有序表。这里的有序是指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)。37.一棵二叉树的中序遍历结果为 DBEAFC,前序遍历结果为 ABDECF,则后序遍历结果为 1。(分数:2.00)填空项 1:_ (正确答案:DEBFCA)解析:解析 根据二叉树的中序遍历原则可知 D为二叉树的最左边的叶子结点,根据二叉树的前序遍历原则