1、二级 C+分类模拟 255 及答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.派生类的成员函数不能访问基类的_。(分数:2.50)A.共有成员和保护成员B.共有成员C.私有成员D.保护成员2.下列叙述中正确的是_。(分数:1.00)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对3.以下关键字不能用来声明类的访问权限的是_。(分数:1.00)A.publicB.staticC.protectedD.private4.有如下程序: # includeiostream usi
2、ng namcspace 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(s2*p)s2=*p; couts1+s2endl; return 0; 运行时的输出结果是_。(分数:2.50)A.23B.58C.64D.795.Sample 是一个类,执行下面语句后,调用 Sample 类的构造函数的次数是_。 Sample a2,*p=new Sample;(分数:2.50)A.0B.1C.2D.36.若已定义: int a 0,1,2
3、,3,4,5,6,7,8,9, * pa, i ; 其中 0i9,则对 a 数组元素不正确的引用是(分数:2.00)A.apaB.* ( class Base public: Base(int x=0)coutx; ; class Derived:public Base public: Derived(int x=0)coutx; private: Base val; ; int main() Derived d(1); return 0; 程序执行后的输出结果是_。(分数:1.00)A.100B.000C.010D.0019.下列函数参数默认值定义错误的是 _ 。(分数:2.00)A.Fun
4、(int x,int y=0)B.Fun(int x=100)C.Fun(int x=0,int y)D.Fun(int x=f()(假定函数 f()已经定义)10.设树 T 的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T 中的叶子结点数为(分数:1.00)A.5B.6C.7D.811.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是 _ 。(分数:1.00)A.p+qB.p-qC.p*qD.p%q12.有以下程序: #includeiostream using namespace std; Class sampl
5、e private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”nendl; ; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输出的结果是 _ 。(分数:2.00)A.n10B.n5C.n20D.n=1513.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是_。(分数:
6、2.00)A.setprecisionB.setwC.setfillD.showpoint14.有如下类定义: class Base int m; int n; public: Base(int m1,int n1):n(n1),m(m1) ; class Derived:public Base int q; public: Derived(int m1,int n1,int q1):q(q1),Base(m1,n1); ; 在创建一个 Derived 对象时,数据成员 m、n 和 q 被初始化的顺序是_。(分数:2.50)A.m、n、qB.n、m、qC.q、m、nD.q、n、m15.下列有关
7、函数重载的叙述中,错误的是_。(分数:1.00)A.函数重载就是用相同的函数名定义多个函数B.重载函数的参数列表必须不同C.重载函数的返回值类型必须不同D.重载函数的参数可以带有默认值16.下面有关类模板的说法中不正确的是 _ 。(分数:2.00)A.类模板的成员函数都是模板函数B.类模板本身在编译中不会生成任何代码C.类模板只是虚拟类型的参数D.用类模板定义一个对象时,不能省略实际参数17.语句 ofstream f(“DATA.DAT“,ios_base:app |ios_base:binary);的功能是建立流对象 f,并试图打开文件 DATA.DAT 并与之连接,而且_。(分数:2.5
8、0)A.若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件B.若文件存在,将其截为空文件;若文件不存在,打开失败C.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件18.有如下程序: #includeiomanip #includeiostream using namespace std; int main() coutsetfill(“*“)setw(6)123456; return 0; 运行时的输出结果是_。(分数:2.50)A.*123*456B.*123456*C.*123456D.12345619.
9、下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double B.double f1(double x)return x-1.5;C.void f3(double x)-x;D.double f4(double *x)-*x; return*x;20.下面属于黑盒测试方法的是_。(分数:2.50)A.基本路径测试B.等价类划分C.判定覆盖测试D.语句覆盖测试21.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是_。(分数:2.50)A.不合法的运算符B.一元运算符C.无操作数的运算符D.二元运算符22.下列程序的输出结果是_。 #includeio
10、stream.h void main() char*str=“12123434“; int x1=0,x2=0,x3=0,x4=0,i; for(i=0;stri!=“/0“;i+) switch (stril) case“1“:x4+; case“2“:x3+; case“3“:x2+; case“4“:x1+; coutx1“,“x2“,“x3“,“x4; (分数:1.00)A.8,6,4,1B.8,6,3,2C.8,8,4,1D.8,6,4,223.关系数据库管理系统能实现的专门关系运算包括_。(分数:1.00)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、
11、制表24.有如下程序: #includeiostream using namespace std; class TestClass int a; public: TestClass(int x)a=x; void show()couta; class TestClass1:public TcstClass int b; public: TestClass1(int i):TestClass(i+1),b(i) void show()coutb; int main() TestClass b(5),*p; TestClass1 d(1); p=d; p-show(); return 0; 该程序
12、运行后的打印结果是_。(分数:1.00)A.5B.1C.0D.225.C+语言中在 C 语言的基础上增加的特性不包括_。(分数:1.00)A.结构B.引用C.类和对象D.静态成员函数26.有如下类声明: class Foo int bar; 则 Foo 类的成员 bar 是_。(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数27.在 C+中,cin 是个_。(分数:2.50)A类B.对象C.模板D.函数28.下列符号中不属于 C+关键字的是_。(分数:2.00)A.friendB.namespaceC.continueD.byte29.下列程序的运行结果为 #
13、includeiostream.h templateclass TT class FF TTa1,a2,a3; public: FF(TT b1,TT b2,TT b3) a1b1;a2b2;a3b3; TT Sum( ) return a1a2a3; void main( ) FF int x(int(1.1) ,2,3) ,y(int(4.2) ,5,6) ; cout x. Sum( ) “ “ y. Sum( ) endl;(分数:2.00)A.6.1 15.2B.6 15C.6 15.2D.6.1 1530.字面常量 42、4.2、42L 的数据类型分别是_。(分数:1.00)A.l
14、ong、double、intB.long、float、intC.int、double、longD.int、float、long31.有如下程序 #include iostream using namespace std; class base public: virtual void f1() cout“F1Base“; virtual void f2() cout“F2Base“; ; class derive: public base void f1() cout“F1Derive“; void f2(intx) cout“F2Derive“; ; int main() base obj1
15、,*p; derive obj2; p= p-f1(); p-f2(); return 0; 执行后的输出结果是 _ 。(分数:2.00)A.F1Derive F2BaseB.F1Derive F2DeriveC.F1Base F2BaseD.F1Base F2Derive32.重载输入流运算符“”必须使用的原型为_。(分数:2.50)A.istreamB.istreamC.istream operator(istream,类名D.类名operator(istream33.对下列二叉树 (分数:1.00)A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG34.重载输入流运
16、算符必须使用的原型为_。(分数:1.00)A.istreamoperator(istream,类名);B.istreamoperator(istream,类名);C.istream operator(istream,类名);D.类名operator(istream,类名);35.一个栈的输入序列为 1,2,3,4,下面 _ 序列不可能是这个栈的输出序列(分数:2.00)A.1,3,2,4B.2,3,4,1C.4,3,1,2D.3,4,2,1二级 C+分类模拟 255 答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.派生类的成员函数不能访问基类的
17、_。(分数:2.50)A.共有成员和保护成员B.共有成员C.私有成员 D.保护成员解析:解析 类的私有成员只能在其内部访问。2.下列叙述中正确的是_。(分数:1.00)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对 解析:解析 程序调试就是诊断和改正程序中的错误,由程序开发者完成。软件测试是为了发现错误而执行程序的过程,它由专门的测试人员完成。软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程,是软件生存周期中非常重要的一个阶段。3.以下关键字不能用来声明类的访问权限的是_。(分数:1.00)
18、A.publicB.static C.protectedD.private解析:解析 类的成员访问权限有 3 种:public(公用)、protected(保护)、private(私有)。4.有如下程序: # includeiostream using namcspace 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(s2*p)s2=*p; couts1+s2endl; return 0; 运行时的输出结果是_。(分数:2.50)A
19、.23B.58C.64D.79 解析:解析 根据程序的意思,找出数组 a 中最大值 s1 和最小值 s2 并计算二者的和。5.Sample 是一个类,执行下面语句后,调用 Sample 类的构造函数的次数是_。 Sample a2,*p=new Sample;(分数:2.50)A.0B.1C.2D.3 解析:解析 生成对象,以及动态生成对象空间,都要自动调用构造函数。6.若已定义: int a 0,1,2,3,4,5,6,7,8,9, * pa, i ; 其中 0i9,则对 a 数组元素不正确的引用是(分数:2.00)A.apaB.* ( class Base public: Base(int
20、 x=0)coutx; ; class Derived:public Base public: Derived(int x=0)coutx; private: Base val; ; int main() Derived d(1); return 0; 程序执行后的输出结果是_。(分数:1.00)A.100B.000C.010D.001 解析:解析 本题考查的知识点是类的构造。建立一个类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);执行自身的构造函数。本题
21、Derived 类继承于 Base 类,所以首先会构造基类 Base,但 Derived 类的构造函数没有初始化列表,所以将调用 Base 类的默认构造函数,输出一个 O。接下来由于它的成员中还定义了一个 Base 类的对象,而构造函数也没有显示初始化这个对象,所以再次调用 Base 类的默认构造函数输出一个 O。最后构造自身,因为主函数中传入了构造参数 1,所以构造自身时输出了一个 1。故最终输出结果为 001。9.下列函数参数默认值定义错误的是 _ 。(分数:2.00)A.Fun(int x,int y=0)B.Fun(int x=100)C.Fun(int x=0,int y)D.Fun
22、(int x=f()(假定函数 f()已经定义) 解析:10.设树 T 的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T 中的叶子结点数为(分数:1.00)A.5B.6C.7D.8 解析:解析 根据给定的条件,在树中,各结点的分支总数为:41+22+13+41=15:树中的总结点数为:15(各结点的分支总数)+1(根结点)=16:非叶子结点总数为: 4+2+1+1=8。因此,叶子结点数为16(总结点数)-8(非叶子结点总数)=8。因此,本题的正确答案为 D。11.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是 _
23、。(分数:1.00)A.p+qB.p-q C.p*qD.p%q解析:解析 本题考核指针的运算。C+语言中,指向同一字符串的指针之间能且只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。12.有以下程序: #includeiostream using namespace std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”ne
24、ndl; ; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输出的结果是 _ 。(分数:2.00)A.n10B.n5C.n20D.n=15 解析:解析 本题考查 this 指针的使用类成员函数 add 中通过 this 指针实现私有数据成员 n 的赋值。13.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是_。(分数:2.00)A.setprecision B.setwC.setfillD.showpoint解析:解析 iomanip 中定义的操纵符包括:setfill(ch)用
25、 ch 填充空白、setprecision(n)将浮点精度置为 n、setw(w)、读写 w 个字符的值 showpoint 设置小数点。14.有如下类定义: class Base int m; int n; public: Base(int m1,int n1):n(n1),m(m1) ; class Derived:public Base int q; public: Derived(int m1,int n1,int q1):q(q1),Base(m1,n1); ; 在创建一个 Derived 对象时,数据成员 m、n 和 q 被初始化的顺序是_。(分数:2.50)A.m、n、q B.n
26、、m、qC.q、m、nD.q、n、m解析:15.下列有关函数重载的叙述中,错误的是_。(分数:1.00)A.函数重载就是用相同的函数名定义多个函数B.重载函数的参数列表必须不同C.重载函数的返回值类型必须不同 D.重载函数的参数可以带有默认值解析:解析 所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。所以本题答案为 C。16.下面有关类模板的说法中不正确的是 _ 。(分数:2.00)A.类模板的成员函数都是模板函数B.类模板本身在编译中不
27、会生成任何代码C.类模板只是虚拟类型的参数 D.用类模板定义一个对象时,不能省略实际参数解析:解析 C+中类模板的声明格式为 template模板形参表声明类声明,并且类模板的成员函数都是模板函数。17.语句 ofstream f(“DATA.DAT“,ios_base:app |ios_base:binary);的功能是建立流对象 f,并试图打开文件 DATA.DAT 并与之连接,而且_。(分数:2.50)A.若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件B.若文件存在,将其截为空文件;若文件不存在,打开失败C.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文
28、件 D.若文件存在,打开失败;若文件不存在,建立一个新文件解析:18.有如下程序: #includeiomanip #includeiostream using namespace std; int main() coutsetfill(“*“)setw(6)123456; return 0; 运行时的输出结果是_。(分数:2.50)A.*123*456B.*123456*C.*123456 D.123456解析:19.下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double B.double f1(double x)return x-1.5;C.void
29、 f3(double x)-x; D.double f4(double *x)-*x; return*x;解析:解析 本题考核函数的调用和参数值的传递(形参、实参)。选项 C 中的函数 D 调用采用按值传递的方式,函数中对形参的修改没有影响到实参的值,而且函数 G 还没有返回值,所以函数耀对调用它的函数没有起到任何作用。选项 A 中的函数 f1 采用引用传递的方式影响实参的值,选项 D 中的函数 f4 通过返回值和指针调用来影响调用函数;选项 B 中的函数 f2 采用返回值的形式对其调用函数发生作用。20.下面属于黑盒测试方法的是_。(分数:2.50)A.基本路径测试B.等价类划分 C.判定覆
30、盖测试D.语句覆盖测试解析:解析 等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。21.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是_。(分数:2.50)A.不合法的运算符B.一元运算符 C.无操作数的运算符D.二元运算符解析:解析 成员函数有隐含参数的 this 指针,一般是第一个操作数,并不显式出现在参数表中。即对于单目运算符,参数表为空,对于双目运算符,参数表中有一个参数。22.下列程序的输出结果是_。 #includeiostream.h void main() char*str=“12123434“; in
31、t x1=0,x2=0,x3=0,x4=0,i; for(i=0;stri!=“/0“;i+) switch (stril) case“1“:x4+; case“2“:x3+; case“3“:x2+; case“4“:x1+; coutx1“,“x2“,“x3“,“x4; (分数:1.00)A.8,6,4,1B.8,6,3,2C.8,8,4,1D.8,6,4,2 解析:解析 本题考查循环的嵌套,for 和 switch 语句的应用,C+中各种条件判断、循环语句的用法。只要注意在 C+语言中,系统在字符指针的最后位置会增加一个字符串结束符“/0“,执行 8 次 for 循环,再根据 switc
32、h 语句中的条件易知答案。23.关系数据库管理系统能实现的专门关系运算包括_。(分数:1.00)A.排序、索引、统计B.选择、投影、连接 C.关联、更新、排序D.显示、打印、制表解析:解析 关系数据库管理系统能实现的专门关系运算包括选择、投影、连接。24.有如下程序: #includeiostream using namespace std; class TestClass int a; public: TestClass(int x)a=x; void show()couta; class TestClass1:public TcstClass int b; public: TestClas
33、s1(int i):TestClass(i+1),b(i) void show()coutb; int main() TestClass b(5),*p; TestClass1 d(1); p=d; p-show(); return 0; 该程序运行后的打印结果是_。(分数:1.00)A.5B.1C.0D.2 解析:解析 TestClass 为 TestClass1 的基类,在主函数 main 中定义 TestClass 对象b,*p。TestClass1 对象 d,p 指向 d,调用其 show 函数。“TestClass(int i):TestClass(i+1),b(i)”语句中的 Te
34、stClass 基类参数为 2,所以 show 输出 2。25.C+语言中在 C 语言的基础上增加的特性不包括_。(分数:1.00)A.结构 B.引用C.类和对象D.静态成员函数解析:解析 本题很简单,不过考生要注意引用是 C+的新特性。只有结构是 C 语言也有的特性。26.有如下类声明: class Foo int bar; 则 Foo 类的成员 bar 是_。(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员 D.私有成员函数解析:解析 此题考查的是类的定义。在定义类的成员变量时,如果没有使用关键字;所有成员默认定义为 private 私有权限。27.在 C+中,cin 是
35、个_。(分数:2.50)A类B.对象 C.模板D.函数解析:解析 C+流有 4 个预定义的流对象:cin、cout、cerr 和 clog。 cin:标准输入;cout:标准输出; cerr:标准出错信息输出;clog:带缓冲的标准出错信息输出。28.下列符号中不属于 C+关键字的是_。(分数:2.00)A.friendB.namespaceC.continueD.byte 解析:29.下列程序的运行结果为 #includeiostream.h templateclass TT class FF TTa1,a2,a3; public: FF(TT b1,TT b2,TT b3) a1b1;a2
36、b2;a3b3; TT Sum( ) return a1a2a3; void main( ) FF int x(int(1.1) ,2,3) ,y(int(4.2) ,5,6) ; cout x. Sum( ) “ “ y. Sum( ) endl;(分数:2.00)A.6.1 15.2B.6 15 C.6 15.2D.6.1 15解析:解析 本题考查模板函数的应用,表达式 int(1.1) 和 int(4.2) 是将 1.1 和 4.2 强制转换为整型。30.字面常量 42、4.2、42L 的数据类型分别是_。(分数:1.00)A.long、double、intB.long、float、in
37、tC.int、double、long D.int、float、long解析:解析 本题考查整型变量的类型和浮点变量的类型,42 默认为 int 型数据,42 后面加上 L 后,表示 long 型数据,4.2 默认为 double 型数据。31.有如下程序 #include iostream using namespace std; class base public: virtual void f1() cout“F1Base“; virtual void f2() cout“F2Base“; ; class derive: public base void f1() cout“F1Deriv
38、e“; void f2(intx) cout“F2Derive“; ; int main() base obj1,*p; derive obj2; p= p-f1(); p-f2(); return 0; 执行后的输出结果是 _ 。(分数:2.00)A.F1Derive F2Base B.F1Derive F2DeriveC.F1Base F2BaseD.F1Base F2Derive解析:32.重载输入流运算符“”必须使用的原型为_。(分数:2.50)A.istream B.istreamC.istream operator(istream,类名D.类名operator(istream解析:
39、解析 C+流的输入运算符“”和输出运算符“”只能作为非成员函数重载。重载输入流运算符“”须使用以下原型:istream 。33.对下列二叉树 (分数:1.00)A.ACBDFEG B.ACBDFGEC.ABDCGEFD.FCADBEG解析:解析 二叉树的遍历有三种:前序、中序和后序。中序遍历首先遍历左子树或左子结点,然后访问根结点,最后遍历右子树或右子结点,分析本题二叉树,对其进行中序遍历,结果为 ACBDFEG。34.重载输入流运算符必须使用的原型为_。(分数:1.00)A.istreamoperator(istream,类名); B.istreamoperator(istream,类名);C.istream operator(istream,类名);D.类名operator(istream,类名);解析:解析 C+流的输入运算符“”和输出运算符“”只能作为非成员函数重载。重载输入流运算符“”须使用的原型是 istreamoperator(istream,类名);。35.一个栈的输入序列为 1,2,3,4,下面 _ 序列不可能是这个栈的输出序列(分数:2.00)A.1,3,2,4B.2,3,4,1C.4,3,1,2 D.3,4,2,1解析: