5

How do DO loops work exactly?

Let's say you have the following loop:

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

write(*,*)I

why is the printed I 11, and not 10?

But when the loop stops due to an

if(something) exit

the I is as expected (for example i=7, exit because some other value reached it's limit).

4

2 回答 2

7

igo to的值11do循环确定它必须终止之前。的值11i导致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

在这种情况下显然i7如此。

于 2013-08-09T12:30:51.400 回答
1

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

以下步骤按顺序执行:

  1. 循环启动

    1.1 如果循环控制

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

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

    1.1.2 do 变量由初始参数m1的值定义。

    1.1.3迭代计数成立,是表达式的值

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

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

    1.3 DO语句执行完毕后,开始执行循环。

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

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

2.2 如果迭代计数不为零,则执行循环的范围。

2.3迭代计数(如果有)减一。DO 变量(如果有)按增量参数 m3 的值递增。

于 2013-08-11T15:14:59.927 回答