1、二级 C+笔试-193 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于类和对象的叙述中,错误的是( )。(分数:2.00)A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系2.数据处理的最小单位是( )。(分数:2.00)A.数据B.数据元素C.数据项D.数据结构3.下列关于模板的说法正确的是( )。(分数:2.00)A.模板的实参在任何时候都可以省略B.类模板与模板类所指的是同一概念C.类模板的参数必须是虚拟类型的D.类模板中的成员函数全部都是模板函数4.有如下程序
2、:#includeiostreamusing namespace std;class Bpublic:Virtual void show()cout“B”;class D:publicBpublic:void show()cout“D”;void funl(B*ptr)ptr-show();voidun2(BB.next=T2;public;dataClass(T1 aT2 b)ia;j=b;void show()couti“,”jn;int main()dataClassint,doubleobl10,0.23;dataClass(char,char*)ob2(X,”my data”);ob
3、1.show();ob2.show();return 0;请将程序补充完整,使程序在运行时输出:10,0.23X,my data(分数:2.00)填空项 1:_47.有如下程序:#includeiostreamusing namespace std;class Apublic:A()cout“A”;A()cout“A”;);class BA a;public,B()cout“B”;B()cout“B”;int main()B b;return 0;程序的输出结果是_。(分数:2.00)填空项 1:_48.请将下列栈类 Stack 补充完整。class Stackprivate:intpList
4、100/int 数组,用于存放栈的元素inttop;/栈顶元素(数组下标)public:Stack();top(0)void Push(const int class Apublic:A()coutA;class B:_public:B()coutB;);class C:_public:C()coutC;;class D:public B,public Cpublic:D()coutD;;void main()D obj;(分数:2.00)填空项 1:_二级 C+笔试-193 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列关于类和对象的叙
5、述中,错误的是( )。(分数:2.00)A.一个类只能有一个对象 B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系解析:解析 本题考查类和对象的概念。类是用户定义的一种类型,程序员可以使用这个类型来说明多个变量,即对象。2.数据处理的最小单位是( )。(分数:2.00)A.数据B.数据元素C.数据项 D.数据结构解析:解析 数据处理的最小单位是数据项。3.下列关于模板的说法正确的是( )。(分数:2.00)A.模板的实参在任何时候都可以省略B.类模板与模板类所指的是同一概念C.类模板的参数必须是虚拟类型的D.类模板中的成员函数全部都是模板函数 解析:
6、解析 在 C+中规定如果一个类被声明为类模板,那么其中的所有成员函数就都成为了模板函数。4.有如下程序:#includeiostreamusing namespace std;class Bpublic:Virtual void show()cout“B”;class D:publicBpublic:void show()cout“D”;void funl(B*ptr)ptr-show();voidun2(BB.next=在选项 D 中,用*运算符取出结构体变量,并且保存的就是 b 的地址,所以正确。20.下列有关模板的叙述中,正确的是( )。(分数:2.00)A.函数模板不能含有常规形参B.
7、函数模板的一个实例就是一个函数定义 C.类模板的成员函数不能是模板函数D.用类模板定义对象时,绝对不能省略模板实参解析:解析 本题考查的是模板的概念。函数模板可以含有常规形参,函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。21.数据库设计包括两个方面的设计内容,它们是( )。(分数:2.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析 数据库设计包括数据库概念设计和数据库
8、逻辑设计两个方面的内容。22.以三级模式为框架形成的 3 种数据库中,真实存在于计算机外存的数据库是( )。(分数:2.00)A.概念数据库B.用户数据库C.物理数据库 D.逻辑数据库解析:解析 以概念模式为框架所组成的数据叫概念数据库,以外模式为框架所组成的数据库叫用户数据库;以内模式为框架所组成的数据库叫物理数据库。这 3 种数据库只有物理数据库是真实存在于计算机外存中。23.若已定义;inta=0,1,2,3,4,5,6,7,8,9,*p=a,i;其中 0i=9,则对 a 数组元素不正确的引用是( )。(分数:2.00)A.ap-aB.x(选项 B 中,signed short int
9、的省略形式就是 short,正确 ounsigned short int 的省略形式是unsigned short;short int 的省略形式是 short。故本题应该选择 B。25.下列程序中横线处应填入的语句是( )。Class Basepublic:roid fun()cout“Base of fun”endl;);class Derived:public Basevoid fun()/显示基类的成员函数 funcout“Derived Of fun”endl;(分数:2.00)A.fun();B.Base.fun();C.Base:fun(); D.Base-fun();解析:解析
10、 如果在于类,中要访问父类的函数应用”:”运算符。26.已知 Value 是一个类,Value 是 Value 的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是( )。(分数:2.00)A.Value operator+(Value v,int i);B.Value operator+(Value vvalue,int i); C.Value operator+(Value vint i0);D.Value operator+(Value v=value,int i=0);解析:解析 本题考查的是 for 循环语句。执行循环语句,变量 i 从 50 递减,每次减 2,所以循环会
11、执行 25 次,输出 25 个*。27.有以下程序:#includeiostreamusing namespace std;Class sampleprivate: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.n
12、10B.n5C.n20D.n=15 解析:解析 本题考查 this 指针的使用类成员函数 add 中通过 this 指针实现私有数据成员 n 的赋值。28.下列不是软件工程基本目标的是( )。(分数:2.00)A.付出较低的维护费用B.达到要求的功能C.不管时间限制,只要最终把用户要求的产品交出来 D.产品的性能比较好解析:解析 软件工程的基本目标是:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移值,需要较低的维护费用;能按时完成开发,及时交付使用。29.在函数中,可以用 auto、extern、register 和 static 这四个关键字中的一个来说明变量的
13、存储类型,如果不说明存储类型,则默认的存储类型是( )。(分数:2.00)A.auto B.externC.registerD.static解析:解析 变量在使用之前其数据类型必须加以说明,而存储类型则可缺省说明或显式说明。显式说明指直接在变量说明前加上存储类型标志,如 auto,register,static,extern 等。关键宇 auto 通常省略。30.有以下程序:#includeiostreamusing namespace std;class Complexpublic:Complex(dOuble r=0,dOuble i=0):re(r),im(i)doublereal()c
14、onstreturn re;doubleimag()constreturn im;Complex operator+(Complex c)constreturn Complex(re+c.re,im+c.im);private:double re,im;int main()Complex aComplex(1,1)+Complex(5);couta.real()+a.imag()iendl;return 0;程序执行后的输出结果是( )。(分数:2.00)A.6+6iB.6+1i C.1+6iD.1+1i解析:解析 运算符”+”在类 Complex 中作为成员函数重载,实现两个对象的数据成员的
15、相加。所以main 函数中语句”ComplexaComplex(1,1)+Complex(5);”的作用相当于”Complexa(1+5,1);”即对象 a 的数据成员 re 的值为 6,imag 的值为 l,所以输出为 6+1i。31.对下列二叉树(分数:2.00)A. B.C.D.解析:解析 二叉树的遍历有 3 种:前序、中序和后序。中序遍历首先遍历左于树或左子结点,然后访问根结点,最后遁历右子树或右子结点。分析本题二又树,对其进行中序遍历,结果为 ACBDFEG。32.函数定义为 Fun(int 数据流:可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出,数据存储:处理过程中存
16、取的数据,通常是手工凭证、手工文档或计算机文件,处理过程。40.在岂个容量为 25 的循环队列中,若头指针 front=9,尾指针 Year16,则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_ (正确答案:7。)解析:解析 设循环队列的容量为 n。如果 rearfront,则循环队列中的元素个数为 rear-front;如果 rearfront,则循环队列中的元素个数为 n+(rear-front)。本题中,front=9,rear16,即rearfront,因此,循环队列中的元素个数为 rear-front=16-9=7。41.如果使用数组名称为函数参数,形实结合时,传递的
17、是 1。(分数:2.00)填空项 1:_ (正确答案:地址。)解析:解析 本题考查的是函数参数的传递方式。函数参数的传递方式分为传值和传地址两种。使用数组名作为函数参数,因为数组名代表的是数组的首地址,所以传递的是地址。42.如果要把返回值为 void 的函数 A 声明为类 B 的友元函数,则应在类 B 的定义中加入的语句是 1。(分数:2.00)填空项 1:_ (正确答案:friendvoidA-|_|-;。)解析:解析 C+中类的友元函数在声明时应在该函数前面加上关键字 friend,同样如果要声明一个类为另一个类的友元类也要在前面类名前加上 friend。43.与成员访问表达式 p-na
18、me 等价的表达式是 1。(分数:2.00)填空项 1:_ (正确答案:(*p).name。)解析:解析 一个基类型为类类型的指针称为对象指针。对于指向对象的指针,下面两种表示方式是等价的:对象指针名-成员名;(*对象指针名),成员名。44.已知有函数 f 的定义如下:int f()static int s0;s+=2;return s;则在某程序中第 2 次执行函数调用语句“f();”时,函数 f 的返回值是_。(分数:2.00)填空项 1:_ (正确答案:4。)解析:解析 本题考查的是内部静态变量。当函数执行完返回调用点,该变量并不檄消,其值将继续保留,下次进入该函数时,其值仍然存在。45
19、.如下程序声明了一个电话号码类 PhoneNumber,重载了流插入运算符,以便于电话号码的输出。请将程序补充完整。#includeiostream#includeiomanip#includestringusing namespace std;class PhoneMunberpublic:void setNumber(string number)this-numbernumber;/重载流插入操作符friend_(ostream T2;public;dataClass(T1 aT2 b)ia;j=b;void show()couti“,”jn;int main()dataClassint,
20、doubleobl10,0.23;dataClass(char,char*)ob2(X,”my data”);ob1.show();ob2.show();return 0;请将程序补充完整,使程序在运行时输出:10,0.23X,my data(分数:2.00)填空项 1:_ (正确答案:templateclass T1,class T2。)解析:解析 本题是对模板的考查。由 T1 i;T2 j;语句知,应该在 i,j 对象声明为 T1 和 T2 类型前,定义模板 T1 和 T2。根据题目中给出的“模板类 dataClass,使用 C+的关键字“template”来声明 T1和 T2 的定义。4
21、7.有如下程序:#includeiostreamusing namespace std;class Apublic:A()cout“A”;A()cout“A”;);class BA a;public,B()cout“B”;B()cout“B”;int main()B b;return 0;程序的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:ABBA。)解析:解析 本题考查派生类的构造函数与析构函数的调用。建立一个派生类对象时,派生类的构造函数的调用顺序如下:基类的构造函数、成员对象的构造函数,派生类自身的构造函数。析构函数的调用顺序与构造函数严格相反。48.请将下列栈类 Stac
22、k 补充完整。class Stackprivate:intpList100/int 数组,用于存放栈的元素inttop;/栈顶元素(数组下标)public:Stack();top(0)void Push(const int class Apublic:A()coutA;class B:_public:B()coutB;);class C:_public:C()coutC;;class D:public B,public Cpublic:D()coutD;;void main()D obj;(分数:2.00)填空项 1:_ (正确答案:virtual publicA virtual public A。)解析:解析 本题考查虚基类的应用。通过虚基类所派生的类,在所产生的对象中,只包含了一个和其他类共享的基础对象,也就是说,从同一个基类中以虚拟方式派生的所有类,在它们所产生的对象里,不会有一份基础对象,而只是在内存里保留一份基础对象,而派生类中只保留指向此基础对象的指针,这样就不会同时有两份基类对象的情形发生。题中程序最后字符 A 只输出了一次,所以类 A 必须为类 B 和类 C的虚基类。