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

Fortran代码存在多处错误,请求技术排查与修正指导

Fortran代码错误修正方案

原代码里的问题逐一说明:

  • 逻辑常量写法错误:Fortran里的真/假常量必须是.true.和.false.,直接写true/false会被编译器当成未定义变量,这是核心报错原因。
  • 函数声明错误:把自定义函数fun用logical::p,q,fun声明成了普通逻辑变量,编译器无法识别它是函数,需改成external fun声明为外部函数,或用模块包裹函数(更规范)。
  • 函数调用语法错误:有一行写了function(true,true),属于无效写法,要改成调用fun(.true.,.true.)。
  • print语句格式错误:好几行print,"xxx"缺少*,应写成print*,"xxx",否则编译器会把引号内容当成格式控制符引发报错。

修正后的代码(外部函数写法,和原代码结构最接近)

Program mr
    implicit none
    logical::p,q
    external fun  ! 声明fun是外部函数
    read(*,*)p,q
    print*,"------"
    print*,"|p|q|p->q"
    print*,"------"
    print*,"|true|true|",fun(.true.,.true.),"|"
    print*,"------"
    print*,"|true|false|",fun(.true.,.false.),"|"
    print*,"------"
    print*,"|false|true|",fun(.false.,.true.),"|"
    print*,"------"
    print*,"|false|false|",fun(.false.,.false.),"|"
    print*,"------"
end program mr

logical function fun(p,q)
    logical::p,q
    if(p .eqv. .true. .and. q .eqv. .false.)then
        fun = .false.
    else
        fun = .true.
    end if
end function fun

更规范的模块写法(推荐Fortran 90+使用)

模块写法能让编译器更好地检查参数类型,避免后续调用错误,代码结构更清晰:

module logic_funcs
    implicit none
contains
    logical function fun(p,q)
        logical,intent(in)::p,q
        ! 逻辑蕴含p→q等价于 ¬(p∧¬q),直接写表达式更简洁
        fun = .not. (p .and. .not. q)
    end function fun
end module logic_funcs

Program mr
    use logic_funcs  ! 引入模块里的函数
    implicit none
    logical::p,q
    read(*,*)p,q
    print*,"------"
    print*,"|p|q|p->q"
    print*,"------"
    print*,"|true|true|",fun(.true.,.true.),"|"
    print*,"------"
    print*,"|true|false|",fun(.true.,.false.),"|"
    print*,"------"
    print*,"|false|true|",fun(.false.,.true.),"|"
    print*,"------"
    print*,"|false|false|",fun(.false.,.false.),"|"
    print*,"------"
end program mr

内容的提问来源于stack exchange,提问作者Sameh Ibn Al Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:40:43