1、国家二级 C+机试(操作题)模拟试卷 482及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,此工程中含有一个源程序文件proj1 cpp。其中位于每个注释 “ ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: This object is no 1 注意:只修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include iostream using namespace std; class MyClasS public: MyClass( ): count(0)cout
2、 “This object is“; ERROR*found* void Inc( )const cout “no “ +count endl; private: ERROR*found* int count=0; ; int main( ) NyClass*obj=new NyClass; ERROR*found* *obj Inc( ); return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 proj2,其中有类 Point(“点 ”)、Rectangle(“矩形 ”)和 Circle(“圆 ”)的定义。在程序所使用的平面坐标系统中, x轴的正方向是水平向右的, Y轴的正
3、方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是: -圆形 - 圆心 =(3, 2) 半径 =1 面积 =3 14159 -外切矩形 - 左上角 =(2, 1) 右下角 =(4, 3) 面积 =4 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动 “ *found*”。 #include ioStream #include cmath using namespace std; 平面坐标中的点 本题坐标系统中, x轴的正方向水平向右, y轴的正方向竖直向下。 class Point public: Point(doub
4、le x=0 0, doubley=0 0): x_(x), y_(y) double getX( )constreturnx; double getY( )constreturn y; void setX(double x)x_=x; void setY(double y)y_=y; ) private: double x_; x坐标 double y_; y坐标 ; class Rectanqle( public: Rectangle(Point p, intW, int h) : point(P), width(W), height(h) double aEea( )const矩形面积
5、return width*height; Point topLeft( )const左上角顶点 return point; ) PointbottomRight( )const 右下角顶点 (注: y轴正方向竖直向下 ) *found* return Point(_); private: Point point;左上角顶点 double width;水平边长度 double height;垂直边长度 ; 圆形 class Cirole public: Circle(Point p, double r): center(p), radius(r) Rectangle boundingBox( )
6、 conSt; 外切矩形 double area( )const圆形面积 *found* return PI*_; public: static const double PI;圆周率 private: Point center;圆心 double radius;半径 ; const double Circle: PI=3 14159; RectangleCircle: boundingBOx ( )const *found* Point pt(_); int w, h; *found* w=h=_; return Rectangle(pt, w, h); ) int main( ) Poin
7、t p(3, 2); Circle c(p, 1); cout “-圆形 - n“; cout “圆心 =(“ P getX( ) , p getY( ) “) n“; cout “半径 =“ 1 endl; cout “面积 =“ c area( ) endl endl; Rectangle bb=c boundingBox( ); Point t1=bb topLeft( ); Point br=bb bottomRight( ); cout “-外切矩形 - n“; cout “左上角 =(“ t1 getX( ) , t1 getY( ) “) n“; cout “右下角 =(“ br
8、 getX( ) , br getY( ) “) n“; cout “面积 =“ bb area( ) endl; return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,此工程包含一个源程序文件proj3 cpp,其中定义了用于表示二维向量的类 MyVector;程序应当显示 (6, 8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在 “ *1* *found*”的下方是构造函数的定义,它用参数提供的坐标对 x和 y进行初始化。 (2)在 “ *2* *found*”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:
9、其 X坐标等于两向量 X坐标之差,其 Y坐标等于两向量 Y坐标之差。 (3)在 “ *3* *found*”的下方,语句的功能是使变量 v3获得新值,它等于向量 v1与向量 v2之和。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动 “*found*”。 proj3 cpp #include iostream using std: ostream; using std: cout; using std: endl; class MyVector表示二维向量的类 double x; X坐标值 double y; Y坐标值 public: MyVector(double
10、 i=0 0, double j=0 0);构造函数 MyVector operator+(MyVector j);重载运算符 + friend MyVector operator-(MyVector i, MyVector j);童载运算符 - friend ostream&operator (ostream& os, MyVector v);重载运算符 ; *1* *found* _(double i, double j); x(i), y(j) Myvector Myvector: operator+(MyVector j) return MyVector(x+j x, y+j y);
11、MyVector operator-(MyVectori, MyVector j) *2* *found* return MyVector(_); ostream&operator (ostream& os, MyVector v) os ( v x , v y );输出向量 v的坐标 return os; int main( ) MyVector v1(2, 3), v2(4, 5), v3; *3* *found* v3=_; cout v3 endl; return0; 国家二级 C+机试(操作题)模拟试卷 482答案与解析 一、基本操作题 1 【正确答案】 (1)void Inc( )
12、 (2)int count; (3)obj- Inc( ); 【试题解析】 (1)考查考生对 const,的掌握,在 Inc函数的函数体 cout“no “ +count endl; 中,有语句 +count,将使私有成员 count的值发生改变,因此该函数不能使用 const修饰。 (2)考查私有成员,在定义类时,私有成员只能声明不能初始化。 (3)主要考查考生对类的指针的掌握,指针调用类的成员函数时要使用标识符 “- ”,而不能使用 “ ”。 二、简单应用题 2 【正确答案】 (1)point getX( )+width, point getY( )+height (2)radius*ra
13、dius (3)center getX( )-radius, center getY( )-radius (4)2*radius 【试题解析】 (1)主要考查考生对成员函数的掌握,程序要 求返回右下角顶点,该点的 x坐标为左上角顶点的 x坐标加上 width,该点的 y坐标为左上角顶点 Y坐标加上 height,即 return Point(point getX( )+width, point getY( )+height);。 (2)主要考查考生对成员函数的掌握,程序要求计算圆形面积,也就是返回圆面积,即 return PI*radius*radius;。 (3)主要考查考生对成员函数的掌握
14、,首先看函数声明: Rectangle Circle:boundingBox( )const,可知该函数要返回的是一个 Rectangle类型,即要返回的是圆的外切矩形。再看 Rectangle类的构造函数 Rectangle(Point p, int w, int h),由此可知,空格处要定义的点 pt为左上角点,即 Point pt(center getX( )-radius, center getY( )-radius);。 (4)由函数声明和 Rectangle类的构造函数可知, w和 h应该为直径,即w=h=2*radius;。 三、综合应用题 3 【正确答案】 (1)MyVector: MyVector (2)i x-j x, i y-j y (3)v1+v2 【试题解析】 (1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即 MyVector: MyVector。 (2)主要考查重载运算符 “-”的返回语句,返回值应为向量 i和 j的差,即MyVector(i xj x, i y-j y);。 (3)主要考查重载运算符 “+”的使用,由题目可知 v3是 v1和 v2的和,前面我们已经重新定义了运算符 “+”,所以在这里直接使用语句 v3=v1+v2;即可。