1、二级 C+分类模拟 259 及答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.C+类体系中,不能被派生类继承的有 _ 。(分数:1.00)A.构造函数B.虚函数C.静态成员函数D.赋值操作函数2.若 MyClass 为一个类,执行“MyClass a4,*p5;”语句时会自动调用该类构造函数的次数是_。(分数:2.00)A.2B.5C.4D.93.在 C+中,cin 是一个_。(分数:2.50)A类B.对象C.模板D.函数4.下面是重载为非成员函数的运算符函数原型,其中错误的是 _ 。(分数:2.00)A.Fraction operator+(
2、Fraction, Fraction);B.Fraction operator-(Fraction);C.FractionD.Fraction5.若有如下语句 #includeiostream.h void main( ) int x=3; do x=x-2; coutx; while(!(-x); 则上面程序段(分数:1.00)A.输出的是 1B.输出的是 1 和-2C.输出的是 3 和 0D.是死循环6.下列选项中,错误的 C+表达式是_。(分数:2.00)A.a+B.“b“=10C.double(3/5)D.x+!=3|y7.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是
3、_。(分数:2.50)A.10B.8C.6D.48.有如下程序: #include iostream using namespaee std; class Basel public : Basel(int d) cout d; Basel () ; class Base2 public : Base2 ( int d) cout d ; Base2() ; class Derived : public Base1 ,Base2 public : Derived(int a, int b, int c, int d) :Base1(b), Base2(a), b1(d), b2(e) priva
4、te : int b1 ; int b2 ; ; int main() Derived d(1,2,3,4) ; return 0 ; 执行这个程序的输出记过是 _ 。(分数:1.00)A.1234B.2134C.12D.219.若有下面的函数调用: fun(a+b,3,max(n-1,b) 则 fun 的实参个数是_。(分数:2.00)A.3B.4C.5D.610.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是_。(分数:2.50)A.整型表达式B.整型常量C.整型常量或整型表达式D.任何类型的表达式11.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类
5、名相同B.构造函数可以有返回值C.构造函数可以重载D.每个类都有构造函数12.对下列二叉树进行前序遍历的结果为_。 (分数:2.50)A.ABCDEFGHB.ABDGEHCFC.GDBEHACFD.GDHEBFCA13.有三个关系 R、S 和 T 如下: (分数:2.50)A.自然连接B交C除D并14.在下列关键字中,不能用来表示继承方式的是_。(分数:1.00)A.privateB.staticC.publicD.protected15.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是(分数:1.00)A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用
6、C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针16.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:1.00)A.acbedB.decabC.deabcD.cedba17.有下列程序: #include stdio.h #define PT 3.5; #define S(x) PT*x*x; votd main() int a=1;b=2; prinif(“%4.If/n“,S(a+b); 程序运行后的输出结果是_。(分数:2.50)A.14.0B.31.5C.7.5D.程序有错,无输出结果18.若有定义“int
7、 a23;”,下列选项中对 a 数组元素正确引用的是_。(分数:1.00)A.a2!1B.a23C.a03D.a12!119.下列关于 C+函数的说明中,正确的是_。(分数:2.50)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 return 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式20.语句 coutsetprecision(2)1024.4567;的输出结果为(分数:1.00)A.1024.4567B.1024C.1024.45D.le+00321.对于模板定义关键字 class
8、 和 typename 说法不正确的是 _ 。(分数:2.00)A.程序中的 class 并不能都替换为 typenameB.class 和 typename 都可互相替换C.程序中的 typename 都能替换为 classD.程序中的部分 class 可以替换为 typename22.下列程序的执行结果是 _ 。 #includeiostream.h #includestdlib.h Class TestClass public: int x,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout“x=“x“
9、,y=“yend1; ; void main() TestClass s1(2,3); s1.disp(); (分数:2.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3D.x=3,y=223.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:2.00)A.内联函数B.重载函数C.递归函数D.函数模板24.下列关于运算符重载的描述中,错误的是_。(分数:2.00)A.:运算符不能重载B.类型转换运算符只能作为成员函数重载C.将运算符作为非成员函数重载时必须定义为友元D.重载运算符应完成“下标访问”操作25.有如下程序: #include iostream usin
10、g namespace std; int main() int *p; *p=9; cout“The value at p:“*p; return 0; 编译运行程序将出现的情况是_。(分数:1.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:The value at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错26.有如下程序段: int i=0,j=1; int / r=j;/ int*p=/ *p=r;/ 其中会产生编译错误的语句是_。(分数:1.00)A.B.C.D.27.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算
11、符是_。(分数:2.00)A.一元成员运算符B.二元成员运算符C.一元友元运算符D.B 或 C28.对于循环队列,下列叙述中正确的是(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针29.下列关于多继承二义性的描述中,错误的是 _ 。(分数:2.00)A.一个派生类的两个基类中都有某个同名成员,派生类中这个成员的访问可能出现二义性B.解决二义性的最常用的方法是对成员名的限定法C.基类和派生类中同时出现的同名函数,也存在二义性问题D.一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对
12、该基类成员进行访问时,可能出现二义性30.C+类体系中,不能被派生类继承的有 _ 。(分数:1.00)A.构造函数B.虚函数C.静态成员函数D.赋值操作函数31.执行以下程序时,输入一行字符串为“Thank you very much!”,程序的输出结果为_。 #includeiostream using namespace std; int main() char a100; cina; couta“/n“; return 0;(分数:2.00)ATB.ThankC.Thank you very much!D.Thank you32.在学生管理的关系数据库中,存取一个学生信息的数据单位是_。
13、(分数:2.50)A.文件B.数据库C.字段D.记录33.有如下程序: #includeiostream using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx)x=xx; void SetY(int yy)y=yy; private: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius()return radius; private: void SetRadiu
14、s(int r)radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / coutc1.GetRadius(); / return 0; 在标注号码的语句行中不存在语法错误的是_。(分数:1.00)A.B.C.D.34.下列叙述中正确的是(分数:1.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令35.下面描述中错误的是_。(分数:2.50)A.系统总体结构图支
15、持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库没计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具二级 C+分类模拟 259 答案解析(总分:62.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.C+类体系中,不能被派生类继承的有 _ 。(分数:1.00)A.构造函数 B.虚函数C.静态成员函数D.赋值操作函数解析:2.若 MyClass 为一个类,执行“MyClass a4,*p5;”语句时会自动调用该类构造函数的次数是_。(分数:2.00)A.2B.5C.4 D.9解析:解析 语句 MyClass a4,*p5不仅
16、定义了 4 个 MyClass 对象,分别为 a0,a1,a2,a3,而且定义了 5 个指向 MyClass 对象的指针变量,分别为*p0,*p1,*p2,*p3,*p4,所以共调用MyClass 的构造函数 4 次。3.在 C+中,cin 是一个_。(分数:2.50)A类B.对象 C.模板D.函数解析:解析 C+提供了一套输入、输出流类的对象,它们是 cin、cout 和 cerr,对应 C 语言中的 3 个文件指针 stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与一起完成输入操作,cout、cerr 与一起完成输出与标准错误输出。4
17、.下面是重载为非成员函数的运算符函数原型,其中错误的是 _ 。(分数:2.00)A.Fraction operator+(Fraction, Fraction);B.Fraction operator-(Fraction);C.Fraction D.Fraction解析:5.若有如下语句 #includeiostream.h void main( ) int x=3; do x=x-2; coutx; while(!(-x); 则上面程序段(分数:1.00)A.输出的是 1B.输出的是 1 和-2 C.输出的是 3 和 0D.是死循环解析:解析 do-while 语句的一般格式为 do 循环体
18、语句 while(表达式);先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 x=x-2,即为 1。判断表达式的值,!(-x)为真,x=0,继续循环。再次执行循环体语句后,x=-2,此时表达式的值为 0,结束循环。6.下列选项中,错误的 C+表达式是_。(分数:2.00)A.a+B.“b“=10 C.double(3/5)D.x+!=3|y解析:7.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。(分数:2.50)A.10B.8C.6 D.4解析:解析 根据二叉树的性质判定,在任意二叉树中,度为 0 的叶子结点总是比度为 2 的结点多
19、一个。8.有如下程序: #include iostream using namespaee std; class Basel public : Basel(int d) cout d; Basel () ; class Base2 public : Base2 ( int d) cout d ; Base2() ; class Derived : public Base1 ,Base2 public : Derived(int a, int b, int c, int d) :Base1(b), Base2(a), b1(d), b2(e) private : int b1 ; int b2
20、; ; int main() Derived d(1,2,3,4) ; return 0 ; 执行这个程序的输出记过是 _ 。(分数:1.00)A.1234B.2134C.12D.21 解析:解析 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出 21。9.若有下面的函数调用: fun(a+b,3,max(n-1,b) 则 fun 的实参个数是_。(分数:2.00)A.3 B.4C.5D.6解析:解析 此题考查
21、的是函数的调用。C+中函数调用的一般形式为:函数名(实参表),其中实参表是用逗号分隔的一系列表达式。因此,本题中 fun()函数的实参表由 a+b、3 和 max(n-1,b)组成。10.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是_。(分数:2.50)A.整型表达式B.整型常量C.整型常量或整型表达式 D.任何类型的表达式解析:解析 在 C 语言中,引用数组元素时,其数组下标的数据类型可以是整型常量,也可以是整型表达式。11.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类名相同B.构造函数可以有返回值 C.构造函数可以重载D.每个类都有构造函数解析:
22、解析 构造函数没有返回值,虽然叫函数,但是它没有任何返回值,包括 void 型都不是,官方叫法为“构造器”。12.对下列二叉树进行前序遍历的结果为_。 (分数:2.50)A.ABCDEFGHB.ABDGEHCF C.GDBEHACFD.GDHEBFCA解析:解析 遍历就是不重复地访问二叉树的所有结点。二叉树遍历的方法有 3 种:前序遍历、中序遍历和后序遍历。记住 3 种遍历的顺序: 前序,访问根按前序遍历左子树按前序遍历右子树。 中序,按中序遍历左子树访问根按中序遍历右子树。 后序,按后序遍历左子树按后序遍历右子树访问根。 所以对该二叉树的中序遍历结果为 ABDGEHCF。13.有三个关系 R
23、、S 和 T 如下: (分数:2.50)A.自然连接B交C除 D并解析:解析 本题考查的知识点是交并运算。R 和 S 的交为 R,并也为 R,因而是除。R 与 S 的除运算得到一个新的关系 P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上的分量值 x 的象集Yx 包含 S 在 Y 上的投影的集合。14.在下列关键字中,不能用来表示继承方式的是_。(分数:1.00)A.privateB.static C.publicD.protected解析:解析 3 种继承方式:公用继承、私有继承和保护继承分别使用 public、private 和 protected3个关键字
24、来定义。15.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是(分数:1.00)A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针解析:解析 公有继承的派生类和基类是子类型的关系,所谓子类型是类型间一般和特殊的关系,即派生类是基类的子类型或者说基类的操作可以被用于操作派生类的对象。16.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:1.00)A.acbedB.decabC.deabcD.cedba 解析:解析 依据后序遍历序
25、列可确定根结点为 c;再依据中序遍历序列可知其左子树由 deba 构成,右子树为空;又由左子树的后序遍历序列可知其根结点为 e,由中序遍历序列可知其左子树为 d,右子树由 ba 构成,如下图所示。求得该二叉树的前序遍历序列为选项 D)。 17.有下列程序: #include stdio.h #define PT 3.5; #define S(x) PT*x*x; votd main() int a=1;b=2; prinif(“%4.If/n“,S(a+b); 程序运行后的输出结果是_。(分数:2.50)A.14.0B.31.5C.7.5D.程序有错,无输出结果 解析:解析 这个程序有错误不能
26、通过编泽。#define 宏定义后不可有分号;用分号隔开后,int 只定义了 a,b 要重新定义。18.若有定义“int a23;”,下列选项中对 a 数组元素正确引用的是_。(分数:1.00)A.a2!1B.a23C.a03D.a12!1 解析:解析 数组的下标从 O 开始,数组 a23包括元素 a00,a01,a02,a10,a11,a12,只有选项 D 正确,12 为假,所以是 0,!为假也是 0,即引用元素 a00,其他选项的引用均是下标越界。19.下列关于 C+函数的说明中,正确的是_。(分数:2.50)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 re
27、turn 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型 D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式解析:解析 内联函数不是定义在另一个函数体内部的函数,而是将 inline 放在函数定义中函数类型之前;函数体的最后一条语句可以是任意的语句;编译器不会根据函数返回值的类型来区分重载形式,选项D 错误。标准 C+要求在调用一个函数之前,必须先声明其原型。20.语句 coutsetprecision(2)1024.4567;的输出结果为(分数:1.00)A.1024.4567B.1024C.1024.45D.le+003 解析:解析 setprecision()函
28、数的考查。 解题要点 setprecision()函数为设置小数位数。 考点链接 C+中 I/O 流各种函数的使用例如: setw(),setfill()。21.对于模板定义关键字 class 和 typename 说法不正确的是 _ 。(分数:2.00)A.程序中的 class 并不能都替换为 typenameB.class 和 typename 都可互相替换 C.程序中的 typename 都能替换为 classD.程序中的部分 class 可以替换为 typename解析:解析 在 C+程序中的 typename 是都可以替换为 class 的,但 clgss 不能都替换为 typena
29、me。22.下列程序的执行结果是 _ 。 #includeiostream.h #includestdlib.h Class TestClass public: 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(); (分数:2.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3 D.x=3,y=2解析:解析 由主函数入手,定义了类 TestClass 的对象 s1(2,3
30、),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(int a,int b)x=a;y=b;)”。然后引用成员函数disp(),则输出为“cout”x=“x”,y=“yendl;”。23.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:2.00)A.内联函数 B.重载函数C.递归函数D.函数模板解析:解析 C+引入内联函数的原因是用它来取代 C 中的预处理宏函数。两者的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的。内联函数在调用时像宏函数一样展开,所以它没有一般函数的参数压栈和退栈操作,减少了调用开销,因此,
31、内联函数比普通函数有更高的执行效率。24.下列关于运算符重载的描述中,错误的是_。(分数:2.00)A.:运算符不能重载B.类型转换运算符只能作为成员函数重载C.将运算符作为非成员函数重载时必须定义为友元 D.重载运算符应完成“下标访问”操作解析:解析 C+把重载的运算符视为特殊的函数,称为运算符函数。“运算符重载”是针对 C+中原有运算符进行的,不可能通过重载创造出新的运算符。25.有如下程序: #include iostream using namespace std; int main() int *p; *p=9; cout“The value at p:“*p; return 0;
32、编译运行程序将出现的情况是_。(分数:1.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:The value at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错 解析:解析 先定义指针变量,然后给指针变量赋初值有三种情况:用取地址运算符“ int / r=j;/ int*p=/ *p=r;/ 其中会产生编译错误的语句是_。(分数:1.00)A. B.C.D.解析:解析 本题考查指针和引用。为引用,使用正确;中 int main() char a100; cina; couta“/n“; return 0;(分数:2.00)ATB.Than
33、k C.Thank you very much!D.Thank you解析:32.在学生管理的关系数据库中,存取一个学生信息的数据单位是_。(分数:2.50)A.文件B.数据库C.字段D.记录 解析:解析 本题考查的知识点是记录的描述。在关系数据库中,使用记录作为存取一个实体信息的数据单位。33.有如下程序: #includeiostream using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx)x=xx; void SetY(int yy)y=yy; pri
34、vate: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius()return radius; private: void SetRadius(int r)radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / coutc1.GetRadius(); / return 0; 在标注号码的语句行中不存在语法错误的是_。(分数:1.00)A.B.C.D. 解析:解
35、析 本题考查对象成员的引用,在类外引用对象的数据成员时,只能访问 public 成员而不能访问 private 成员所以 C 选项错误,D 选项正确,派生类公有继承基类,但是不能继承基类的私有成员,所以执行 c1.SetX(1)错误,同理 B 选项错误。34.下列叙述中正确的是(分数:1.00)A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令解析:解析 软件生命周期分为软件定义、软件开发及软件运行维护 3 个阶段。维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段。35.下面描述中错误的是_。(分数:2.50)A.系统总体结构图支持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库没计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具解析:解析 软件系统的总体结构图是软件架构设计的依据,它并不能支持软件的详细设计。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1