1、二级 C+-11-1 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC+6.0 打开 下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果: (4,5) 7,8 (4,8) 注意:错误的语句在/*error*的下面,修改该语句即可。 试题程序: #includeiostream.h class TC0 public: TC0(int i,int j) x=i; y=j; /*error* virtual void move(int a;int h) x+=a; y+=b; void
2、print() court“(“x:,:y“)“endl; public: int X,Y; ; class TC1:public TC0 public: /*error* TC1(int i,int j,int k):(i,j) m=k; n=l; void print() coutm“,“nendl; void func() move(3,5); void display() /*error* print(); private: int m,n; ; void main() TC0 obj(4,5); obj.print(); TC1 obj1(1,3,7,8); obj1.func();
3、 obj1.print(); obj1.display(); (分数:30.00)_二、简单应用题(总题数:1,分数:30.00)2.使用 VC+6.0 打开 下的源程序文件 2.cpp。阅读下列函数说明和代码。 函数 sort(int int y=13; int z=-3; sort(x,y,z); coutx“,“y“,“zendl; return 0; (分数:30.00)_三、综合应用题(总题数:1,分数:40.00)3.使用 VC+6.0 打开 下的源程序文件 3.cpp,其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义类 CPoint 的带有两个参数的构造函
4、数,两个变量为 x、y,都为 int 型,且缺省值为 0。请在注释1 后添加适当的语句。 (2)完成类 CReetangle 的构造函数,给 point1 和 point2 赋值。请在注释 2 后添加适当的语句。 (3)完成类 CRectangle 的函数 GetArea,用来计算矩形面积。请在注释 3 后添加适当的语句。 (4)定义 CRectangle 类,它拥有两个私有对象 point1 和 point2,类型为 Point,请在注释 4 后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 试题程序: #includeiostream.h #includec
5、math class CPoint public: /*1* x=i; y=j; int GetX() return x; int GetY() return y; private: int x,y; ; class CRectangle public: /*2* int GetArea() /*3* int height=point1.GetY()point2.GetY(); return(width * height)?width * height:width * height; private: /*4* CPoint point2; ; int main() CRectangle re
6、ct(0,0,1,1); coutrect.GetArea()endl; return 0; (分数:40.00)_二级 C+-11-1 答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC+6.0 打开 下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果: (4,5) 7,8 (4,8) 注意:错误的语句在/*error*的下面,修改该语句即可。 试题程序: #includeiostream.h class TC0 public: TC0(int i,int j) x=i; y=j;
7、/*error* virtual void move(int a;int h) x+=a; y+=b; void print() court“(“x:,:y“)“endl; public: int X,Y; ; class TC1:public TC0 public: /*error* TC1(int i,int j,int k):(i,j) m=k; n=l; void print() coutm“,“nendl; void func() move(3,5); void display() /*error* print(); private: int m,n; ; void main() T
8、C0 obj(4,5); obj.print(); TC1 obj1(1,3,7,8); obj1.func(); obj1.print(); obj1.display(); (分数:30.00)_正确答案:()解析:(1)应改为“virtual void move(int a,int b)”。 (2)应改为“TC1(int i,int j,int k,int l):TC0(i,j)”。 (3)应改为“TC0:print();”。 答案考生文件夹 解析 由题可知第 1 处是声明虚函数,虚函数的声明方式为“virtual类型说明符函数名(参数表)”,参数表中各参数之间应该用“,”隔开,因此第 1
9、 处的语句应改为“virtual void move(int a,int b)”。在主函数的语句“TC1 obj1(1,3,7,8);”中,可知构造函数 TC1有 4 个参数,完成变量 m、n、x 和 y 的初始化,k 和 l 赋值给 m 和 n,i 和 j 赋值给 x 和 y,x 和 y 的初始化可通过基类构造函数来完成对 x 和 y 的初始化,因此第 2 处的语句应改为“TC1(int i,intj,int k,int l):TC0(i,j)”。第 3 处调用的是基类的 print 函数,而“print();”是调用的派生类的 print 函数,因此此时只能通过类名来直接调用 print
10、函数,即第 3 处应改为“TC0:print();”。二、简单应用题(总题数:1,分数:30.00)2.使用 VC+6.0 打开 下的源程序文件 2.cpp。阅读下列函数说明和代码。 函数 sort(int int y=13; int z=-3; sort(x,y,z); coutx“,“y“,“zendl; return 0; (分数:30.00)_正确答案:()解析:int t; if(mn) t=m;m=n;n=t; /*交换 x,y 的值*/ if(ml) t=m;m=l;l=t; /*交换 x,z 的值*/ if(nl) t=n;n=l;l=t; /*交换 z,y 的值*/ 答案考生
11、文件夹 解析 由审题分析可知,3 次比较便可将 m、n、l 排序。先将 m 与 n 进行比较,如果mn,则将 m 与 n 的值进行交换,然后再用 m 与 l 进行比较,如果 ml,则将 m 与 l 的值进行交换,这样能使 m 最大。然后再将 n 与 l 进行比较,若 nl,则将 n 与 l 的值互换,互换后则 l 最小,这样就得到 m 最大,l 最小的排序结果。在 sort 函数内用 3 个 if 语句比较即可,条件成立则进行交换。三、综合应用题(总题数:1,分数:40.00)3.使用 VC+6.0 打开 下的源程序文件 3.cpp,其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。
12、 (1)定义类 CPoint 的带有两个参数的构造函数,两个变量为 x、y,都为 int 型,且缺省值为 0。请在注释1 后添加适当的语句。 (2)完成类 CReetangle 的构造函数,给 point1 和 point2 赋值。请在注释 2 后添加适当的语句。 (3)完成类 CRectangle 的函数 GetArea,用来计算矩形面积。请在注释 3 后添加适当的语句。 (4)定义 CRectangle 类,它拥有两个私有对象 point1 和 point2,类型为 Point,请在注释 4 后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 试题程序: #i
13、ncludeiostream.h #includecmath class CPoint public: /*1* x=i; y=j; int GetX() return x; int GetY() return y; private: int x,y; ; class CRectangle public: /*2* int GetArea() /*3* int height=point1.GetY()point2.GetY(); return(width * height)?width * height:width * height; private: /*4* CPoint point2;
14、; int main() CRectangle rect(0,0,1,1); coutrect.GetArea()endl; return 0; (分数:40.00)_正确答案:()解析:(1)应添加“CPoint(int i=0,int j=0)”。 (2)应添加“CRectangle(int top,int left,int right,int bottom):point1(top,left),point2(right,bottom)”。 (3)应添加“int width=point1.GetX()-point2.GetX();”。 (4)应添加“CPoint point1;”。 答案考生
15、文件夹 解析 本题中在第 1 处添加构造函数定义,该构造带有两个参数 x 和 y 的构造函数,x、y 都为 int 型,默认值为 0,因此第 1 处应添加“CPoint(int i=0,int j=0)”。第 2 处通过 CpOint 类的构造函数来完成 Crectangle 类成员的初始化,在函数体内没有任何函数语句,因此其初始化过程是在初始化列表里完成的,通过调用基类的构造函数来实现两个私有对象 point1 和 point2 的初始化,故第 2处应添加“CRectangle(int top,int left,int right,int bottom):point1(top,left),point2(right,bottom)”。面积为矩形长宽的乘积,因此先计算矩形的长和宽,可由两个 Cpoint 对象的x 坐标相减计算得到,CPoint 对象的 x 坐标为私有成员,只能通过公有接口函数调用获得,因此第 3 处的语句为“int width=point1.GetX()-Doint2.GetX();”。Crectangle 类的成员变量为两个 Cpoint 对象成员 point1 和 point2,在第 4 处补充 point1 的定义,故第 4 处应添加语句“CPoint point1;”。