1、二级 C+-15-1 及答案解析(总分:84.50,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:59.50)1.下列程序的执行结果是U /U。#includeiostream.h#includestdlib.hClass TestClasspublic:int x,y;TestClass()x=y=0;TestClass(int a,int b)x=a;y=b;void disp()cout“x=“x“,y=“yend1;void main()TestClass s1(2,3);s1.disp(); A. x=2,y=2 B. x=3,y=3 C. x=2,y=3 D. x=3
2、,y=2(分数:2.00)A.B.C.D.2.打开文件时可单独或组合使用下列文件打开模式: ios_base:aop ios_base:binary ios_base: ios_base:out 若要以二进制读方式打开一个文件,需使用的文件打开模式为U /U。 A B CD(分数:2.00)A.B.C.D.3.一个类的友元函数或友元类可以访问该类的U /U。 A. 私有成员 B. 所有成员 C. 保护成员 D. 公有成员(分数:2.00)A.B.C.D.4.有如下程序:#include iostreamusing namespace std;class Objstatic int i;publ
3、ic:Obj()i+;Obi()i-;static int getVal() return i;int Obj:i=0;void f()Obj ob2; coutob2.getVal();int main()Obj ob1;f();Obj *ob3=new Obj; coutob3-getVal();delete ob3; coutObj:getVal();return 0;程序的输出结果是U /U。 A.232 B.231 C.222 D.221(分数:2.00)A.B.C.D.5.下列表示纯虚函数的成员函数是 A. virtual int func (int); B. void func(
4、int)=0; C. virtual void func=0; D. virtual void flmc(int)(分数:2.00)A.B.C.D.6.若有以下程序:#include iostreamusing namespace std;class pointprivate:int x, y;public:point ( )x=0;y=0;void setpoint(int x1,int y1)x=x1;y=y1;void dispoint ()cout“x=“x“ , “y=“yend1;int main ( )point *p=new point;p-setpoint (5, 12);p
5、-dispoint ();return 0;程序运行后的输出结果是( )。 A. x=12,y=12 B. x=5,y=5 C. x=12,y=5 D. x=5,y=12(分数:1.00)A.B.C.D.7.对虚函数的调用U /U。 A.一定使用动态联编 B.必须使用动态联编 C.一定使用静态联编 D.不一定使用动态联编(分数:2.00)A.B.C.D.8.在 C+中,打开一个文件,就是将这个文件与一个U /U建立关联;关闭一个文件,就是取消这种关联。 A.类 B.流 C.对象 D.结构 (分数:1.00)A.B.C.D.9.若 PAT 是一个类,则程序运行时,语句“PAT*aD) 3;”调用
6、 PAT 的构造函数的次数是U /U。 A. 0 B. 1 C. 2 D. 3(分数:2.00)A.B.C.D.10.下面关于虚函数的描述,错误的是 A.在成员函数声明的前面加上 virtual 修饰,就可把该函数声明为虚函数 B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数 C.虚函数可以是另一个类的友元函数,但不能是静态成员函数 D.基类中说明的纯虚函数在其任何派生类中都必须实现 (分数:1.00)A.B.C.D.11.在下列函数原型中,可以作为类 AA 构造函数的是 A. void AA(int); B. int AAU /U; C. AA(int)eonst; D. AA
7、(int);(分数:2.00)A.B.C.D.12.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。 A.属性 B.键 C.关系 D.域(分数:2.00)A.B.C.D.13.下面是关于派生类声明的开始部分,其中正确的是_ 。 A. class virtual B:public A B. virtual class B:public A C. class B:public A virtual D. class B:virtual public A(分数:2.00)A.B.C.D.14.设有以下定义和程序:#include iostream.hclass A1public:void s
8、howl()cout“class A1“end1;Class A2 : public A1public:void show2()cout“Class A2“end1;Class A3 : protected A2public:void show3()cout”Class A 土”end1;void main()A1 obj1;A2 obj2;A3 obj3;则以下不合语法的调用语句是U /U。 A. obj1show1(); B. obj2show1(); C. obj3show1(); D. obj2show2();(分数:1.00)A.B.C.D.15.下列叙述中正确的是 A. 线性表是线
9、性结构 B. 栈与队列是非线性结构 C. 线性链表是非线性结构 D. 二叉树是线性结构(分数:1.00)A.B.C.D.16.进行文件操作时需要包含U /U文件。 A.lostream.h B.fstream.h C.stdio.h D.stidliB.h (分数:1.00)A.B.C.D.17.有下列程序:#include stdio.hint fun(int a,int b) if(b=0) return a;else return(fun(-a,-b);void main() printf(“%d/n“,fun(4,2);程序的运行结果是_。 A.1 B.2 C.3 D.4(分数:2.5
10、0)A.B.C.D.18.下面程序的执行结果为#include“ iostream“using namespace std;class Aint a;public:void Seta(int x) a=x;void Display_a( ) cout a end1;class Bint b;public:void Setb(int x) b=x;void Dispaly_b( ) cout b end1;class C:public A,private Bprivate:int c;public:void Setc(int x,int y,int z) c=z;Seta(x);Setb(y);
11、void Display_c( ) cout c end1; voidmain( ) C cc; ccSeta(1); ccDisplay_a( ); ccSetc(2,2,3); ccDispaly_b( ); ccDisplay_c( ); A. 输出为 2 2 3 B. 有错误在第 5 行 C. 输出为 1 2 3 D. 有错误在第 7 行 (分数:1.00)A.B.C.D.19.以下程序的输出结果是U /U。#includeiostream.hvoid main()int a(5),b(6),i(0),j(0);switch(a)case 5:switch(b)case 5:i+;br
12、eak;case 6:j+;break;default:i+;j+;case 6:i+;j+;break;default:i+;j+;couti“,“jendl; A.1,2 B.1,3 C.2,2 D.2,3(分数:2.00)A.B.C.D.20.派生类中的成员不能直接访问基类中的U /U成员。 A. public B. private C. virtual D. protected(分数:2.00)A.B.C.D.21.下列描述中正确的是_ 。 A. 程序就是软件 B. 软件开发不受计算机系统的限制 C. 软件既是逻辑实体,又是物理实体 D. 软件是程序、数据与相关文档的集合(分数:2.0
13、0)A.B.C.D.22.计算斐波那契数列第 n 项的函数定义如下:int fib(int n)if(n= =0) return 1;else if(n= =1) return 2;else return fib(n-1)+fib(n-2);若执行函数调用表达式 fib(2),函数 fib 被调用的次数是 A. 1 B. 2 C. 3 D. 4(分数:2.00)A.B.C.D.23.已知类 A 有公用数据成员 a,并重载了=运算符,且有 A obj2;const A ptr*=new A;则下列语句错误的是 A. ptr-a=100; B. ptr= C. ptr+; D. obj2=*ptr
14、;(分数:2.00)A.B.C.D.24.下列程序段中包含 4 个函数,其中具有隐含 this 指针的是U /U。int fun1();class Testpublic:int fun2();friend int fun3();static int fun4(); A.fun1 B.fun2 C.fun3 D.fun4(分数:2.00)A.B.C.D.25.下列叙述中正确的是 A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护 C.软件交付使用后其生命周期就结束 D.软件维护是指修复程序中被破坏的指令 (分数:1.00)A.B.C.D.26.已知有关系模式 R(sno,s
15、name,age),其中 sno 表示学生的学号,类型为 Char(8),前 4 位表示入学年份。查询所有 2003 年入学的学生姓名(sname),SQL 语句是 _。 A. SELECT sname FROM R WHEREsno=2003% B. SELECT sname FROM R WHERE sno LIKE 2003% C. SELECT sname FROM R WHERE sno=2003_ D. SELECT sname FROM R WHERE sno LIKE 2003_(分数:2.00)A.B.C.D.27.下列字符串中,正确的 C 抖标识符是U /U。 A.foo-
16、1 B.2b C.new D._256(分数:2.00)A.B.C.D.28.计算机软件是_ 。 A. 程序 B. 数据 C. 文档 D. 程序、数据及相关文档的完整集合(分数:2.00)A.B.C.D.29.关于关键字 class 和 typename,下列描述正确的是U /U。 A. 程序中所有的 class 都可以替换为 typename B. 程序中所有的 typename 都可以替换为 class C. A 和 B 都可以 D. A 和 B 都不可以(分数:2.00)A.B.C.D.30.关于 C+语言与 C 语言关系描述中错误的是 A. C+语言是 C 语言的超集 B. C+语言对
17、 C 语言进行了扩充 C. C+语言包含 C 语言的全部语法特征 D. C+语言与 C 语言都是面向对象的程序设计语言 (分数:1.00)A.B.C.D.31.下列关于类定义的说法中,正确的是_。 A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的 C.数据成员必须被声明为私有的 D.成员函数只能在类体外进行定义(分数:1.00)A.B.C.D.32.下列关于关系运算的叙述中正确的是 A. 投影、选择、连接是从二维表的行的方向来进行运算 B. 并、交、差是从二维表的列的方向来进行运算 C. 投影、选择、连接是从二维表的列的方向来进行运算 D. 以上三种说法都不对(分数:
18、2.00)A.B.C.D.33.有如下程序:#include iostreamusing namespace std;class MyClasspublic:MyClass()+count;MyClass()-count;static int getCount()return count;private:static int count;int MyClass:count=0;int main()MyClass obj;coutobj.getCount();MyClass*ptr=new MyClass;coutMyClass:getCount();delete ptr;coutMyClass
19、:getCount();return 0;执行这个程序的输出结果是_。 A.121 B.232 C.221 D.122(分数:1.00)A.B.C.D.34.下列关于常数据成员的说法中,错误的是_。 A. 常数据成员必须进行初始化,并且不能更新 B. 使用 const 说明的数据成员称为常数据成员 C. 可以在类体外面定义常数据成员 D. 常数据成员的初始化只能通过构造函数的成员初始化列表进行(分数:2.00)A.B.C.D.35.有如下程序#includeiostream.hvoid main()char ch25=“6937“,“8254“,*p2;int i,j,s0;for(i0;i(
20、2;i+)pichi;for(i0;i(2;i+)for(j0;pij/0,j+2)s10*s+pij-0;couts;该程序的输出结果是U /U。 A.69825 B.63825 C.6385 D.693825(分数:2.00)A.B.C.D.二、B填空题/B(总题数:15,分数:25.00)36.C+语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的 1 和 2。(分数:1.00)填空项 1:_37.求 1100 的和,可写成“for(s=0,i=1;U U /U /U;i+) s+=i;”的形式。(分数:1.00)填空项 1:_38.非成员函数必须声明为类的 1
21、 才能访问这个类的 private 成员。(分数:2.00)填空项 1:_39.数组元素 ai是该数组中的第 1 个元素。(分数:1.00)填空项 1:_40.设一棵二叉树的中序遍历结果为 ABCDEFG,前序遍历结果为 DBACFEG,则后序遍历结果为_。(分数:2.00)填空项 1:_41.多态性可分为二类:编译时和U U /U /U。(分数:2.00)填空项 1:_42.类是用户定义的类型,具有类类型的变量称作U U /U /U。(分数:2.00)填空项 1:_43.问题处理方案的正确而完整的描述称为U U /U /U。(分数:2.00)填空项 1:_44.在最坏情况下,堆排序需要比较的
22、次数为 【2】 。(分数:1.00)填空项 1:_45.类 clasg one 在声明 func 成员函数时发生错误,出错原因是_。 class one private: int a; public: void func(two ; class two private: int b; friend vold one:func(two ; void one:func(two (分数:2.00)填空项 1:_46.已知下列程序的输出结果是 42, 请将画线处缺失的部分补充完整。 #includeiostream using namespace std; class Foo int value; p
23、ublic: Foo( ): value(0) void setValue(int value) U U /U /U=value; /给 Foo 的数据成员 value 赋值 void print( ) coutvalue; ; int main( ) Foo f; f.setValue(42); f.print(); return 0;(分数:1.00)填空项 1:_47.下面程序的输出为U U /U /U。 #include iostream.h void main() int a10,i, k=0; for(i=0,i10;i+) ai=i; for(i=1;i4;i+) k+=ai+i
24、; coutkend1; (分数:2.00)填空项 1:_48.在 C+中,打开一个文件,就是将这个文件与一个U U /U /U建立关联;关闭一个文件,就是取消这种关联。(分数:2.00)填空项 1:_49.若 x 和 y 是两个整型变量,在执行了语句序列: x=5; y=6; y+=x-; 后,x+y 的值为_。(分数:2.00)填空项 1:_50.C+源程序中,只有U U /U /U个主函数。(分数:2.00)填空项 1:_二级 C+-15-1 答案解析(总分:84.50,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:59.50)1.下列程序的执行结果是U /U。#inclu
25、deiostream.h#includestdlib.hClass TestClasspublic:int x,y;TestClass()x=y=0;TestClass(int a,int b)x=a;y=b;void disp()cout“x=“x“,y=“yend1;void main()TestClass s1(2,3);s1.disp(); A. x=2,y=2 B. x=3,y=3 C. x=2,y=3 D. x=3,y=2(分数:2.00)A.B.C. D.解析:解析 由主函数入手,定义了类 TestClass 的对象 s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应
26、该是调用具有参数的“TestClass(int a,int b)x=a;y=b;)”。然后引用成员函数disp(),则输出为“cout”x=“x”,y=“yendl;”。2.打开文件时可单独或组合使用下列文件打开模式: ios_base:aop ios_base:binary ios_base: ios_base:out 若要以二进制读方式打开一个文件,需使用的文件打开模式为U /U。 A B CD(分数:2.00)A.B.C.D. 解析:解析 ios_base:binary 是作为二进制文件打开,ios_base:out 是为输出而打开;故因选D。3.一个类的友元函数或友元类可以访问该类的U
27、 /U。 A. 私有成员 B. 所有成员 C. 保护成员 D. 公有成员(分数:2.00)A.B. C.D.解析:解析 在 C+中,如果想让类中的成员数据可以被其他函数访问,可以通过友元函数声明,来共享类中的资源。友元类函数对类的属性和方法的访问能力等同于类的成员函数。4.有如下程序:#include iostreamusing namespace std;class Objstatic int i;public:Obj()i+;Obi()i-;static int getVal() return i;int Obj:i=0;void f()Obj ob2; coutob2.getVal();
28、int main()Obj ob1;f();Obj *ob3=new Obj; coutob3-getVal();delete ob3; coutObj:getVal();return 0;程序的输出结果是U /U。 A.232 B.231 C.222 D.221(分数:2.00)A.B.C.D. 解析:5.下列表示纯虚函数的成员函数是 A. virtual int func (int); B. void func(int)=0; C. virtual void func=0; D. virtual void flmc(int)(分数:2.00)A.B.C. D.解析:解析 本题考查纯虚函数的
29、定义形式。由于纯虚函数在最后要有“=0”,故据此排除 A 和 D。而B 中没有出现 virtual 关键词,故正确答案为 C。6.若有以下程序:#include iostreamusing namespace std;class pointprivate:int x, y;public:point ( )x=0;y=0;void setpoint(int x1,int y1)x=x1;y=y1;void dispoint ()cout“x=“x“ , “y=“yend1;int main ( )point *p=new point;p-setpoint (5, 12);p-dispoint (
30、);return 0;程序运行后的输出结果是( )。 A. x=12,y=12 B. x=5,y=5 C. x=12,y=5 D. x=5,y=12(分数:1.00)A.B.C.D. 解析:解析 本题考核对象指针的定义与使用。分析程序: 程序首先定义一个类 point,类 point 中有两个私有成员,整型变量 x 和 y,还有两个公有成员函数 setpoint(int x1,int y1)和 dispoint()。函数setpoint()用来设置私有成员 x 和 y 的值,而函数 dispoint()用来显示私有成员 x 和 y 的值。 主函数中,首先定义了类 point 的指针对象 p,并
31、申请了内存空间,然后调用对象 p 中公有成员 setpoint 给对象 p中的私有成员 x 和 y 赋值,然后调用成员函数 dispoint 显示 x 和 y 的值。 由此可知,最后输出的值应该是 5,12。7.对虚函数的调用U /U。 A.一定使用动态联编 B.必须使用动态联编 C.一定使用静态联编 D.不一定使用动态联编(分数:2.00)A.B.C.D. 解析:8.在 C+中,打开一个文件,就是将这个文件与一个U /U建立关联;关闭一个文件,就是取消这种关联。 A.类 B.流 C.对象 D.结构 (分数:1.00)A.B. C.D.解析:9.若 PAT 是一个类,则程序运行时,语句“PAT
32、*aD) 3;”调用 PAT 的构造函数的次数是U /U。 A. 0 B. 1 C. 2 D. 3(分数:2.00)A. B.C.D.解析:解析 语句“PAT(*aD) 3”定义了含有 3 个元素的指向类 PAT 类型的指针数组 ad。10.下面关于虚函数的描述,错误的是 A.在成员函数声明的前面加上 virtual 修饰,就可把该函数声明为虚函数 B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数 C.虚函数可以是另一个类的友元函数,但不能是静态成员函数 D.基类中说明的纯虚函数在其任何派生类中都必须实现 (分数:1.00)A.B. C.D.解析:解析:基类中说明的虚函数,在派生
33、类中自然就是虚函数,对于纯虚函数必须在后面继承的派生类中给出具体的实现;静态成员函数不能进行动态联编,所以虚函数不能是静态的。11.在下列函数原型中,可以作为类 AA 构造函数的是 A. void AA(int); B. int AAU /U; C. AA(int)eonst; D. AA(int);(分数:2.00)A.B.C.D. 解析:解析 类的构造函数不能有返回值,也不能定义为返回空函数,或者用 const 修饰定义为常函数。12.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。 A.属性 B.键 C.关系 D.域(分数:2.00)A.B.C. D.解析:从 E-R 图到关系
34、模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性。13.下面是关于派生类声明的开始部分,其中正确的是_ 。 A. class virtual B:public A B. virtual class B:public A C. class B:public A virtual D. class B:virtual public A(分数:2.00)A.B.C.D. 解析:解析 类声明的部分内容。14.设有以下定义和程序:#include iostream.hclass A1public:void showl()cout“class A1“end1;Cla
35、ss A2 : public A1public:void show2()cout“Class A2“end1;Class A3 : protected A2public:void show3()cout”Class A 土”end1;void main()A1 obj1;A2 obj2;A3 obj3;则以下不合语法的调用语句是U /U。 A. obj1show1(); B. obj2show1(); C. obj3show1(); D. obj2show2();(分数:1.00)A.B.C. D.解析:解析 C+中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。A2 是A
36、1 的公有派生类,A3 是 A2 的保护派生类,所以类 A1 的成员函数 showl()在类 A3 中呈现保护属性,不能通过 A3 类的对象访问。15.下列叙述中正确的是 A. 线性表是线性结构 B. 栈与队列是非线性结构 C. 线性链表是非线性结构 D. 二叉树是线性结构(分数:1.00)A. B.C.D.解析:解析 非空的数据结构如果满足下列两个条件则称为线性结构:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。线性表是线性结构。选项 A 的说法正确;栈与队列是特殊的线性表,因此,它们也是线性结构,选项 B 的说法错误:线性链表是线性表的链式存储结构,因此,其对应的逻辑结构
37、也是线性结构,而不是非线性结构,选项 C 的说法错误;二叉树是非线性结构,而不是线性结构,选项 D 的说法错误。16.进行文件操作时需要包含U /U文件。 A.lostream.h B.fstream.h C.stdio.h D.stidliB.h (分数:1.00)A.B. C.D.解析:17.有下列程序:#include stdio.hint fun(int a,int b) if(b=0) return a;else return(fun(-a,-b);void main() printf(“%d/n“,fun(4,2);程序的运行结果是_。 A.1 B.2 C.3 D.4(分数:2.5
38、0)A.B. C.D.解析:解析 本题考查递归函数的使用。fun(4,2)-fun(2,0),由于 b 等于 0,故返回值为 2。反之,fun(4,2)=2。18.下面程序的执行结果为#include“ iostream“using namespace std;class Aint a;public:void Seta(int x) a=x;void Display_a( ) cout a end1;class Bint b;public:void Setb(int x) b=x;void Dispaly_b( ) cout b end1;class C:public A,private Bp
39、rivate:int c;public:void Setc(int x,int y,int z) c=z;Seta(x);Setb(y);void Display_c( ) cout c end1; voidmain( ) C cc; ccSeta(1); ccDisplay_a( ); ccSetc(2,2,3); ccDispaly_b( ); ccDisplay_c( ); A. 输出为 2 2 3 B. 有错误在第 5 行 C. 输出为 1 2 3 D. 有错误在第 7 行 (分数:1.00)A.B.C.D. 解析:解析 考查类的继承方法。 【解题要点】pnvate 继承不能调用 Di
40、splay_b 函数,public 继承可以调用基类中非 pfivate 成员。 【考点链接】类的继承方式 public,protected 和 private 的区别。19.以下程序的输出结果是U /U。#includeiostream.hvoid main()int a(5),b(6),i(0),j(0);switch(a)case 5:switch(b)case 5:i+;break;case 6:j+;break;default:i+;j+;case 6:i+;j+;break;default:i+;j+;couti“,“jendl; A.1,2 B.1,3 C.2,2 D.2,3(分
41、数:2.00)A. B.C.D.解析:20.派生类中的成员不能直接访问基类中的U /U成员。 A. public B. private C. virtual D. protected(分数:2.00)A.B. C.D.解析:解析 即使是共有继承,其私有成员仍为私有,无法访问。21.下列描述中正确的是_ 。 A. 程序就是软件 B. 软件开发不受计算机系统的限制 C. 软件既是逻辑实体,又是物理实体 D. 软件是程序、数据与相关文档的集合(分数:2.00)A.B.C.D. 解析:解析 软件与程序有区别,软件的相关概念。22.计算斐波那契数列第 n 项的函数定义如下:int fib(int n)i
42、f(n= =0) return 1;else if(n= =1) return 2;else return fib(n-1)+fib(n-2);若执行函数调用表达式 fib(2),函数 fib 被调用的次数是 A. 1 B. 2 C. 3 D. 4(分数:2.00)A.B.C. D.解析:解析 针对递归调用的含义,当 n 为 2 时有 fib(0),fib(1),fib(2)被调用,且 fib(0),fib(1)时调用结束,即共 3 次。23.已知类 A 有公用数据成员 a,并重载了=运算符,且有 A obj2;const A ptr*=new A;则下列语句错误的是 A. ptr-a=100
43、; B. ptr= C. ptr+; D. obj2=*ptr;(分数:2.00)A. B.C.D.解析:解析 本题考察 const 修饰符的作用。注意:const 位置不同,其修饰的部分也是不同的。本题中 const 修饰的是 ptr 所指的对象本身,所以,ptr 是可以重新指向新的对象,而 ptr-a 则无法被更新。24.下列程序段中包含 4 个函数,其中具有隐含 this 指针的是U /U。int fun1();class Testpublic:int fun2();friend int fun3();static int fun4(); A.fun1 B.fun2 C.fun3 D.fun4(分数:2.00)A.B. C.D.解析:解析 this 指针是成员函数所属对象的指针,是指向类对象的地址,是一个隐含的指针,隐含于每个类的非静态成员函数中。fun1 是外部函数,fun3 是友元函数,fun4 是静态成员函数,故选 B。25.下列叙述中正确的是 A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护 C.软件交付使用后其生命周期就结束 D.软件维护是指修复程序中被破坏的指令 (分数: