5 fortran
我正在读一本在二手书店找到的旧书(再次)。这一篇叫做《Fortran 技术——特别提到非数值应用》,作者 A. Colin Day,剑桥大学出版社 1972 年出版。 毕竟,跟上软件开发的最新动态是非常重要的; -)
本书声称涵盖 Fortran-66 (X3.9-1966),又名 Fortran-IV,与该标准略有不同DATA此处不相关的语句标准略有不同。
问题是,这本书似乎留下了很多猜测的空间,而我的猜测对于循环来说相当不确定DO。这是第一章中的内容,所以不是一个好兆头。
这是一个例子......
DO 15 I = 1, 87
J = I - 44
Run Code Online (Sandbox Code Playgroud)
在该DO行中,1 和 87 似乎表示循环的包含范围 -I取值 1 到 87(包含在内),因此J取值 -43 到 +43(包含在内)。然而,代表什么15?
另一个例子是...
N = 1
DO 33 I = 1, 10
...
33 N = N + N
Run Code Online (Sandbox Code Playgroud)
在本例中,33 看起来像一个标签或行号 - 可能是循环重复(或退出)之前执行的最后一行。但 33 是一个奇数,可以选择作为任意标签。
编辑这是一个错误 - 请参阅 duffymo 的答案 - How do `DO` 循环在 Fortran 66 中工作?
之后的下一个例子是......
DO 33 I = 1, 10
N = 2 ** (I-1)
Run Code Online (Sandbox Code Playgroud)
再次使用相同的 33,但没有任何行明确地用它标记。
我是否感到困惑,因为这些都是断章取义的简短片段?nin代表什么DO n ...?
这是一个完整的程序,应该可以回答您的一些问题。人们可以很容易地测试这个历史问题...... FORTRAN IV 仍然受到许多编译器的支持,尽管 FORTRAN IV 的某些部分要么正式过时,要么在我看来应该过时。我使用 g77(由于长期不受支持而接近过时)和 gfortran 编译并检查了该程序。
这是一个示例程序:
implicit none
integer i
real q
q = 1.0
do i=1, 10
q = q * 1.5
end do
write (6, *) "modern loop: q =", q
q = 1.0
do 100 i=1, 10
q = q * 1.5
100 continue
write (6, *) "loop with continue: q =", q
q = 1.0
do 200 i=1, 10
200 q = q * 1.5
write (6, *) "loop without continue: q =", q
stop
end
Run Code Online (Sandbox Code Playgroud)
以及如何使用 gfortran 编译它: gfortran -ffixed-form -ffixed-line-length-none -std=gnu test_loops.for -o test_loops.exe
关于您的问题:如果您使用作为可执行代码的标记行终止循环,那么该行是循环的一部分吗?程序的输出清楚地表明标记的行是循环的一部分。这是 gfortran 的输出:
现代循环:q = 57.665039
带 continue 的循环:q = 57.665039
不带 continue 的循环:q = 57.665039
| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |