You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修正点

  1. 用循环逐个读取数组元素,确保所有27个值都被正确初始化,消除随机垃圾值的影响
  2. 添加压力值合法性检查,避免0或负数导致的除法、开方错误
  3. 重命名程序为theta_calc,避免与内置模块/函数命名冲突

内容的提问来源于stack exchange,提问作者王云湖不归

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:39:56