计算如下立体图形的表面积和体积。从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。 编程要求: (1)在父类Rect中,定义求底面周长的方法length( )和底面积的方法area( )。 (2)定义父类Rect的子类立方体类Cubic,计算立方体的表面积和体积。其中表面积area( )重写父类的方法。 (3)定义父类Rect的子类四棱锥类Pyramid,计算四棱锥的表面积和体积。其中表面积area( )重写父类的方法。 (4)在主程序中,输入立体图形的长(l)、宽(h)、高(z)数据,分别输出长方体的表面积、体积、四棱锥的表面积和体积。 提示: (1)四棱锥体积公式:V= (1/3)Sh,S——底面积 h——高 (2)在Java中,利用Math.sqrt(a)方法可以求得a的平方根(方法的参数及返回结果均为double数据类型)。 输入格式: 输入正整数n,然后输入n行数值型数据(double); 每行三个数值,分别表示l、h、z,数值之间用空格分隔。 若输入数据中有0或负数,则不表示任何图形,表面积和体积均为0。 输出格式: 行数与输入相对应,数值为长方体表面积 长方体体积 四棱锥表面积 四棱锥体积(中间有一个空格作为间隔,数值保留两位小数)。 输入样例: 4 1 2 3 0 2 3 -1 2 3 3 4 5 输出样例: 22.00 6.00 11.25 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 94.00 60.00 49.04 20.00 代码长度限制 16 KB 时间限制 400 ms 使用C++
时间: 2023-11-27 19:52:18 浏览: 32
```
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class Rect {
protected:
double l, h, z;
public:
Rect(double a, double b, double c) : l(a), h(b), z(c) {}
double length() {return 2 * (l + h);}
double area() {return l * h;}
};
class Cubic : public Rect {
public:
Cubic(double a, double b, double c) : Rect(a, b, c) {}
double area() {return 2 * (l * h + l * z + h * z);}
double volume() {return l * h * z;}
};
class Pyramid : public Rect {
public:
Pyramid(double a, double b, double c) : Rect(a, b, c) {}
double area() {
double a = sqrt(l * l / 4 + h * h);
return l * h + l * a;
}
double volume() {return area() * z / 3;}
};
int main() {
int n;
cin >> n;
while (n--) {
double a, b, c;
cin >> a >> b >> c;
if (a <= 0 || b <= 0 || c <= 0) {
cout << fixed << setprecision(2) << 0 << " " << 0 << " " << 0 << " " << 0 << endl;
continue;
}
Rect *p;
Cubic cubic(a, b, c);
Pyramid pyramid(a, b, c);
if (a == b && b == c) p = &cubic;
else p = &pyramid;
cout << fixed << setprecision(2) << p->area() << " " << p->volume() << " " << cubic.area() << " " << cubic.volume() << endl;
}
return 0;
}
```