循环后Fortran DO循环索引的值

时间:2013-08-09 12:25:09

标签: loops fortran do-loops

DO循环如何正常工作?

假设你有以下循环:

do i=1,10
...code...
end do

write(*,*)I

为什么打印的是I 11,而不是10?

但是当循环由于

而停止时
if(something) exit

我是预期的(例如i = 7,退出因为其他一些值达到了它的极限)。

2 个答案:

答案 0 :(得分:7)

i循环确定它必须终止之前,11的值转到do11的值是i的第一个值,导致1 .. 10的结束条件失败。因此,当循环完成时,i的值为11

加入伪代码形式:

1) i <- 1
2) if i > 10 goto 6
3) ...code...
4) i <- i + 1
5) goto 2
6) print i

当进入第6步时,i的值为11。当您输入if语句时,它变为:

1) i <- 1
2) if i > 10 goto 7
3) ...code...
4) if i = 7 goto 7
5) i <- i + 1
6) goto 2
7) print i

在这种情况下,i显然是7

答案 1 :(得分:0)

我想强调它是一个迭代计数,它控制循环执行范围的次数。有关详细信息,请参阅第98-99页"Fortran 90 ISO/IEC 1539 : 1991 (E)"

按顺序执行以下步骤:

  1. 循环启动

    1.1如果 loop-control

        [ , ] do-variable = scalar-numeric-expr1 , scalar-numeric-expr2 [ , scalar-numeric-expr3 ]
    

    1.1.1初始参数 m1 ,终端参数 m2 ,增量参数 m3 是通过评估标量数字来建立的分别为expr1,scalar-numeric-expr2和scalar-numeric-expr3

    1.1.2 do-variable由初始参数 m1 的值定义。

    1.1.3 迭代计数已建立,是表达式

    的值
        MAX(INT((m2 –m1+m3)/m3),0)
    

    1.2如果省略循环控制,则不计算迭代计数。

    1.3执行DO语句完成后,执行周期开始。

  2. 2. 执行周期。 DO构造的执行周期包括按顺序重复执行的以下步骤,直到 终止:

    2.1测试迭代次数(如果有的话)。如果迭代计数为零,则循环终止

    2.2如果迭代次数非零,则执行循环的范围。

    2.3 迭代计数(如果有)减1。 DO变量(如果有)将增加增量参数m3的值。