关于此题的相关知识点以及更多题目,请查看👇
【C++学习】【持续更新 】史上最全C++学习总结(知识点+OJ练习讲解)
题目描述
设计一个点类Point,包含属性:x坐标和y坐标,方法:设定坐标(SetPoint),获取x坐标(GetX),获取y坐标(GetY)
设计一个圆类Circle,包含属性:圆心坐标x和y、半径r;方法包括:
-
设定圆心(SetCenter),设置圆心x坐标和y坐标
-
设定半径(SetRadius),设置半径长度
-
计算面积(getArea),计算公式:面积=3.14rr
-
计算周长(getLength),计算公式:周长=23.14r
-
包含(Contain),判断一个圆是否包含一个点,计算圆心到这个点的距离,然后和半径做比较,大于则不包含,小于等于则包含
输入
第一行输入圆的三个参数:圆心的x和y坐标,半径
第二行输入点的两个参数:x和y坐标
输出
第一行输出圆的面积和周长,结果之间用空格隔开,输出精度到小数点后2位
第二行输出圆是否包含点,包含则输出yes,否则输出no
输入样例1
1 1 1
2 2
输出样例1
3.14 6.28
no
#include <iostream>
#include <cstring>
#include<iomanip>
#include<cmath>
using namespace std;
//-----类定义------
class Point
{ // 写类定义代码
public:
double x;
double y;
void SetPoint(double xval,double yval);
double GetX();
double Gety();
};
class Circle
{
private:
Point p1;
double r;
public:
void SetCenter(double xval,double yval);
void SetRadius(double rval);
double getArea();
double getLength();
bool Contain(Point p2); //注意点:将Point做为参数s
};
//----类实现------
void Point::SetPoint(double xval,double yval)
{
x = xval;
y = yval;
};
double Point::GetX()
{
return x;
}
double Point::Gety()
{
return y;
}
void Circle::SetCenter(double xval,double yval)
{
p1.SetPoint(xval,yval);
}
void Circle::SetRadius(double rval)
{
r = rval;
}
double Circle::getArea()
{
return 3.14*r*r;
}
double Circle::getLength()
{
return 2*3.14*r;
}
bool Circle::Contain(Point p2)
{
double distance;
distance = sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
return distance <= r;
}
//-----主函数-----
int main()
{
//创建一个圆对象和一个点对象
Point p;
Circle c;
//自定义一些变量
double x1,y1,r1; //圆
double x2,y2; //点
//输入圆对象和点对象的属性数值,并做初始化
cin >> x1 >> y1 >> r1;
cin >> x2 >> y2;
c.SetCenter(x1,y1);
c.SetRadius(r1);
p.SetPoint(x2,y2);
//输出圆的面积和圆的周长
cout<<fixed<<setprecision(2)<<c.getArea()<<" "<<fixed<<setprecision(2)<<c.getLength()<<endl;
//输出圆是否包含点,包含则输出yes,否则输出no
if(c.Contain(p))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}