【问题标题】:Fortran IF statement with numbers/labels rather than another statement带有数字/标签而不是另一个语句的 Fortran IF 语句
【发布时间】:2012-06-22 21:39:28
【问题描述】:

这个 Fortran 代码是什么意思:

   IF (J1-3) 20, 20, 21
21 J1 = J1 - 3
20 IF (J2-3) 22, 22, 23
23 J2 = J2 - 3
22 CONTINUE

我在旧项目中见过,我不知道这个带有数字(标签)的 IF 是什么意思。

【问题讨论】:

  • 在 FORTRAN 的早期,这并不奇怪——它是当时语言中唯一的条件语句。

标签: fortran fortran90


【解决方案1】:

这是来自 FORTRAN 77 的 arithmetic if statement。改编自 FORTRAN 77 规范(重点是我的):

算术IF语句的形式为:

IF (e) s1 , s2 , s2

  • 其中:e 是整数、实数或双精度表达式

  • s1s2s3 分别是与算术 IF 语句出现在同一程序单元中的可执行语句的语句标签。同一个语句标签可能在同一个算术IF 语句中出现多次。

算术IF 语句的执行会导致表达式e 的求值,然后是控制权转移。 s1s2s3 标识的语句在e 的值分别小于零、等于零或大于零时执行。

对于您问题中的示例,来自上面的最后一句话,

  • 如果J1-3 < 0将执行语句20
  • 如果J1-3 = 0语句20也会被执行
  • 如果J1-3 > 0将执行语句21

编辑:一种现代且更具可读性的写法是:

if (J1-3 > 0) J1 = J1 - 3
if (J2-3 > 0) J2 = J2 - 3

【讨论】:

  • 没问题。请注意,我的编辑仍然是有效的 FORTRAN 77(当然还有有效的 Fortran 90、95 等)。它使用逻辑 if 语句。另一种 if 语句是 block if 语句
  • 小写 if 不是标准 FORTRAN 77 :)
  • Fortran 曾经不区分大小写……确实……至少在打孔卡之后 ;)
  • 在现代版本中更易读以比较 J1 和 3? J1>3 至少,如果你知道 J1 没有溢出它的类型。
猜你喜欢
  • 2023-02-15
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多