1、二级 C+机试-33 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test2_1,此工程包含一个源程序文件 test2_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:调用基类 BASE 的构造函数:1调用基类 BASE 的构造函数:2调用派生类 A 的构造函数:3调用派生类 A 的析构函数调用基类 BASE 的析构函数调用基类 BASE 的析构函数源程序文什 test2_1.cpp 清单如下:#includeiostream.hclass BASEpublic:BASE
2、(int i)cout“调用基类 BASE 的构造函数:“iendl;BASE()cout“调用基类 BASE 的析构函数“endl;)* found *class A:public BASEpublic:* found *A(int a,int b):i(a),b(b)cout“调用派生类 A 的构造函数:“a+bendl;A()cout“调用派生类 A 的析构函数“endl;)private:BASE b;void main()*found*BASE obj(1,2);(分数:33.00)填空项 1:_二、2简单应用题(总题数:1,分数:33.00)2.请编写两个函数 void sort(
3、int sort(a,b);sort(a,b,C);(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 test2_3。此工程包含一个 test2_3.cpp,其中定义了类 Stud,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)定义类的公有数据成员 no,name10,其中 no 是 int 型的数据,name10是字符型一维数组。请在注释“/*1*”之后添加适当的语句。(2)完成函数 set 的定义,分别将参数 n,na 的值赋给数据成员 no,name。注意:请使用 this 指针完成对 no 的赋值,使用字符
4、串函数实现对 name 和 cname 的赋值。请在注释“/*2*”之后添加适当的语句。(3)完成类的成员函数 disp 的定义,使其按 no,deg,name 和 cname 的顺序输出类的数据成员的值,中间使用跳格符分隔,请在注释“/*3*”之后添加适当的语句。输出结果如下:1 李华 95 9907012 王东 83 990702注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序文件 test2_3cpp 清单如下:#includeiostreamh#includestringhclass Studpublic:/ * 1 *int deg;char cname10;Stu
5、d()void set(int n,char na,int d,char cn)/ * 2 *deg=d;strcpy(cname,cn);void disp()/ * 3 *;void main()Stud obj2;obj0set(1,“李华“,95,“990701“);obj1set(2,“王东“,83,“990702“);obj0disp();obj1disp();(分数:34.00)_二级 C+机试-33 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test2_1,此工程包含一个源程序文件
6、test2_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:调用基类 BASE 的构造函数:1调用基类 BASE 的构造函数:2调用派生类 A 的构造函数:3调用派生类 A 的析构函数调用基类 BASE 的析构函数调用基类 BASE 的析构函数源程序文什 test2_1.cpp 清单如下:#includeiostream.hclass BASEpublic:BASE(int i)cout“调用基类 BASE 的构造函数:“iendl;BASE()cout“调用基类 BASE 的析构函数“endl;)* found *class A:public BASEpublic
7、:* found *A(int a,int b):i(a),b(b)cout“调用派生类 A 的构造函数:“a+bendl;A()cout“调用派生类 A 的析构函数“endl;)private:BASE b;void main()*found*BASE obj(1,2);(分数:33.00)填空项 1:_ (正确答案:(1)错误:类 BASE 的定义缺少“;”正确:;(2)错误:A(int a,int b):i(a),b(b)正确:A(inta,int b):BASE(a),b(b)(3)错误:BASE obj(1,2);正确:A obj(1,2);)解析:解析(1)主要考查考生对于类的定义
8、的掌握,类定义结束后大括号外面不能缺少分号;(2)主要考查考生对于派生类构造函数的掌握,该函数应该实现将参数传递给基类的功能,即派生类的构造函数应使用参数列表的形式将基类的数据成员初始化,初始化的时候直接使用基类的名称(BASE)而不是基类中变量的名称(i);(3)主要考查考生对于基类和派生类函数调用关系的掌握,要调用派生类的构造函数必须使用派生类的对象,构造函数只有在该类的对象被使用的时候才会被调用。二、2简单应用题(总题数:1,分数:33.00)2.请编写两个函数 void sort(int sort(a,b);sort(a,b,C);(分数:33.00)_正确答案:(1)void sor
9、t(int if (xy)t=X;x=y;y=t;coutx/tyendl;(2)void sort(int x,int y,iht z)int t;if(xy) t=x; x=y; y=t;)if(xz) t=x; x=Z; z=t;)if(yz) t=y; y=z; z=t;)coutx/ty/tzendl;)解析:解析 本题考查考生对函数重载与引用调用的掌握。这里的重载是使用不同的参数个数,引用调用的形参使用char cname10;Stud()void set(int n,char na,int d,char cn)/ * 2 *deg=d;strcpy(cname,cn);void
10、disp()/ * 3 *;void main()Stud obj2;obj0set(1,“李华“,95,“990701“);obj1set(2,“王东“,83,“990702“);obj0disp();obj1disp();(分数:34.00)_正确答案:(1)int no;char name10;(2)this-no=n;strcpy(name,na);(3)coutno“/t“name“/t“deg“/r“cnameendl;)解析:解析 主要考查考生对于对象定义、this 指针和字符串函数的使用。this 指针是指向正在被某个成员函数操作的对象的指针,需要使用-调用其他的函数,strcpy 是字符串复制函数,作用是将第二个参数赋值给第一个参数。