您现在的位置是:首页 >其他 >【id:30】【20分】C. 点和圆 (类与对象)网站首页其他
【id:30】【20分】C. 点和圆 (类与对象)
一、题目描述
设计一个点类Point,包含属性:x坐标和y坐标,方法:设定坐标(setPoint),获取x坐标(getX),获取y坐标(getY)
设计一个圆类Circle,包含属性:圆心坐标x和y、半径r;方法包括:
-
设定圆心(setCenter),设置圆心x坐标和y坐标
-
设定半径(setRadius),设置半径长度
-
计算面积(getArea),计算公式:面积=3.14rr
-
计算周长(getLength),计算公式:周长=23.14r
-
包含(contain),判断一个圆是否包含一个点,计算圆心到这个点的距离,然后和半径做比较,大于则不包含,小于等于则包含
注意:提交代码时必须用注释划分出三个区域:类定义、类实现、主函数,如下
//-----类定义------
class XXX
{
};
//----类实现------
void XXX::process()
{
};
//-----主函数-----
int main()
{
//自定义一些变量
//创建一个圆对象和一个点对象
//输入圆对象和点对象的属性数值,并做初始化
//输出圆的面积和圆的周长
//输出圆是否包含点,包含则输出yes,否则输出no
return 0;
}
二、输入与输出
1.输入
第一行输入圆的三个整数参数:圆心的x和y坐标,半径
第二行输入点的两个整数参数:x和y坐标
1 1 1
2 2
2.输出
第一行输出圆的面积和周长,结果之间用空格隔开,输出精度到小数点后2位
第二行输出圆是否包含点,包含则输出yes,否则输出no
在C++中,输出指定精度的参考代码如下:
#include
#include //必须包含这个头文件
using namespace std;
void main( )
{
double a =3.14;
cout<<fixed<<setprecision(3)<<a<<endl; //输出小数点后3位
}
3.14 6.28
no
提示
求两点距离的公式 dis =sqrt [ (x1-x2)^2 + (y1-y2)^2 ] , ^2表示平方,sqrt表示开平方根,本公式只是表示含义,不是真实代码
在C++使用sqrt函数可以求平方根,头文件包含cmath
三、参考代码
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>
using namespace std;
class point {
private:
double x,y;
public:
void setpoint(double x1,double y1)
{
x=x1;
y=y1;
}
double getx() {
return x;
}
double gety() {
return y;
}
};
class cir {
private:
double x,y,r;
public:
void set(double x2,double y2,double r1) {
x=x2;
y=y2;
r=r1;
}
double setarea() {
double S=3.14*r*r;
return S;
}
double setlen() {
double D=2*3.14*r;
return D;
}
bool con(point a) {
double len=sqrt((a.getx()-x)*(a.getx()-x)+(a.gety()-y)*(a.gety()-y));
if(len>r) {
return 0;
} else {
return 1;
}
}
};
int main() {
double x1,y1,r1;
double x2,y2;
cin>>x1>>y1>>r1>>x2>>y2;
point a;
a.setpoint(x2,y2);
cir b;
b.set(x1,y1,r1);
cout<<fixed<<setprecision(2)<<b.setarea()<<" "<<b.setlen()<<endl;
if(b.con(a)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return 0;
}
四、题解思路
原来getx(),gety()是类自身的函数可以访问其private的数据,如果没有在外面的类里面是没有权限的,所以这两个函数是为了return x与y的。