问答题
请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2。其中有类Point(“点”)、Rectangle(“矩形”)和Circle(“圆”)的定义。在程序所使用的平面坐标系统中,x轴的正方向是水平向右的,y轴的正方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是:
--圆形----------
圆心=(3,2)
半径=1
面积=3.14159
--外切矩形---------
左上角=(2,1)
右下角=(4,3)
面积=4
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
#include <iostream>
#include<cmath>
using namespace std;
//平面坐标中的点
//本题坐标系统中,x轴的正方向水平向右,y轴的正方向竖直向下。
class Point{
public:
Point(double x=0.0, double y=0.0): x_(x), y_(y){)
double getX() const {return x; }
double getY() const {return y; }
void setX (double x) {x_=x; }
void setY (double y) {y_=y; }
private:
double x_; //x坐标
double y_; //y坐标
};
//矩形
class Rectangle {
public:
Rectangle(Point p, int w, int h)
:point(p), width(w), height(h)
{}
double area() const//矩形面积
{
return width*height;
}
Point topLeft()const//左上角顶点
{
return point;
}
Point bottomRight()const
//右下角顶点(注:y轴正方向竖直向下)
{
//********found********
return Point(______);
}
private:
Point point; //左上角顶点
double width; //水平边长度
double height; //垂直边长度
};
//圆形
class Circle{
public:
Circle(Point p, double r): center(p), radius(r){}
Rectangle boundingBox()const;
//外切矩形
double area()const//圆形面积
{
//********found********
return PI*______;
}
public:
static const double PI; //圆周率
private:
Point center; //圆心
double radius; //半弪
};
const double Circle::PI=3.14159;
Rectangle Circle::boundingBox
()const
{
//********found********
Point pt(______);
int w, h;
//********found********
w=h=______;
return Rectangle(pt, w, h);
}
int main()
{
Point 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.getX()<<','<<br.getY() <<")/n";
cout<<"面积="<<bb.area()<<endl;
return 0;
}
【正确答案】(1)point.getX()+width, point.getY()+height
(2)radius*radius
(3)center.getX()-radius, center.getY()-radius
(4)2*radius
【答案解析】[考点] 本题考查Point类、Rectangle类和Circle类,其中涉及构造函数、consl函数和静态成员。
[解析] (1)主要考查考生对成员函数的掌握,程序要求返回右下角顶点,该点的x坐标为左上角顶点的x坐标加上width,该点的y坐标为左上角顶点y坐标加上height,即return Point(point.getX()+width, point.getY()+height);。
(2)主要考查考生对成员函数的掌握,程序要求计算圆形面积,也就是返回圆面积,即return PI*radius*radius;。
(3)主要考查考生对成员函数的掌握,首先看函数声明: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;。