请问DO循环的工作原理是什么?
假设您有以下循环:
do i=1,10
...code...
end do
write(*,*)I
为什么打印的I是11而不是10?
但当循环由于一个
if(something) exit
如果 i 的取值符合预期(例如 i=7),则退出循环,因为某些其他值达到了其限制。
请问DO循环的工作原理是什么?
假设您有以下循环:
do i=1,10
...code...
end do
write(*,*)I
为什么打印的I是11而不是10?
但当循环由于一个
if(something) exit
如果 i 的取值符合预期(例如 i=7),则退出循环,因为某些其他值达到了其限制。
i
的值在do
循环之前变成了11
,这是因为条件判断语句中的结束条件在1
..10
范围内都成立,当i
变成11
时,结束条件不再成立,循环终止。因此,循环结束时,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.1 如果 loop-control 是
[ , ] do-variable = scalar-numeric-expr1 , scalar-numeric-expr2 [ , scalar-numeric-expr3 ]
1.1.1 通过分别计算 scalar-numeric-expr1、scalar-numeric-expr2 和 scalar-numeric-expr3 来确定初始参数 m1、终止参数 m2 和增量参数 m3。
1.1.2 do-variable 的值被定义为初始参数 m1。
1.1.3 确定并返回迭代次数,其值为表达式
MAX(INT((m2 –m1+m3)/m3),0)
1.2 如果省略了 loop-control,则不计算迭代次数。
1.3 在执行 DO 语句完成后,开始执行循环。
2.执行循环。DO结构的执行循环由以下步骤组成,这些步骤将重复执行,直到终止:
2.1 测试迭代计数(如果有)。如果迭代计数为零,则循环终止。
2.2 如果迭代计数不为零,则执行循环范围。
2.3 迭代计数(如果有)减一。如果存在DO变量,则增加增量参数m3的值。