我正在读一本我在二手书店里找到的旧书(再次)。这个被称为“Fortran技术 - 特别参考非数字应用”,由A. Colin Day,剑桥大学出版社于1972年出版。毕竟,跟上最新的软件开发是非常重要的。 - )
本书声称涵盖了Fortran-66(X3.9-1966),又名Fortran-IV,与DATA
语句的标准略有不同,与此处无关。
麻烦的是,这本书似乎留下了很多猜测,我的猜测很不确定WR DO
循环。这是第1章,所以不是是一个非常好的标志。
这是一个例子......
DO 15 I = 1, 87
J = I - 44
在DO
行中,1和87似乎代表循环的包含范围 - I
取值1到87(含),因此J
取值-43到+43包括的。但是,15
表示什么?
另一个例子是......
N = 1
DO 33 I = 1, 10
...
33 N = N + N
在这种情况下,33看起来像标签或行号 - 可能是循环重复(或退出)之前执行的最后一行。但33是一个奇数,可以选择任意标签。
编辑这是一个错误 - 请参阅duffymo的答案 - How do `DO` loops work in Fortran 66?
之后的下一个例子是......
DO 33 I = 1, 10
N = 2 ** (I-1)
再次使用相同的33,但没有任何行都明确标有它。
我是否感到困惑,因为这些是脱离背景的短片段? n
中的DO n ...
代表什么?
答案 0 :(得分:4)
行号告诉代码循环完成时代码的去向。
是的,这些数字是奇怪的,任意的,毫无意义的。这是使FORTRAN难以阅读和理解的部分原因。
答案 1 :(得分:4)
这是一个完整的程序,可以回答你的一些问题。人们可以很容易地测试这个历史问题...... 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
如何用gfortran编译它: gfortran -ffixed-form -ffixed-line-length-none -std = gnu test_loops.for -o test_loops.exe
回答你的问题:如果你用一个可执行代码的标记行来终止循环,那么循环的那一行是什么?程序的输出清楚地表明标记的行是循环的一部分。这是gfortran的输出:
现代循环:q = 57.665039
循环继续:q = 57.665039
循环没有继续:q = 57.665039
答案 2 :(得分:-2)
15号被称为"标签"它是由程序员决定的。根据组织标准,这些数字受到控制并遵循特定规则。虽然有些程序员没有遵守标准,但他们的代码却很乱;评论和行缩进也是大多数标准的一部分。