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

Fortran嵌套DO与DO WHILE循环实现成绩录入校验问题咨询

Fortran成绩平均值计算程序修复方案

原代码问题梳理

  • 变量j未初始化就参与逻辑判断,初始值为内存随机值,导致输入校验逻辑完全失效
  • 没有单独的输入校验循环,不符合“仅接收0-100之间成绩”的要求,用户输入非法值也会直接存入数组
  • 每次循环直接调用sum(a)计算数组总和,未赋值的数组元素为随机值,总和计算结果错误
  • 平均值计算逻辑错误:直接固定除以10,没有根据实际录入的有效成绩数量动态计算

修复后代码

program Average
    implicit none
    integer :: i, valid_cnt = 0
    real :: sum_grades = 0.0, avg, input_grade
    real, dimension(10) :: grades

    ! 外层循环控制最多录入10个有效成绩
    do i = 1, 10
        ! 内层循环做输入合法性校验,直到输入符合要求为止
        do
            write(*, '(A, I2, A)') "请输入第", i, "个成绩(范围0<成绩<100):"
            read(*, *) input_grade
            if (input_grade > 0 .and. input_grade < 100) exit
            write(*, *) "输入不合法,请输入0到100之间的数值!"
        end do

        ! 合法成绩存入数组,累加总和和有效计数
        grades(i) = input_grade
        sum_grades = sum_grades + input_grade
        valid_cnt = valid_cnt + 1
    end do

    ! 所有成绩录入完成后计算平均值
    avg = sum_grades / valid_cnt
    write(*, '(A, F6.2)') "有效成绩的平均值为:", avg
end program Average

逻辑说明

  • 外层do i=1,10循环严格限制最多录入10个有效成绩,满足数量限制要求
  • 内层无限循环做单条成绩校验,只要输入不在(0,100)区间就提示重新输入,直到用户输入合法值才退出内层循环,满足范围校验要求
  • 边录入边累加总和和有效成绩计数,避免读取数组未初始化区域的随机值,计算结果准确
  • 录入完成后统一计算平均值,逻辑清晰无冗余

内容的提问来源于stack exchange,提问作者Bit4261

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:45:03