1、二级 C+笔试-311 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于类中成员函数特征的描述中错误的是( )。(分数:2.00)A.类的成员函数一定是内联函数B.类的成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的2.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。(分数:2.00)A.与虚基类下面的派生类个数有关B.多次C.两次D.一次3.关于关键字 class 和 typename,下列描述正确的是( )。(分数:2.00)A.程序中所有的
2、class 都可以替换为 typenameB.程序中所有的 typename 都可以替换为 classC.A 和 B 都可以D.A 和 B 都不可以4.多态性指的是( )。(分数:2.00)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数D.借助于指向对象的基类指针或引用调用一个纯虚函数5.C+语言本身没有定义 I/O 操作,但 I/O 操作包含在 C+实现中。C+标准库 iostream 提供了基本的 I/O类。I/O 操作分别由两个类 istream 和( )提供。Afstream BiostreamC. ostream D. ci
3、n(分数:2.00)A.B.C.D.6.下列关于 C+语言类的描述中错误的是( )。(分数:2.00)A.类用于描述事物的属性和对事物的操作B.类与类之间通过封装而具有明确的独立性C.类与类之间必须是平等的关系,而不能组成层次结构D.类与类之间可以通过一些方法进行通信和联络7.对于下面定义的类 MyClass,在函数 f()中将对象成员 n 的值修改为 50 的语句应该是( )。class MyClasspublic:MyClass(int x) n=x;void SetNum(int n1) n=n1;private:int n;int f()MyClass *ptr=new MyClass
4、(45);AMyClass(50) BSetNum(50)C. ptr-SetNum(50) D. ptr-n=50(分数:2.00)A.B.C.D.8.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以无返回值C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参9.在 E-R 图中,用来表示实体的图形是( )。(分数:2.00)A.矩形B.椭圆形C.菱形D.三角形10.以下程序执行后的输出结果是( )。#includeiostreamusing namespace std;void try(in
5、t,int,int,int);int main()int x,y,z,r;x=1;y=2;try(x,y,z,r);coutrendl;return 0;void try(int x,int y, int z,int r)z = x+y;X = x*x;y = y*y;r = z+x+y;(分数:2.00)A.18B.9C.10D.不确定11.运算符重载是对已有的运算符赋予多重含义,因此( )。(分数:2.00)A.可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符D.C+中已经
6、有的所有运算符都可以重载12.若有以下程序:#includeiostreamusing namespace std;class datapublic:int x;data(int x)data:x=x;class Aprivate:data dl;public:A(int x): dl(x) void dispaOcoutdl.x“,“;class B: public Aprivate:data d2;public:B(int x):A(x-1),d2(x) void dispb()coutd2.xendl;class C: public Bpublic:C(int x):B(x-1) voi
7、d disp0dispa();dispb();int main()C obj(5);obj.disp();return 0;程序执行后的输出结果是( )。(分数:2.00)A.5,5B.4,5C.3,4D.4,313.对虚函数的调用( )。(分数:2.00)A.一定使用动态联编B.必须使用动态联编C.一定使用静态联编D.不一定使用动态联编14.在 C+中,数据封装要解决的问题是( )。(分数:2.00)A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问15.有如下程序:#include iostreamusing namespace std;class Comp
8、lexdouble re, im,public:Complex(double r, double i): re(r), im(i) double real() const return re;double image() const return im,Complexim +=a.im;return *this;ostreamint main()Complex x(1,-2), y(2,3);cout (x+=y) endl;return 0;执行这个程序的输出结果是( )。(分数:2.00)A.(1,-2)B.(2,3)C.(3,5)D.(3,1)16.有如下程序:#includeiostr
9、eamusing namespace std;int main()void function(double val);double val;function(val);coutval;return 0;void function(double val)val= 3;编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数17.下列描述正确的是( )。(分数:2.00)A.表示 mn 为 false 或 mn 为 true 的达式为(mnclass Apublic:A() A(int i)x1=i;void dispa0co
10、ut“x1=“x1“,“;private:int x1;class B: public Apublic:B() B(int i):A(i+10)x2=i;void dispb()dispa();cout“x2=“x2endl;private:int x2;int main()B b(2);b.dispb();return 0;程序运行后的输出结果是( )。(分数:2.00)A.x1=10,x2=2B.x1=12,x2=10C.x1=12,x2=2D.x1=2,x2=222.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为( )。(分数:2.00)
11、A.PAD 图B.N-S 图C.结构图D.数据流图23.只能作为成员函数重载的是( )。(分数:2.00)A.=B.+C.*D.new24.以下程序的输出的结果是( )。#includeiostream.hvoid main( )int i,k,a10,p3;k=5;for(i=0;i10;i+) ai=i;for(i=0;i3 ;i+) pi=ai*(i+1);for(i=0;i3;i+) k+=pi*2;coutk;(分数:2.00)A.20B.21C.22D.2325.下面关于虚函数的描述中正确的是( )。(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数
12、既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型26.C+语言中 while 循环和 do-while 循环的主要区别是( )。(分数:2.00)A.do-while 的循环体至少无条件执行一次B.while 的循环控制条件比 do-while 的循环控制条件严格C.do-while 允许从外部转到循环体内D.do-while 的循环体不能是复合语句27.在单链表中,增加头结点的目的是( )。(分数:2.00)A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现28.在下列关于二
13、叉树的叙述中,选出正确的一项( )。(分数:2.00)A.在二叉树中,任何一个结点的度都是 2B.二叉树的度为 2C.在二叉树中至少有一个结点的度是 2D.一棵二叉树的度可以小于 229.在 C+语言中,080 是( )。(分数:2.00)A.八进制数B.十进制数C.十六进制数D.非法数30.假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为、( )。(分数:2.00)A.log2nB.n2C.n/2D.n(n-1)/231.用黑盒技术测试用例的方法之一为( )。(分数:2.00)A.因果图B.逻辑覆盖C.循环覆盖D.基本路径测试32.串的长度是( )。(分数:2.00)A.串中
14、不同字符的个数B.串中不同字母的个数C.串中所含字符的个数且字符个数大于零D.串中所含字符的个数33.若磁盘上已存在某个文本文件,其全路径文件名为 d:/shiti/tes.txt,下列语句中不能打开该文件的是( )。(分数:2.00)A.ifstream file(“d:/shiti/test.txt“);B.ifstream file(“d:/shiti/test.txt“);C.ifstream file;file.open(“d:/shiti/test.txt“);D.ifstream* pFile = new ifstream(“d:/shiti/test.txt“);34.以下程序
15、中,while 循环的循环次数是( )。main()int i=O;while(i10)if(i1) continue;if(i=5) break;i+;(分数:2.00)A.1B.10C.6D.死循环,不能确定次数35.如有下面初始化定义:char a=“program“;char b=p,r,o,g,r,a,m;则下列说法正确的是( )。(分数:2.00)A.a 和 b 代表的数组内容完全相同,所占存储单元的数目相同B.a 和 b 代表的数组内容不同,所占存储单元的数目相同C.a 和 b 代表的数组内容完全相同,所占存储单元的数目不同D.a 和 b 代表的数组内容不同,所占存储单元的数目不
16、同二、填空题(总题数:15,分数:30.00)36.设一棵完全二叉树共有 700 个结点,则在该二叉树中有 【1】 个叶子结点。(分数:2.00)填空项 1:_37.算法复杂度主要包括时间复杂度和 【2】 复杂度。(分数:2.00)填空项 1:_38.数据库管理系统常见的数据模型有层次模型、网状模型和 【3】 三种。(分数:2.00)填空项 1:_39.软件工程包括三个要素,分别为方法、工具和 【4】 。(分数:2.00)填空项 1:_40.一棵二叉树第六层(根结点为第一层)的结点数最多为 【5】 。(分数:2.00)填空项 1:_41.表达式 x=operator-(y,z)可以表示为 【6
17、】 。(分数:2.00)填空项 1:_42.假定用户没有给一个名为 MyClass 的类定义析构函数,则系统为其定义的默认析构函数首部形式为 【7】 。(分数:2.00)填空项 1:_43.在 C+中,若需要在程序文件中进行标准输入输出操作,则必须在开始处加入预处理命令#includeiostream.h,若使用到数学库中的函数时,要在源程序的开始处加入预处理命令 【8】 。(分数:2.00)填空项 1:_44.重载的关系运算符和逻辑运算符的返回类型应当是 【9】 。(分数:2.00)填空项 1:_45.指针变量所保存的不是一般的数据值,而是程序中另一个对象的 【10】 。(分数:2.00)填
18、空项 1:_46.假设血 int a=1,b=2;,则表达式(+a/b)*b-的值为 【11】 。(分数:2.00)填空项 1:_47.下列程序的输出结果为 2,请将程序补充完整。using namespace std;class Basepublic:【12】 void fun() cout1;class Derived:public Basepublic:void fun() cout2;int main()Base*p=new Derived;p-fun();delete p;return 0;(分数:2.00)填空项 1:_48.在 MyClass 类的定义中,对赋值运算符:进行重载。
19、请将画线处缺失的部分补充完整。【13】 MyClass:operator=(const MyClassvalue = rhs.value;return *this;(分数:2.00)填空项 1:_49.阅读下面程序:#includeiostream.hvoid f(int n)int x(5);static int y(10);if(n0)+x;+y;coutx“,“yendl;void main()int m(1);f(m),则该程序的输出结果是 【14】 。(分数:2.00)填空项 1:_50.下列程序运行后的输出结果是 【15】 。#includeiostream.hvoid fun(i
20、nt,int,int *);void main()int x,y,z;fun(5,6,fun(7,x,fun(x,y,coutx“,“y“,“zendl;void fun(int a,int b,int *c)b+=a;*c=b-a;(分数:2.00)填空项 1:_二级 C+笔试-311 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于类中成员函数特征的描述中错误的是( )。(分数:2.00)A.类的成员函数一定是内联函数 B.类的成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的解析:2.带有虚基类的多层派生类
21、构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。(分数:2.00)A.与虚基类下面的派生类个数有关B.多次C.两次D.一次 解析:3.关于关键字 class 和 typename,下列描述正确的是( )。(分数:2.00)A.程序中所有的 class 都可以替换为 typenameB.程序中所有的 typename 都可以替换为 class C.A 和 B 都可以D.A 和 B 都不可以解析:4.多态性指的是( )。(分数:2.00)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数 D.借助于指向
22、对象的基类指针或引用调用一个纯虚函数解析:5.C+语言本身没有定义 I/O 操作,但 I/O 操作包含在 C+实现中。C+标准库 iostream 提供了基本的 I/O类。I/O 操作分别由两个类 istream 和( )提供。Afstream BiostreamC. ostream D. cin(分数:2.00)A.B.C. D.解析:6.下列关于 C+语言类的描述中错误的是( )。(分数:2.00)A.类用于描述事物的属性和对事物的操作B.类与类之间通过封装而具有明确的独立性C.类与类之间必须是平等的关系,而不能组成层次结构 D.类与类之间可以通过一些方法进行通信和联络解析:7.对于下面定
23、义的类 MyClass,在函数 f()中将对象成员 n 的值修改为 50 的语句应该是( )。class MyClasspublic:MyClass(int x) n=x;void SetNum(int n1) n=n1;private:int n;int f()MyClass *ptr=new MyClass(45);AMyClass(50) BSetNum(50)C. ptr-SetNum(50) D. ptr-n=50(分数:2.00)A.B.C. D.解析:8.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.函数调用可以作为独立的语句存在B.函
24、数调用可以无返回值C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 解析:9.在 E-R 图中,用来表示实体的图形是( )。(分数:2.00)A.矩形 B.椭圆形C.菱形D.三角形解析:10.以下程序执行后的输出结果是( )。#includeiostreamusing namespace std;void try(int,int,int,int);int main()int x,y,z,r;x=1;y=2;try(x,y,z,r);coutrendl;return 0;void try(int x,int y, int z,int r)z = x+y;X = x*x;y = y
25、*y;r = z+x+y;(分数:2.00)A.18B.9C.10D.不确定 解析:11.运算符重载是对已有的运算符赋予多重含义,因此( )。(分数:2.00)A.可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符 D.C+中已经有的所有运算符都可以重载解析:12.若有以下程序:#includeiostreamusing namespace std;class datapublic:int x;data(int x)data:x=x;class Aprivate:data dl;
26、public:A(int x): dl(x) void dispaOcoutdl.x“,“;class B: public Aprivate:data d2;public:B(int x):A(x-1),d2(x) void dispb()coutd2.xendl;class C: public Bpublic:C(int x):B(x-1) void disp0dispa();dispb();int main()C obj(5);obj.disp();return 0;程序执行后的输出结果是( )。(分数:2.00)A.5,5B.4,5C.3,4 D.4,3解析:13.对虚函数的调用( )。
27、(分数:2.00)A.一定使用动态联编B.必须使用动态联编C.一定使用静态联编D.不一定使用动态联编 解析:14.在 C+中,数据封装要解决的问题是( )。(分数:2.00)A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问 解析:15.有如下程序:#include iostreamusing namespace std;class Complexdouble re, im,public:Complex(double r, double i): re(r), im(i) double real() const return re;double image() c
28、onst return im,Complexim +=a.im;return *this;ostreamint main()Complex x(1,-2), y(2,3);cout (x+=y) endl;return 0;执行这个程序的输出结果是( )。(分数:2.00)A.(1,-2)B.(2,3)C.(3,5)D.(3,1) 解析:16.有如下程序:#includeiostreamusing namespace std;int main()void function(double val);double val;function(val);coutval;return 0;void fu
29、nction(double val)val= 3;编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数 解析:17.下列描述正确的是( )。(分数:2.00)A.表示 mn 为 false 或 mn 为 true 的达式为(mnclass Apublic:A() A(int i)x1=i;void dispa0cout“x1=“x1“,“;private:int x1;class B: public Apublic:B() B(int i):A(i+10)x2=i;void dispb()dispa();cout“x2
30、=“x2endl;private:int x2;int main()B b(2);b.dispb();return 0;程序运行后的输出结果是( )。(分数:2.00)A.x1=10,x2=2B.x1=12,x2=10C.x1=12,x2=2 D.x1=2,x2=2解析:22.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为( )。(分数:2.00)A.PAD 图B.N-S 图 C.结构图D.数据流图解析:23.只能作为成员函数重载的是( )。(分数:2.00)A.= B.+C.*D.new解析:24.以下程序的输出的结果是( )。#includ
31、eiostream.hvoid main( )int i,k,a10,p3;k=5;for(i=0;i10;i+) ai=i;for(i=0;i3 ;i+) pi=ai*(i+1);for(i=0;i3;i+) k+=pi*2;coutk;(分数:2.00)A.20B.21 C.22D.23解析:25.下面关于虚函数的描述中正确的是( )。(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 解析:26.C+语言中 while 循环和 do-while 循环
32、的主要区别是( )。(分数:2.00)A.do-while 的循环体至少无条件执行一次 B.while 的循环控制条件比 do-while 的循环控制条件严格C.do-while 允许从外部转到循环体内D.do-while 的循环体不能是复合语句解析:27.在单链表中,增加头结点的目的是( )。(分数:2.00)A.方便运算的实现 B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现解析:28.在下列关于二叉树的叙述中,选出正确的一项( )。(分数:2.00)A.在二叉树中,任何一个结点的度都是 2B.二叉树的度为 2C.在二叉树中至少有一个结点的度是 2
33、D.一棵二叉树的度可以小于 2 解析:29.在 C+语言中,080 是( )。(分数:2.00)A.八进制数B.十进制数C.十六进制数D.非法数 解析:30.假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为、( )。(分数:2.00)A.log2nB.n2C.n/2D.n(n-1)/2 解析:31.用黑盒技术测试用例的方法之一为( )。(分数:2.00)A.因果图 B.逻辑覆盖C.循环覆盖D.基本路径测试解析:32.串的长度是( )。(分数:2.00)A.串中不同字符的个数B.串中不同字母的个数C.串中所含字符的个数且字符个数大于零D.串中所含字符的个数 解析:33.若磁盘上已
34、存在某个文本文件,其全路径文件名为 d:/shiti/tes.txt,下列语句中不能打开该文件的是( )。(分数:2.00)A.ifstream file(“d:/shiti/test.txt“); B.ifstream file(“d:/shiti/test.txt“);C.ifstream file;file.open(“d:/shiti/test.txt“);D.ifstream* pFile = new ifstream(“d:/shiti/test.txt“);解析:34.以下程序中,while 循环的循环次数是( )。main()int i=O;while(i10)if(i1) c
35、ontinue;if(i=5) break;i+;(分数:2.00)A.1B.10C.6D.死循环,不能确定次数 解析:35.如有下面初始化定义:char a=“program“;char b=p,r,o,g,r,a,m;则下列说法正确的是( )。(分数:2.00)A.a 和 b 代表的数组内容完全相同,所占存储单元的数目相同B.a 和 b 代表的数组内容不同,所占存储单元的数目相同C.a 和 b 代表的数组内容完全相同,所占存储单元的数目不同D.a 和 b 代表的数组内容不同,所占存储单元的数目不同 解析:二、填空题(总题数:15,分数:30.00)36.设一棵完全二叉树共有 700 个结点
36、,则在该二叉树中有 【1】 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:350)解析:37.算法复杂度主要包括时间复杂度和 【2】 复杂度。(分数:2.00)填空项 1:_ (正确答案:空间)解析:38.数据库管理系统常见的数据模型有层次模型、网状模型和 【3】 三种。(分数:2.00)填空项 1:_ (正确答案:关系模型)解析:39.软件工程包括三个要素,分别为方法、工具和 【4】 。(分数:2.00)填空项 1:_ (正确答案:过程)解析:40.一棵二叉树第六层(根结点为第一层)的结点数最多为 【5】 。(分数:2.00)填空项 1:_ (正确答案:32)解析:41.表达式
37、x=operator-(y,z)可以表示为 【6】 。(分数:2.00)填空项 1:_ (正确答案:x=y-2)解析:42.假定用户没有给一个名为 MyClass 的类定义析构函数,则系统为其定义的默认析构函数首部形式为 【7】 。(分数:2.00)填空项 1:_ (正确答案:MyClass())解析:43.在 C+中,若需要在程序文件中进行标准输入输出操作,则必须在开始处加入预处理命令#includeiostream.h,若使用到数学库中的函数时,要在源程序的开始处加入预处理命令 【8】 。(分数:2.00)填空项 1:_ (正确答案:#include)解析:44.重载的关系运算符和逻辑运算
38、符的返回类型应当是 【9】 。(分数:2.00)填空项 1:_ (正确答案:bool)解析:45.指针变量所保存的不是一般的数据值,而是程序中另一个对象的 【10】 。(分数:2.00)填空项 1:_ (正确答案:内存地址)解析:46.假设血 int a=1,b=2;,则表达式(+a/b)*b-的值为 【11】 。(分数:2.00)填空项 1:_ (正确答案:2)解析:47.下列程序的输出结果为 2,请将程序补充完整。using namespace std;class Basepublic:【12】 void fun() cout1;class Derived:public Basepubli
39、c:void fun() cout2;int main()Base*p=new Derived;p-fun();delete p;return 0;(分数:2.00)填空项 1:_ (正确答案:virtual)解析:48.在 MyClass 类的定义中,对赋值运算符:进行重载。请将画线处缺失的部分补充完整。【13】 MyClass:operator=(const MyClassvalue = rhs.value;return *this;(分数:2.00)填空项 1:_ (正确答案:MyClassstatic int y(10);if(n0)+x;+y;coutx“,“yendl;void main()int m(1);f(m),则该程序的输出结果是 【14】 。(分数:2.00)填空项 1:_ (正确答案:6,11)解析:50.下列程序运行后的输出结果是 【15】 。#includeiostream.hvoid fun(int,int,int *);void main()int x,y,z;fun(5,6,fun(7,x,fun(x,y,coutx“,“y“,“zendl;void fun(int a,int b,int *c)b+=a;*c=b-a;(分数:2.00)填空项 1:_ (正确答案:6,6,6)解析: