题目描述
【问题描述】已知一圆形游泳池,现在需在其周围建一圆形过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米游泳池半径由键盘输人。要求编程计算并输出过道和栅栏的造价。
设计该程序时需要达到以下要求:
(1)根据理解,自行定义Circle类来实现相关的数据存储以及功能,访问控制性、名称以及参数自行定义。可查看后面程序说明
(2)要求定义一个用于计算过道造价的函数,该函数的参数指定为指向对象的指针类型,函数返回值为double 类型的过道造价。该函数实现时要求动态生成一圆对象,实现过道造价的计算,函数结束后释放该对象。
(3)要求定义一个用于计算栅栏造价的函数,函数的参数为一对象,函数的返回值为double 类型的栅栏造价
(4)编制一主函数,输入游泳池半径,实现游泳池对象创建,并合理调用上述函数,计算并输出过道和栅栏的造价。
【程序说明】游泳池及栅栏可以看作是两个同心圆,大圆的周长就是栅栏的长度,圆环的面积就是过道的面积,而环的面积是大、小圆的面积之差。可以定义一个圆类来描述这个问题:圆的半径是私有成员数据,圆类应当具有的功能是计算周长和面积。分别用两个对象来表示栅栏和游泳池,就可以得到过道的面积和栅栏的周长(栅栏为大圆周长)。利用已知的单价.便可以得到整个改建工程的预算。
【样例输入1】
10
【样例输出1】
the fencing cost is:2858.85
the concrete cost is:4335.4
【样例输入2】
3.5
【样例输出2】
the fencing cost is:1429.42
the concrete cost is:1884.96
解题思路
由于题目中流程详细,思路略
源代码
#include <iostream>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;
#define PI 3.1415926
class Circle {
double radius; //半径
public:
Circle(double r) {
radius = r;
} //构造函数
double getRadius() {
return radius;
} //获取半径
double getPerimeter() {
return 2 * PI * radius;
} //计算周长
double getArea() {
return PI * radius * radius;
} //计算面积
};
//计算过道造价函数
double calculatePathCost(Circle* pool) {
double pathWidth = 3; //过道宽度
Circle* path = new Circle(pool->getRadius() + pathWidth); //创建过道对象
double pathArea = path->getArea() - pool->getArea(); //计算过道面积
double pathCost = pathArea * 20; //计算过道造价
delete path; //释放过道对象
return pathCost;
}
//计算栅栏造价函数
double calculateFenceCost(Circle pool) {
double fenceLength = pool.getPerimeter() + 2 * PI * 3; //栅栏长度就是过道外围周长周长
double fenceCost = fenceLength * 35; //计算栅栏造价
return fenceCost;
}
int main() {
double radius;
cin >> radius;
Circle pool(radius); //创建游泳池对象
double pathCost = calculatePathCost(&pool); //计算过道造价
double fenceCost = calculateFenceCost(pool); //计算栅栏造价
cout << "the fencing cost is:" << fenceCost << endl;
cout << "the concrete cost is:" << pathCost << endl;
return 0;
}
总结
比较考察模块化编程思想。