题目:
计算如下立体图形的表面积和体积。
从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。
编程要求:
(1)在父类Rect中,定义求底面周长的方法length( )和底面积的方法area( )。
(2)定义父类Rect的子类立方体类Cubic,计算立方体的表面积和体积。其中表面积area( )重写父类的方法。
(3)定义父类Rect的子类四棱锥类Pyramid,计算四棱锥的表面积和体积。其中表面积area( )重写父类的方法。
(4)在主程序中,输入立体图形的长(l)、宽(h)、高(z)数据,分别输出长方体的表面积、体积、四棱锥的表面积和体积。
提示:
(1)四棱锥体积公式:V=31Sh,S——底面积 h——高
(2)在Java中,利用Math.sqrt(a)方法可以求得a的平方根(方法的参数及返回结果均为double数据类型)
(3)在Python中,利用math模块的sqrt(a)方法,求得a的平方根。
输入格式:
输入多行数值型数据(double);
每行三个数值,分别表示l、h、z,数值之间用空格分隔。
若输入数据中有0或负数,则不表示任何图形,表面积和体积均为0。
输出格式:
行数与输入相对应,数值为长方体表面积 长方体体积 四棱锥表面积 四棱锥体积(中间有一个空格作为间隔,数值保留两位小数)。
输入样例:
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
内存限制
64 MB
栈限制
8192 KB
通过代码:
import math
import abc
class Rect:
def __init__(self,l,h,z):
self.l=l
self.h=h
self.z=z
@abc.abstractmethod
def lengh(self):
return (self.l + self.h) * 2
@abc.abstractmethod
def Area(self):
return self.l * self.h
class Cubic(Rect):
def __init__(self,l,h,z):
super().__init__(l,h,z)
def V(self):
return self.l*self.z*self.h
def Area(self):
return (self.h*self.l+self.h*self.z+self.l*self.z)*2
class Pyramid(Rect):
def __init__(self,l,h,z):
super().__init__(l,h,z)
def V(self):
return 1/3*self.l*self.h*self.z
def Area(self):
a=self.l
b=self.h
c=self.z
p1=math.sqrt(a*a+b*b)
p1=p1/2
pp=math.sqrt(p1*p1+c*c)
h1=math.sqrt(pp*pp-a*a/4)
h2=math.sqrt(pp*pp-b*b/4)
s1=h1*a/2
s2=h2*b/2
s3=a*b
s4=(s1+s2)*2+s3
return s4
while True:
try:
l,h,z=map(float,input().split())
if l<=0 or h<=0 or z<=0:
print("{:.2f} {:.2f} {:.2f} {:.2f}".format(0,0,0,0))
else:
c, p = Cubic(l,h,z), Pyramid(l ,h,z)
print("{:.2f} {:.2f} {:.2f} {:.2f}".format(c.Area(), c.V(), p.Area(), p.V()))
except:
break