Fortran数组读取后数据异常,theta计算出现inf和0.00问题求助
问题排查:Fortran代码计算theta出现inf和0.00值的原因
核心问题分析
- 数组读取错误:原代码中
read (*,200)T_i(27)和read (*,200)P_i(27)仅读取了数组的第27个元素,其余26个元素未初始化,内存中是随机垃圾值(可能是极大数、负数或0),直接导致后续计算出现异常。 - 输入合法性未校验:若输入的压力值为0,
1000.0/P_i(i)会产生无穷大(inf);若压力值为负数,实数范围内开0.286次方(约3.5次方)是无效操作,编译器会返回异常值或0.00。
修正后的代码示例
! 修正后的theta计算程序 program theta_calc implicit none integer :: i real :: T_i(27), P_i(27), theta ! 循环读取27个温度值,确保所有元素初始化 print*, '==========请输入27个温度值(每行一个):=====================' do i = 1, 27 read (*,200) T_i(i) enddo 200 format(F7.3) ! 循环读取27个压力值,同时校验合法性 print*, '==========请输入27个压力值(每行一个):=====================' do i = 1, 27 read (*,200) P_i(i) ! 过滤非正压力值,避免计算错误 if (P_i(i) <= 0.0) then print*, '警告:第', i, '个压力值非正,已设为1.0' P_i(i) = 1.0 endif enddo ! 打印输入值用于验证 print*, '输入的温度值:' print*, T_i print*, '输入的压力值:' print*, P_i ! 计算并输出theta do i = 1,27 theta = T_i(i) * (1000.0 / P_i(i)) ** 0.286 print*, '======', i, '===================' write(*,100) theta 100 format('theta值为:', F6.2) enddo end program theta_calc
关键修正点
- 用循环逐个读取数组元素,确保所有27个值都被正确初始化,消除随机垃圾值的影响
- 添加压力值合法性检查,避免0或负数导致的除法、开方错误
- 重命名程序为
theta_calc,避免与内置模块/函数命名冲突
内容的提问来源于stack exchange,提问作者王云湖不归
相关产品推荐
相关产品推荐

