前言
NWAFU OOP02_01
一、题目描述
Description
定义一个椭球(Ellipsoid)类,具体要求如下:
(1) 数据成员包含三个轴的半径r1、r2、r3及圆周率PI=3.1416;
(2) 构造函数:给椭球中的数据成员赋初值。如果不给定任何初始值,则默认椭球三个半径r1=r2=r3=1.0;
(3) 设计成员函数bool IsEqual()判断两个椭球是否完全相同,返回值为布尔类型(true或false);
(4) 设计成员函数double GetVolume()用于计算椭球的体积(注:椭球的体积公式为4*PI*r1*r2*r3/3)。
Input
第一个椭球的半径和第二个椭球的半径。
Output
第一个椭球的体积,第二个椭球的体积,若第一个椭球与第二个椭球完全一样,则输出true,否则输出false。
Sample Input 1
2 3 4
3 4 5
Sample Output 1
100.531 251.328
false
二、设计步骤
代码实现:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
class Ellipsoid
{
private:
double r1;
double r2;
double r3;
public:
static const double PI;
//在对三个参数赋值时先进行排序
//此举是为了防止在后面的isEqual函数中因为输入顺序不同而导致误判的情况
Ellipsoid(double a = 1.0,double b = 1.0,double c = 1.0)
{
double arr[3] = {a,b,c};
std::sort(arr,arr+3);
r1 = arr[0];
r2 = arr[1];
r3 = arr[2];
}
//判断两椭球是否完全相同
bool IsEqual(const Ellipsoid &cmp)
{
return (isEqualDouble(r1, cmp.r1) && isEqualDouble(r2, cmp.r2) && isEqualDouble(r3, cmp.r3));
}
//体积计算函数
double GetVolume()
{
return 4*PI*r1*r2*r3/3;
}
private:
//针对浮点型数据比大小,防止精度问题造成错误
bool isEqualDouble(double a, double b, double epsilon = 1e-6) {
return fabs(a - b) < epsilon;
}
};
const double Ellipsoid::PI = 3.1416;
int main()
{
double a,b,c;
//定义两个Ellipsoid
cin >> a >> b >> c;
Ellipsoid A(a,b,c);
cin >> a >> b >> c;
Ellipsoid B(a,b,c);
//输出体积 PS:要特别注意输出格式
cout << A.GetVolume() << ' ';
cout << B.GetVolume() << endl;
if(A.IsEqual(B))
cout << "true";
else
cout << "false";
return 0;
}
总结
EOF