1、二级 C+-84 及答案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:20,分数:37.00)1.有以下程序: #include iostream using namespace std; class sample pnvate: int x; static int y; public: sample(int a); static void print(sample s); ; sample:sample(int a) x=a; y+=x; void sample:print(sample s) cout“x=“s.x“,y=“yendl; int sample:y=0;
2、int main() sample s1(10); sample s2(20); sample:print(s2); return 0; 程序运行后的输出结果是 _ 。(分数:2.00)A.x=10,y=20B.x=20,y=30C.x=30,y=20D.x=30,y=302.关系数据模型通常由三部分组成,它们是 _ 。(分数:2.00)A.数据结构、数据通信、关系操作B.数据结构、关系操作、完整性约束C.数据通信、关系操作、完整性约束D.数据结构、数据通信、完整性约束3.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是(分数:2.00)A.黑箱测试法B.白箱测试
3、法C.错误推测法D.安装测试法4.以下程序的输出是 _ 。 struct st int x;int *y; *p; int dt4=10,20,30,40; struct st aa4=50, class TestClass public; TestClass ()cout“BASE:; ; class TestClass1:public TestClass public: TestClass 1 ()cout“DERIVED“; ; int main()TestClass1 x;return 0; 执行后的输出结果是 _ 。(分数:2.00)A.BASEB.DERIVEDC.BASEDERI
4、VEDD.DERIVEDBASE7.有以下程序: #includeiostream using namespace std; class A public: A()cout“A“;) ; classBpublic:B()cout“B“; classC:public A B b: public: C()(cout“C“;) ; int main() C obj; return 0; 执行后的输出结果是_。(分数:2.50)A.CBAB.BACC.ACBD.ABC8.有如下两个类定义: class AA); class l3B AA v1,*v2; BB v3; int*v4; ; 其中有一个成员
5、变量的定义是错误的,这个变量是_。(分数:2.50)Av1Bv2Cv3Dv49.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是 _(分数:1.00)A.一元运算符B.二元运算符C.选项 A 和选项 B 都可能D.重载错误10.下列选项中,与实现运行时多态性无关的是(分数:2.00)A.重载函数B.虚函数C.指针D.引用11.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析12.关于 this 指针的说明不正确的是(分数:1.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,
6、但不能修改 this 指针C.静态成员函数中没有 this 指针D.this 指针可以被赋值13.串的长度是 _ 。(分数:2.00)A.串中不同字符的个数B.串中不同字母的个数C.串中所含字符的个数且字符个数大于零D.串中所含字符的个数14.有如下程序段: int i=1; while(1) i+; if(i= =10) break; if(i%2=0) cout“*“; 执行这个程序段输出字符*的个数是(分数:2.00)A.10B.3C.4D.515.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是 _ 。(分数:2.00)A.int operator-(FunNumber
7、);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber,FunNumber);16.以下程序的运行结是_。 #includeiostream using namespace std ; class Base char c; public : Base( char c0):c( c0) Base( )coutc; ; class Derived:public Base char c: public: Derived( char c0): Base(c0+1) ,c(c0) Derived()co
8、ute; ; int main() Derived obj(“x“); return 0: A) xy B) yx c)x D) y (分数:2.00)A.B.C.D.17.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是_。(分数:2.00)A.setprecisionB.setwC.setfillD.showpoint18.下列程序中横线处应填入的语句是 _ 。 Class Base public: roid fun()cout“Base of fun”endl;) ; class Derived:public Base void fun() /显示基类的成员函数 fun cout
9、“Derived Of fun”endl; ;(分数:2.00)A.fun();B.Base.fun();C.Base:fun();D.Base-fun();19.下面程序的输出结果是 _ 。 #includeiostream.h Class example int a; public: example(int B.a=b+; void print()aa+1 couta“; void print()constcouta“; ; void main() example x(3); Const example y(2); x.print(); y.print(); (分数:2.00)A.2 2B
10、.4 3C.4 2D.3 220.下面关于 this 指针的说法中错误的是 _ 。(分数:2.00)A.this 指针是一种隐含指针,存在于每个类的非静态成员函数中B.它是成员函数所属对象的指针C.通过 this.成员变量的形式可以访问类中的数据成员D.成员函数访问类中的数据成员格式可写成:this-成员变量二、填空题(总题数:18,分数:28.00)21.C+中多态性分为编译时的多态性和运行时的多态性,其中运行时的多态性时通过 1 实现的。 (分数:2.00)22.fun()函数的功能是:首先对 a 所指的 N 行 N 列的矩阵,找出各行中的最大的数,再求这 N 个最大值中的最小的那个数作为
11、函数返回值。请填空完成此程序。 #define N 100 int fun(int (*A) N) int row,col,max,min; for(row=0;row for(max=arow0,col=1;col if( )max=arowcol;if(row=0)min=max;else if( )min=max;return min;arowcolmax 或 arowcol=max 或 maxarowcol或 max=arowcolmaxmin 或 max=min 或 minmax 或 min=max。解析 由程序可知,第 2 个 for 循环是用宋找出某一列中的最大值。由于 if 选
12、择后面的语句是把数组元素值存入变量 max 中,说明此时的数组元素比开始设定的 max 值要大,所以 if 中的条件表达式为:arowcolmax。第 1 个 for 循环用于实现对矩阵的行扫描,由于 else if 后面的执行语句是把 max 赋给min,说明此时 max 比开始设定的 min 还小,所以 else if 中的条件表达式为:maxmin 或 max=min。(分数:1.00)23.软件危机出现于 60 年代末,为了解决软件危机,入们提出了 _ 1_ 的原理来设计软件,这就是软件工程诞生的基础。 (分数:1.00)24.下列程序的运行结果是 1。 #includeiostrea
13、m.h) class test private: int num; public: test(); int TEST()return num+100; test(); ; test:test()num0; test:test()cout“Destructor is active“endl; void main() test x3; coutx1.TEST()end1; (分数:2.00)25.虚函数必须是类的 1。 (分数:2.00)26.用链表表示线性表的突出优点是 1。 (分数:2.00)27.请在下列程序中的横线处填写正确的语句。 #includeiostream using names
14、pace std; class Base public: void fun()cout“Base fun“endl; ; class Derivde:public Base public: void fun() 1/调用基类的函数 fun() cout“Derived fun“endl; ; (分数:2.00)28.若有定义语句:int* a,b;,则变量 b 的数据类型是 _ 1_ 。 (分数:1.00)29.重载加法运算符“+”,其函数名是 1。 (分数:2.00)30.用递归思想写出的程序往往十分简洁、易懂,但执行时需要的 1 很多。 (分数:2.00)31.重载的流运算符函数应该被定义
15、为类的 1 函数。 (分数:2.00)32.如下程序声明了一个电话号码类 PhoneNumber,重载了流插入运算符,以便于电话号码的输出。请将程序补充完整。 #includeiostream #includeiomanip #includestring using namespace std; class PhoneNumber public: void setNumber(string number)this-number=number; friend 1(ostream class Base int a; public: Base(int x) a=x; void show() cout
16、a; class Derived: public Base int b; public: Defived(int i):Base(i+ 1 ),b(i) void show() coutb; ; int main() Base b(5),*pb; Derived d(1); pb= pb-show(); return 0; 运行后的打印结果是 1。 (分数:2.00)34.长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 1。 (分数:1.00)35.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 1。 (分数:1.00)3
17、6.C+语言中关键字运算符有 new,delete 和 1。 (分数:1.00)37.一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的 _ 1_ 。 (分数:1.00)38.利用成员函数对双目运算符重载,其左操作数为 1,右操作数为 2。 (分数:1.00)二级 C+-84 答案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:20,分数:37.00)1.有以下程序: #include iostream using namespace std; class sample pnvate: int x; static int y; public: samp
18、le(int a); static void print(sample s); ; sample:sample(int a) x=a; y+=x; void sample:print(sample s) cout“x=“s.x“,y=“yendl; int sample:y=0; int main() sample s1(10); sample s2(20); sample:print(s2); return 0; 程序运行后的输出结果是 _ 。(分数:2.00)A.x=10,y=20B.x=20,y=30 C.x=30,y=20D.x=30,y=30解析:2.关系数据模型通常由三部分组成,它
19、们是 _ 。(分数:2.00)A.数据结构、数据通信、关系操作B.数据结构、关系操作、完整性约束 C.数据通信、关系操作、完整性约束D.数据结构、数据通信、完整性约束解析:3.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是(分数:2.00)A.黑箱测试法 B.白箱测试法C.错误推测法D.安装测试法解析:解析 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据功能导出测试用例。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试也称为逻辑覆盖测试,故选项 B 不正确;错误推测法只是黑箱测试所使用的一种具体的方法,故选项 C 不正确;安装测试是测试
20、层次中的一种,它属于高级测试,故选项 D 不正确。4.以下程序的输出是 _ 。 struct st int x;int *y; *p; int dt4=10,20,30,40; struct st aa4=50, class TestClass public; TestClass ()cout“BASE:; ; class TestClass1:public TestClass public: TestClass 1 ()cout“DERIVED“; ; int main()TestClass1 x;return 0; 执行后的输出结果是 _ 。(分数:2.00)A.BASEB.DERIVED
21、C.BASEDERIVEDD.DERIVEDBASE 解析:解析 程序中的 TestClassl 为 TestClass 的派生类,从程序中的 main 函数入手,定义了TestClass1 对象 x。调用析构函数的顺序,先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对予对象进行清理,最后调用基类的析构函数,对基类进行清理。这里派生类中析构函数输出 DERIVED,基类析构函数输出 BASE。7.有以下程序: #includeiostream using namespace std; class A public: A()cout“A“;) ; class
22、Bpublic:B()cout“B“; classC:public A B b: public: C()(cout“C“;) ; int main() C obj; return 0; 执行后的输出结果是_。(分数:2.50)A.CBAB.BACC.ACBD.ABC 解析:解析 本题考查的是类的继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化,然后对派生类中的新增成员初始化。8.有如下两个类定义: class AA); class l3B AA v1,*v2; BB v3; int*v4; ; 其中有一个成员变量的定义是错误的,这个变量是_。(分数:2.50)Av
23、1Bv2Cv3 Dv4解析:解析 本题主要考查类对象的定义,类的对象一般放在类结构体外或在主函数中定义,而不能放在类定义的结构体中,但自身类的指针可以,本题 BB v3 不能被定义于类体内。9.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是 _(分数:1.00)A.一元运算符B.二元运算符C.选项 A 和选项 B 都可能D.重载错误 解析:10.下列选项中,与实现运行时多态性无关的是(分数:2.00)A.重载函数 B.虚函数C.指针D.引用解析:解析 动态联编是指在程序运行时才将源程序经过编译连接成为可执行文件的过程。动态联编所支持的多态性被称为运行时多态性,简称为动态多
24、态性。所有的编译都是在运行时完成的,只有重载函数不是,重载函数属于静态联编。11.下列不属于软件工程过程的基本活动的是 _ 。(分数:1.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析 解析:解析 软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。它的基本活动包括软件规格说明、软件开发、软件确认、软件演进。12.关于 this 指针的说明不正确的是(分数:1.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,但不能修改 this 指针C.静态成员函数
25、中没有 this 指针D.this 指针可以被赋值 解析:解析 C+的 this 指针是系统默认产生的一个指针,它是 const 的,所以是不能够被改变,不能够被赋值的。13.串的长度是 _ 。(分数:2.00)A.串中不同字符的个数B.串中不同字母的个数C.串中所含字符的个数且字符个数大于零D.串中所含字符的个数 解析:14.有如下程序段: int i=1; while(1) i+; if(i= =10) break; if(i%2=0) cout“*“; 执行这个程序段输出字符*的个数是(分数:2.00)A.10B.3C.4 D.5解析:解析 本题主要考查 while 的作用,只有 i 为
26、偶数时才输出“*”,而本题只有 2,4,6,8 时才满足条件,而当 i 为 10 时程序结束,即只有 4 个“*”被输出。15.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是 _ 。(分数:2.00)A.int operator-(FunNumber);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber,FunNumber); 解析:解析 本题考查的知识点是:运算符“-”的重载。“-”运算符有一元(取负)和二元(减法)两种形式,且均可重载为成员函数和非成员函数。运算符重载为成
27、员函数时,形参个数一般为运算符元数减1,因为此成员函数所属的对象可成为运算符的一个运算分量。重载为非成员函数时,形参个数一般和运算符元数相等。所以“-”运算符重载为成员函数时,参数个数可以是 0 个和 1 个,而重载为非成员函数时,参数个数可以是 1 个或 2 个。16.以下程序的运行结是_。 #includeiostream using namespace std ; class Base char c; public : Base( char c0):c( c0) Base( )coutc; ; class Derived:public Base char c: public: Deriv
28、ed( char c0): Base(c0+1) ,c(c0) Derived()coute; ; int main() Derived obj(“x“); return 0: A) xy B) yx c)x D) y (分数:2.00)A. B.C.D.解析:解析 主函数结束时,派生类对象 obj 将被销毁,先调用派生类的析构函数输出 x,然后调用基类的析构函数输出 y。17.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是_。(分数:2.00)A.setprecision B.setwC.setfillD.showpoint解析:解析 iomanip 中定义的操纵符包括:setfi
29、ll(ch)用 ch 填充空白、setprecision(n)将浮点精度置为 n、setw(w)、读写 w 个字符的值 showpoint 设置小数点。18.下列程序中横线处应填入的语句是 _ 。 Class Base public: roid fun()cout“Base of fun”endl;) ; class Derived:public Base void fun() /显示基类的成员函数 fun cout“Derived Of fun”endl; ;(分数:2.00)A.fun();B.Base.fun();C.Base:fun(); D.Base-fun();解析:解析 如果在于
30、类,中要访问父类的函数应用”:”运算符。19.下面程序的输出结果是 _ 。 #includeiostream.h Class example int a; public: example(int B.a=b+; void print()aa+1 couta“; void print()constcouta“; ; void main() example x(3); Const example y(2); x.print(); y.print(); (分数:2.00)A.2 2B.4 3C.4 2 D.3 2解析:解析 “+”是右结合的,所以先赋值为 3,最后输出 3+1;常成员函数只有常对象才
31、能调用,所以输出 2。20.下面关于 this 指针的说法中错误的是 _ 。(分数:2.00)A.this 指针是一种隐含指针,存在于每个类的非静态成员函数中B.它是成员函数所属对象的指针C.通过 this.成员变量的形式可以访问类中的数据成员 D.成员函数访问类中的数据成员格式可写成:this-成员变量解析:解析 this 指针是一个隐含指针,它隐含于每个类的非静态成员函数中。this 指针是成员函数所属的对象指针,它指向当前类的对象地址。通过 this 指针访问当前对象成员有两种方式:(*this).成员,this-成员。二、填空题(总题数:18,分数:28.00)21.C+中多态性分为编
32、译时的多态性和运行时的多态性,其中运行时的多态性时通过 1 实现的。 (分数:2.00)解析:虚函数解析 多态性分为编译时多态性和运行时多态。编译时多态性是通过函数重载实现的,运行时多态性是通过虚函数来实现的。22.fun()函数的功能是:首先对 a 所指的 N 行 N 列的矩阵,找出各行中的最大的数,再求这 N 个最大值中的最小的那个数作为函数返回值。请填空完成此程序。 #define N 100 int fun(int (*A) N) int row,col,max,min; for(row=0;row for(max=arow0,col=1;col if( )max=arowcol;if
33、(row=0)min=max;else if( )min=max;return min;arowcolmax 或 arowcol=max 或 maxarowcol或 max=arowcolmaxmin 或 max=min 或 minmax 或 min=max。解析 由程序可知,第 2 个 for 循环是用宋找出某一列中的最大值。由于 if 选择后面的语句是把数组元素值存入变量 max 中,说明此时的数组元素比开始设定的 max 值要大,所以 if 中的条件表达式为:arowcolmax。第 1 个 for 循环用于实现对矩阵的行扫描,由于 else if 后面的执行语句是把 max 赋给 mi
34、n,说明此时 max 比开始设定的 min 还小,所以 else if 中的条件表达式为:maxmin 或max=min。(分数:1.00)解析:arowcolmax 或 arowcol=max 或 maxarowcol或 max=arowcol maxmin 或 max=min 或 minmax 或 min=max。 解析 由程序可知,第 2 个 for 循环是用宋找出某一列中的最大值。由于 if 选择后面的语句是把数组元素值存入变量 max 中,说明此时的数组元素比开始设定的 max 值要大,所以 if 中的条件表达式为:arowcolmax。第 1 个 for 循环用于实现对矩阵的行扫描
35、,由于 else if 后面的执行语句是把 max 赋给 min,说明此时 max 比开始设定的 min 还小,所以 else if 中的条件表达式为:maxmin 或 max=min。23.软件危机出现于 60 年代末,为了解决软件危机,入们提出了 _ 1_ 的原理来设计软件,这就是软件工程诞生的基础。 (分数:1.00)解析:软件工程学24.下列程序的运行结果是 1。 #includeiostream.h) class test private: int num; public: test(); int TEST()return num+100; test(); ; test:test()
36、num0; test:test()cout“Destructor is active“endl; void main() test x3; coutx1.TEST()end1; (分数:2.00)解析:100 Destructor is active Destructor is active Destructor is active。 解析 本题考查考生基本的类的定义,构造函数以及对象数组的概念。25.虚函数必须是类的 1。 (分数:2.00)解析:成员函数。解析 虚函数是允许在派生类中重新定义与基类同名的函数,并且通过基类指针成引用来访问基类和派生类中的同名函数在基类中用 virtual 声
37、明成员函数为虚函数,所以虚函数是类的成员函数。26.用链表表示线性表的突出优点是 1。 (分数:2.00)解析:便于插入和删除操作解析 为了克服顺序表中插入和删除时需要移动大量数据元素的缺点,引入了链式存储结构。链表表示线性表的突出优点是插入和删除操作方便,不必移动数据元素,执行效率高。27.请在下列程序中的横线处填写正确的语句。 #includeiostream using namespace std; class Base public: void fun()cout“Base fun“endl; ; class Derivde:public Base public: void fun()
38、 1/调用基类的函数 fun() cout“Derived fun“endl; ; (分数:2.00)解析:Base:fun()解析 此题考查的是派生类对基类成员的访问。本题中派生类 Derived 覆盖了基类Base 中的 fun(),如果需要调用基类中的 fun(),则需要使用域运算符“:”。故应填写 Base:fun()。28.若有定义语句:int* a,b;,则变量 b 的数据类型是 _ 1_ 。 (分数:1.00)解析:int 或整型解析 本题考查的是指针的声明语句。在一个声明语句中,如果变量名称前面有*号,则就会使该变量成为一个指针变量。而题目中的变量 b 之前没有*号,所以变量
39、b 就是一般的 int 型变量,而不是指针变量。故应该填 int 或整型。29.重载加法运算符“+”,其函数名是 1。 (分数:2.00)解析:+解析 运算符重载,其函数名不变,只有其参数,返回值发生改变。30.用递归思想写出的程序往往十分简洁、易懂,但执行时需要的 1 很多。 (分数:2.00)解析:栈空间解析 用递归思想写出的程序往往简洁、易懂,但因为系统处理递归函数时都是通过压栈/退栈的方式实现的,因此需要较多的栈空间。31.重载的流运算符函数应该被定义为类的 1 函数。 (分数:2.00)解析:友元解析 C+流的输入运算符“”和输出运算符“”只能作为非成员函数重载,即应重载为友元函数。
40、32.如下程序声明了一个电话号码类 PhoneNumber,重载了流插入运算符,以便于电话号码的输出。请将程序补充完整。 #includeiostream #includeiomanip #includestring using namespace std; class PhoneNumber public: void setNumber(string number)this-number=number; friend 1(ostream class Base int a; public: Base(int x) a=x; void show() couta; class Derived: p
41、ublic Base int b; public: Defived(int i):Base(i+ 1 ),b(i) void show() coutb; ; int main() Base b(5),*pb; Derived d(1); pb= pb-show(); return 0; 运行后的打印结果是 1。 (分数:2.00)解析:234.长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 1。 (分数:1.00)解析:n/235.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 1。 (分数:1.00)解析:关系解析 在关
42、系模型中,把数据看成一个二维表,每一个二维表称为一个关系,表中的每一列称为一个属性,相当于记录中的个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。36.C+语言中关键字运算符有 new,delete 和 1。 (分数:1.00)解析:sizeof解析 C+语言中关键字运算符有 3 个分别 new,delete 和 sizeof。new 是申请内存, delete 是释放内存,sizeof 是求字节数。37.一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的 _ 1_ 。 (分数:1.00)解析:可重用性解析 本题考查了继承的优点:相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余,提高软件的叫重用性。38.利用成员函数对双目运算符重载,其左操作数为 1,右操作数为 2。 (分数:1.00)解析:this 指针 成员函数参数