fortran程序运行时只有输入1 1 1可以正常运行,输入别的提示出现下图,请问如何解决?

2024-12-05 02:57:27
推荐回答(1个)
回答1:

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


可以得到运行的截图

锐角示意图

直角示意图

钝角示意图