1、二级 C+笔试-295 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下程序:#includeiostream)using namespace std;class AAint n;public:AA(int k):n(k)int get()return n;int get()constreturn n+1;int main()AA a(5);const AA b(6);COUt(分数:2.00)A.get()b.get()2.下列程序的输出结果为( )。#includeiostream.h)class TestClasspublic:
2、TestClass()val+;static,int val;int TestClass:val0;void main()TestClass cs1;coutcsl.val“;TestClass cs2;TestClass cs3,cs4;coutcs2.valend1;(分数:2.00)A.03B.13C.14D.243.下列各类函数中,不是类的成员函数的是( )。(分数:2.00)A.构造函数B.抽象类C.派生类D.以上都不对4.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂
3、度大,则其空间复杂度必定小D.上述三种说法都不对5.有如下程序:#includeiostreamusing namespace std;class DAint k;public:DA(int x1):k(x)DA()coutk;int main()DAdDA(3),DA(3),DA(3);DA*pnew DA2;deletep;return();这个程序的输出结果是( )。(分数:2.00)A.111B.333C.11333D.111336.如果表达式-x/y 中的“-”和“/”是作为友元函数重载的运算符,采用运算符函数用格式,该表达式还可表示为( )。(分数:2.00)A.operator/
4、(x.operator-(),y);B.operator/(operator-(x),y);C.operator-().operator/(y);D.operator/(operator-(x);7.将 E-R 图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系C.键D.域8.下列是关于派生类声明的开始部分,其中正确的是( )。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtualpublicA9.有如
5、下程序:#includeiostream.hUsing namespace std;Class Demopublic:Demo() cout“default constructor/n”; Demo(const Demo int main()Demo a;d;cout“Calling usercode()/n”;dusercode(a);return 0;执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo A(Agender=ge;phone=ph;);下列类对象定义语句中错误的是( )。(分数:2.00)A.MyClass myObj;B.MyClass myOb
6、j(11,”13301111155”);C.MyClassmyObj(12,m);D.MyClassmyObj(12);17.下列叙述中正确的是( )。(分数:2.00)A.在面向对象的程序设计中,各个对象之间具有密切的关系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D.上述 3 种说法都不对18.设有定义 charstr80以下不能将输人数据 nrst/nsecond/CR)读取到数组 str 的语句是( )。(分数:2.00)A.cin.get(str,strlen(str);B.cin.getline(str,strlen(
7、str);C.cinstr;D.dn.read(str,strlen(str);19.最简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序20.类 MyClass 的定义如下:class MyClasspublic:MyClass()value=0;SetVariable(int i)value=iprivate:int value;则对下列语句序列正确的描述是( )。MyClass*P,my;p会调用两次类 MyClass 的构造函数C.对语句*P.SetVariabte(5)的调用是正确的D.语句 p-SetVariable(5)与语句 my.Se
8、tVariable(5)等价21.下列描述正确的是( )。(分数:2.00)A.表示 mn 为 true 或 mn 为 true 的表达式为 mnconst A*ptr new A;则下列语句错误的是( )。(分数:2.00)A.ptr-a=100;B.ptr=C.ptr+;D.obj2=*ptr;31.下列关于构造函数和析构函数的描述,错误的是( )。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数32.如果类 A 被说明成类 B 的友元,则( )。(分数:
9、2.00)A.类 A 的成员即类 B 的成员B.类 B 的成员即类 A 的成员C.类 A 的成员函数不得访问类 B 的成员D.类 B 不一定是类 A 的友元33.在 C+语言中函数返回值的类型是由( )决定的。(分数:2.00)A.调用该函数时系统临时B.return 语句中的表达式类型C.定义该函数时所指定的函数类型D.调用该函数时的主调函数类型34.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:2.00)A.DB 包括 DBS 和 DBMSB.DBMS 包括 DB 和 DBSC.DBS 包括 DB 和 DBMSD.没有任何关系35.有下列二叉树,对
10、此二叉树前序遍历的结果是( )。(分数:2.00)A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXYZD.ABDYECFXZ二、填空题(总题数:15,分数:30.00)36.软件工程研究的内容主要包括: 1 技术和软件工程管理。(分数:2.00)填空项 1:_37.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的算法的特性。(分数:2.00)填空项 1:_38.注释一般分为序言性注释和 1 注释。(分数:2.00)填空项 1:_39.在链表的运算过程中,能够使空表与非空表的运算统一的结构是 1。(分数:2.00)填空项 1:_40.数据库系统的主要特点为数据集成性、
11、数据的高 1 和低冗余性、数据独立性和数据统一管理和控制。(分数:2.00)填空项 1:_41.执行”coutchar(A+2)end1;”语句后得到的输出结果为 1。(分数:2.00)填空项 1:_42._允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。(分数:2.00)填空项 1:_43.通过使用 new 和 delete 两个运算符进行的分配为 1 存储分配。(分数:2.00)填空项 1:_44.假定用户没有给一个名为 MyClass 的类定义析构函数,则系统为其定义的默认析构函数首部形式为 1。(分数:2.00)填空项 1:_45.参照函数模板的写法
12、,完成非模板函数的定义,语句为_。#includeiostream.h)#include(string.htemplate(class T)T min(T a,T b)return(ab?a:b);char*min(char*a,char*b)void main()double a1.23,b3.45;chars1”abcd”,s2”efg”;coutmin(a,b)rain(s1,s2)(endl;(分数:2.00)填空项 1:_46.下列程序的运行结果是_。#includeiostream.hclass Sampleint a;public:Sample(int aa0)aaa;Sampl
13、e()cout“Sample”a;class Derived:public Sampleint b;public:Derived(int aa=0,int bb=0):Sample(aa)b=bb;Derived()cout“Derived”b“;void main()Derived d1(9);(分数:2.00)填空项 1:_47.下列程序的输出结果是_。#includeiostreamusing namespace std;voidfun(inty=j;void assign(Sample sa);void Sample:assign(Sample p)if(this!=coutcsl.v
14、al“;TestClass cs2;TestClass cs3,cs4;coutcs2.valend1;(分数:2.00)A.03B.13C.14 D.24解析:解析 由主函数 main 入手,定义 TestClass 类的对象 cs1,执行 es1.va1,其中 va1 为静态变量,根据“tnt TestClass:val=0:”初始化,TestClass 中的 TestClass()val+;构造函数执行后,val 值为 1。主函数中接着定义对象 cs2,cs3,cs4。执行“coutcs2.va1end1”中的 val 值为4,所以输出为 14。3.下列各类函数中,不是类的成员函数的是(
15、 )。(分数:2.00)A.构造函数B.抽象类C.派生类 D.以上都不对解析:解析 构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数。而友元函数则是为了增加类的访问灵活行而允许其他类的成员函数成全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。4.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况
16、的,它们之间没有内在联系。5.有如下程序:#includeiostreamusing namespace std;class DAint k;public:DA(int x1):k(x)DA()coutk;int main()DAdDA(3),DA(3),DA(3);DA*pnew DA2;deletep;return();这个程序的输出结果是( )。(分数:2.00)A.111B.333 C.11333D.11133解析:解析 本题是两个循环语句和一个判断语句的嵌套。For 循环的作用是在 i 等于 10 的时候跳出循环本题的答案为 B。6.如果表达式-x/y 中的“-”和“/”是作为友元函
17、数重载的运算符,采用运算符函数用格式,该表达式还可表示为( )。(分数:2.00)A.operator/(x.operator-(),y);B.operator/(operator-(x),y); C.operator-().operator/(y);D.operator/(operator-(x);解析:解析 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且 c1、c2都是该类的对象,则 c1。operator+(c2)与 c1+c2 含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与 c1+c2 含义相同。同理,运算符“/”作为友元函数重
18、载,则(-x)/y 与表达式operator/(-x),y)相同。前缀运算符“-”作为友元函数重载,则-x 与 operator-(x)相同,所以组合起来是 operator/(operator-(x),y);,即 B 选项。7.将 E-R 图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系 C.键D.域解析:解析 将 E-R 图转换成指定 RDBMS 中的关系模式是数据库逻辑设计的主要工作。从 E-R 图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。8.下列是关于派生类声明的开始部分,其中正确的是( )。(分数:2.00)A.class v
19、irtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtualpublicA 解析:解析 声明派生类的一般形式:class 派生类名:继承方式基类名。其中继承方式包括public,private,pro tected。而 virtual 为 C+中的关键宇,所以选项 C 错。虚函数的使用方法是在基类用 virtual 声明成员函数为虚函数。9.有如下程序:#includeiostream.hUsing namespace std;Class Demopublic:Demo() cout
20、“default constructor/n”; Demo(const Demo int main()Demo a;d;cout“Calling usercode()/n”;dusercode(a);return 0;执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo A(Agender=ge;phone=ph;);下列类对象定义语句中错误的是( )。(分数:2.00)A.MyClass myObj;B.MyClass myObj(11,”13301111155”); C.MyClassmyObj(12,m);D.MyClassmyObj(12);解析:解析 本题考
21、查构造函数的应用。对象建立用初始化列表对数据成员进行时,列表中的参数类型要与构造函数中形参类型一致。B 选项中第二个参数为”13301111155”是字符串,而构造函数中第二个形参为 char 型,两者不一致造成错误。17.下列叙述中正确的是( )。(分数:2.00)A.在面向对象的程序设计中,各个对象之间具有密切的关系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小 D.上述 3 种说法都不对解析:解析 面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。18.设有定义
22、 charstr80以下不能将输人数据 nrst/nsecond/CR)读取到数组 str 的语句是( )。(分数:2.00)A.cin.get(str,strlen(str);B.cin.getline(str,strlen(str);C.cinstr;D.dn.read(str,strlen(str); 解析:解析 本题考查 cin 流对象的几种成员函数 get,getline,read 及流提取符的使用规则。19.最简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序 解析:解析 交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒
23、泡排序和快速排序。冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。20.类 MyClass 的定义如下:class MyClasspublic:MyClass()value=0;SetVariable(int i)value=iprivate:int value;则对下列语句序列正确的描述是( )。MyClass*P,my;p会调用两次类 MyClass 的构造函数C.对语句*P.SetVariabte(5)的调用是正确的D.语句 p-SetVariable(5)与语句 my.SetVariable(5)等价 解析:解析 语句 p=const A*ptr new
24、 A;则下列语句错误的是( )。(分数:2.00)A.ptr-a=100; B.ptr=C.ptr+;D.obj2=*ptr;解析:解析 本题考查 const 修饰符的作用。注意:const 位置不同,其修饰的部分也是不同的。本题中 const 修饰的是 ptr 所指的对象本身,所以,ptr 是可以重新指向新的对象,而 ptr-a 则无法被更新。31.下列关于构造函数和析构函数的描述,错误的是( )。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 解析:解析
25、 构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。32.如果类 A 被说明成类 B 的友元,则( )。(分数:2.00)A.类 A 的成员即类 B 的成员B.类 B 的成员即类 A 的成员C.类 A 的成员函数不得访问类 B 的成员D.类 B 不一定是类 A 的友元 解析:解析本题考查的是友元类的定义:类 A 为类 B 的友元类,则类 A 的所有成员函数都是类 B 的友元函数,但反之则不一定成立。33.在 C+语言中函数返回值的类型是由( )决定的。(分数:2.00)A.调用该函数时系统临时B.ret
26、urn 语句中的表达式类型C.定义该函数时所指定的函数类型 D.调用该函数时的主调函数类型解析:解析 函数类型决定了函数返回值的类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将 return 后面的表达式的类型,强制转换为该函数定义时指定的返回值类型。34.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:2.00)A.DB 包括 DBS 和 DBMSB.DBMS 包括 DB 和 DBSC.DBS 包括 DB 和 DBMS D.没有任何关系解析:解析 数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据
27、库管理员、硬件平台和软件平台 5 个部分组成,可见 DB 和 DBMS 都是 DBS 的组成部分。35.有下列二叉树,对此二叉树前序遍历的结果是( )。(分数:2.00)A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXYZD.ABDYECFXZ 解析:解析 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右于树。记住 3 种遍历的顺序:(1) 前序,访问根一按前序遍历左子树一按前序遍历右子树;(2) 中序,按中序遍历左子树一访问根一按中序遍历右子树:(3) 后序,按后序遍历左子树一按后序遍历右子树一访问
28、根。二、填空题(总题数:15,分数:30.00)36.软件工程研究的内容主要包括: 1 技术和软件工程管理。(分数:2.00)填空项 1:_ (正确答案:队列。)解析:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫做“队尾”,删除元素的一端叫做“队头”,先插入的元素先被删除,是按先进先出的原则组织数据的。37.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的算法的特性。(分数:2.00)填空项 1:_ (正确答案:类。)解析:解析 在面向对象方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。38.注释一般分为
29、序言性注释和 1 注释。(分数:2.00)填空项 1:_ (正确答案:空间。)解析:解析 衡量一个算法的复杂度有两个指标:时间复杂度和空间复杂度。前者用来衡量执行算法时所需要的计算工作量,而后者用来衡量执行算法所需要的存储空间。39.在链表的运算过程中,能够使空表与非空表的运算统一的结构是 1。(分数:2.00)填空项 1:_ (正确答案:相关文档。)解析:解析 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。40.数据库系统的主要特点为数据集成性、数据的高 1 和低冗余性、数据独立性和数据统一管理和控制。(分数:2.00)填空项 1:_ (正确答案:数
30、据库管理系统。)解析:解析 数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。41.执行”coutchar(A+2)end1;”语句后得到的输出结果为 1。(分数:2.00)填空项 1:_ (正确答案:拷贝构造。)解析:解析 本题考查的是拷贝构造函数的定义,它是一种特殊的成员函数,作用是使用一个已知的对象来初始化一个被创建的伺类的对象,定义格式是类名:拷贝构造函数名(类名乙引用名)。42._允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。(分数:2.00)填空项 1:_ (正确答案:纯虚函
31、数。解析 纯虚函数是在声明虚函数时被“初始化”为。的函数。纯虚函数没有函数体,只有函数名而不具备函数的功能,只是在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。)解析:43.通过使用 new 和 delete 两个运算符进行的分配为 1 存储分配。(分数:2.00)填空项 1:_ (正确答案:1。)解析:解析 本题考查的是运算符重载。当运算符重载为类的成员函数时,第一操作数就是对象本身,并不是显式的出现在参数表中。因此,对于一元运算符参数表是空的:对于二元运算符参数表中只有一个参数,它代表第二操作数。44.假定用户没有给一个名为 MyClass 的类定义析构函数,则系统为其定义的默认析构函数首部形式为 1。(分数:2.00)填空项 1:_ (正确答案:5。)解析:解析 因为 b 的值为 1,所以 by=j;void assign(Sample sa);void Sample:assign(Sample p)if(this!=&p)X=p.K;yp,y;(分数:2.00)填空项 1:_ (正确答案:3,3.14。)解析:解析 C+编译系统将根据实参表中的实参的类型来确定函数的形参列表中的类型。函数fun(3,6)返回的值为 3,函数调用 fun(3.14F,6.28F)返回的值为 3.14。