1. 你这里定义的parameter精度不是kind=8,所以计算直角会有误差;
2. 同时是否构成三角形的判断语句也是错的,应该改成所有的两边之和都要大于第三边,得用.and.连接;
3. 为了省去判断时间我直接用角度来判断是否是锐角、直角或者钝角,逻辑清晰明了;
4. π用语句dacos(-1d0)来表示精度非常高;
5. 你的角度和边长不对应,我改回来了。
我的程序如下,还请观瞻:
program a4
implicit none
real(kind=8) x,y,z,l,s,a,b,c,p !x,y,z(三条边) l(周长) s(面积) a,b,c(角) p=l/2
real(kind=8),parameter:: degPerRad=180d0/dacos(-1d0)
write(*,*)"输入x,y,z"
read(*,*)x,y,z
if(x+y>z.and.x+z>y.and.z+y>x)then !所有的两边之和都要大于第三边
l=x+y+z
p=l/2
s=dsqrt(p*(p-x)*(p-y)*(p-z))
c=dacos((x*x+y*y-z*z)/(2d0*x*y))*degPerRad ! z边对应角度
b=dacos((x*x+z*z-y*y)/(2d0*x*z))*degPerRad ! y边对应角度
a=dacos((y*y+z*z-x*x)/(2d0*y*z))*degPerRad ! x边对应角度
write(*,100)l,s,a,b,c
100 format(/,"周长=",F19.8/, "面积=",F19.8/, "角A=",F19.8/, "角B=",F19.8/, "角C="F19.8)
if(a==90.or.b==90.or.c==90) then
write(*,*)"直角三角形"
elseif(a<90.and.b<90.and.c<90) then
write(*,*)"锐角三角形"
elseif(a>90.or.b>90.or.c>90) then
write(*,*)"钝角三角形"
endif
else
write(*,*)"不是三角形"
endif
read(*,*)
end program a4
可以得到运行的截图