1、二级 C+机试-153 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:(4,5)7,8(4,8)注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#includeiostream.hclass TC0public:TC0(int i,int j)x=i;y=j;/*error*virtual void move(int a;int b)X+=a;y+=b;void print()cout“(“
2、x“,“y“)“end1;public:int x,y;class TC1:public TC0public:/*error*TC1(int i,int j,int k):(i,j)m=k;n=1;void print()coutm“,“nend1;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();obj1.print();obj1.display();(分数:30.00)填空项
3、1:_填空项 1:_填空项 1:_二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。阅读下列函数说明和代码。函数 sort(int m,int n,int l)实现将 3 个整数 m,n,1 由大到小输出。m 最大,l 最小。程序实现时,可以把最大的数放到 m 上,先将 m 与 n 进行比较,如果 mn,则将 m 与 n 的值进行交换,然后再用 m 与 l 进行比较,如果 ml,则将 m 与 l 的值进行交换,这样能使 m 最大,然后再将 n 与 l 进行比较,若 nl,则将 n 与 l 的值互换,互换后 l 最小。将函数 sor
4、t(int m,int n,int l)补充完整,实现 3 个数的排序。注意:请勿改动主函数。试题程序:#includeiostream.hvold sort(int m,int n,int l)int main()int x=9;int y=13;int z=3;sort(x,u,z);coutx,y,zend1;return 0;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp,其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类 CPoint 的带有两个参数的构造函数,两个变量为 x、y
5、,都为 int 型,且缺省值为 0。请在注释1 后添加适当的语句。(2)完成类 CRectangle 的构造函数,给 point1 和 point2 赋值。请在注释 2 后添加适当的语句。(3)完成类 CRectangle 的函数 GetArea,用来计算矩形面积。请在注释 3 后添加适当的语句。(4)定义 CRectangle 类,它拥有两个私有对象 point1 和 point2,类型为 Point,请在注释 4 后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#includeiostream.h#includecmathclass CPointpu
6、blic:/*1*x=1;y=j;int GetX()return x;int GetY()return y;private:int x,y;class CReetanglepublic:/*2*mt GetArea()/*3*int height=point1.GetY()-point2.GetY();return(width *height)?width *height:-width* height;private:/*4*CPoint point2;int main()CRectangle rect(0,0,1,1);coutrect.GetArea()end1;return 0;(分数
7、:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-153 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:(4,5)7,8(4,8)注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#includeiostream.hclass TC0public:TC0(int i,int j)x=i;y=j;/*error*virtual void move(int a;i
8、nt b)X+=a;y+=b;void print()cout“(“x“,“y“)“end1;public:int x,y;class TC1:public TC0public:/*error*TC1(int i,int j,int k):(i,j)m=k;n=1;void print()coutm“,“nend1;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();obj1.pri
9、nt();obj1.display();(分数:30.00)填空项 1:_ (正确答案:应改为“virtual void move(int a,int b)”。)解析:填空项 1:_ (正确答案:应改为“TCl(int i,int j,int k,int l):TC0(i,j)”。)解析:填空项 1:_ (正确答案:应改为“TCO:print();”。)解析:解析 由题可知第 1 处是声明虚函数,虚函数的声明方式为“virtual类型说明符函数名(参数表)”,参数表中各参数之间应该用“,”隔开,因此第 1 处的语句应改为“virtual void move(int a,int b)”。在主函数
10、的语句“TC1 obj1(1,3,7,8);”中,可知构造函数 TC1 有 4 个参数,完成变量 m、n、x 和 y 的初始化,k 和 1 赋值给 m 和 n,i 和 j 赋值给 x 和 y,x 和 y 的初始化可通过基类构造函数来完成对 X 和 Y 的初始化、第 2 处的语句应改为“TC1(int i,int j,int k,int l):TC0(i,j)”,第 3 处调用的是基类的 print 函数,而“print();”是调用的派生类的 print 函数,因此此时只能通过类名来直接调用 print 函数,即第 3 处应改为“TC0:print();”。二、2简单应用题(总题数:1,分数:
11、40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。阅读下列函数说明和代码。函数 sort(int m,int n,int l)实现将 3 个整数 m,n,1 由大到小输出。m 最大,l 最小。程序实现时,可以把最大的数放到 m 上,先将 m 与 n 进行比较,如果 mn,则将 m 与 n 的值进行交换,然后再用 m 与 l 进行比较,如果 ml,则将 m 与 l 的值进行交换,这样能使 m 最大,然后再将 n 与 l 进行比较,若 nl,则将 n 与 l 的值互换,互换后 l 最小。将函数 sort(int m,int n,int l)补充完整,实现 3 个数的排序
12、。注意:请勿改动主函数。试题程序:#includeiostream.hvold sort(int m,int n,int l)int main()int x=9;int y=13;int z=3;sort(x,u,z);coutx,y,zend1;return 0;(分数:40.00)_正确答案:(int t;if(mn)t=m;m=n;n=t;) /*交换 x,y 的值*/if(m1)t=m;m=l;l=t;)/*交换 x,z 的值*/if(n1)(t=n;n=l;l=t;/*交换 z,y 的值*/)解析:解析 由审题分析可知,3 次比较便可将 m、n、l 排序。先将 m 与 n 进行比较,
13、如果 mn,则将m 与 n 的值进行交换,然后再用 m 与 l 进行比较,如果 ml,则将 m 与 l 的值进行交换,这样能使 m 最大。然后再将 n 与 l 进行比较,若 nl,则将 n 与 l 的值互换,互换后则 1 最小,这样就得到 m 最大,1 最小的排序结果。在 sort 函数内用 3 个 if 语句比较即可,条件成立则进行交换。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp,其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类 CPoint 的带有两个参数的构造函数,两个变量为 x、y,都为 int
14、型,且缺省值为 0。请在注释1 后添加适当的语句。(2)完成类 CRectangle 的构造函数,给 point1 和 point2 赋值。请在注释 2 后添加适当的语句。(3)完成类 CRectangle 的函数 GetArea,用来计算矩形面积。请在注释 3 后添加适当的语句。(4)定义 CRectangle 类,它拥有两个私有对象 point1 和 point2,类型为 Point,请在注释 4 后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#includeiostream.h#includecmathclass CPointpublic:/*1
15、*x=1;y=j;int GetX()return x;int GetY()return y;private:int x,y;class CReetanglepublic:/*2*mt GetArea()/*3*int height=point1.GetY()-point2.GetY();return(width *height)?width *height:-width* height;private:/*4*CPoint point2;int main()CRectangle rect(0,0,1,1);coutrect.GetArea()end1;return 0;(分数:30.00)填
16、空项 1:_ (正确答案:应添加“CPoint(int i=0,int j=0)”。)解析:填空项 1:_ (正确答案:应添加“CRectangle(int top,int left,int right,int bottom):pointl(top,left),point2(right,bottom)”。)解析:填空项 1:_ (正确答案:应添加“int width=point1.GetX()-point2.GetX();”。)解析:填空项 1:_ (正确答案:应添加“CPoint point1;”。)解析:解析 本题中在第 1 处添加构造函数定义,该构造带有两个参数 x 和 y 的构造函数,
17、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()-point2.GetX();”。Crectangle 类的成员变量为两个 Cpoint 对象成员 point1 和 point2,在第 4 处补充 point1 的定义,故第 4 处应添加语句“CPoint point1;”。