DO循环如何正常工作?
假设你有以下循环:
do i=1,10
...code...
end do
write(*,*)I
为什么打印的是I 11,而不是10?
但是当循环由于
而停止时if(something) exit
我是预期的(例如i = 7,退出因为其他一些值达到了它的极限)。
答案 0 :(得分:7)
在i
循环确定它必须终止之前,11
的值转到do
。 11
的值是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如果 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. 执行周期。 DO构造的执行周期包括按顺序重复执行的以下步骤,直到 终止:
2.1测试迭代次数(如果有的话)。如果迭代计数为零,则循环终止
2.2如果迭代次数非零,则执行循环的范围。
2.3 迭代计数(如果有)减1。 DO变量(如果有)将增加增量参数m3的值。