Fortran 77 Do Loop块说明
NUM和ARRAY都是双精度变量,不知道if块将如何执行。什么时候会停止?它究竟在做什么?如果我们到8,那么我们是否退出do循环?Fortran 77 Do Loop块说明
感谢
DO 7 I = 1,28
IF (NUM - ARRAY(I)) 8,7,7
7 CONTINUE
I=29
8 NUM = ARRAY(I)
....
....
....
....
如前所述,循环中的条件是arithmetic if statement。
我们知道(而这明确在此以前的答案说明),如果num
小于array(i)
标签8
选择,否则标签7
选择。在另外一个答案中也指出,这些都有退出循环或循环的效果。准确地说,我会继续。
DO结构有一个范围。像问题中那样的非块DO构造具有包括do
语句和DO终止语句(在这种情况下为7 continue
)之间的语句的范围。 DO终止声明是构造范围内跳转的有效目标。
当跳转到DO终止语句时,执行仍在构造的范围内。该终止语句被执行(在这种情况下,continue
,什么都不做)并且循环迭代条件再次被测试。也就是说,循环循环。
在DO构造中,跳转到构造范围之外的语句会终止构造的执行:如出口。
这个例子,那么,具有使用IF构造等价形式(与go to
秒 - 包涵)
DO 7 I = 1,28
IF (NUM < ARRAY(I)) THEN
GO TO 8
ELSE
GO TO 7
END IF
7 CONTINUE
I=29
8 NUM = ARRAY(I)
现在,因为标记7
的语句是一个continue
语句中,我们可以写为
DO 7 I = 1,28
IF (NUM < ARRAY(I)) THEN
GO TO 8
ELSE
CYCLE
END IF
7 CONTINUE
I=29
8 NUM = ARRAY(I)
这仍然是非常丑陋的(而不仅仅是因为所有的大写)。幸运的是,我们可以做得更漂亮。 i=29
语句只有在循环终止时才会执行,跳转到标有8
的语句。现在,循环索引i
控制着I = 1,28
,所以当循环终止时,索引已经是has the value29
。这个任务什么都不做(在现代的Fortran中),所以我们可以删除它。这给我们留下了
DO 7 I = 1,28
IF (NUM < ARRAY(I)) THEN
GO TO 8
ELSE
CYCLE
END IF
7 CONTINUE
8 NUM = ARRAY(I)
当我们也注意到,IF结构后面紧跟循环的结束(和所以我们并不需要显式循环),我们有
DO 7 I = 1,28
IF (NUM < ARRAY(I)) EXIT
7 CONTINUE
NUM = ARRAY(I)
或(更漂亮)
DO I = 1,28
IF (NUM < ARRAY(I)) EXIT
END DO
NUM = ARRAY(I)
所有这些例子做的是寻找在array(1:28)
比num
更大,或最早元素的值如果没有。
这就是我无法编辑标签的原因。我相信我投票结束时会有重复(有几个),但是如果我失去了锤子特权,它将不会在审查队列中获得足够的选票,而且选票将会消失。我们需要更多拥有金色标签徽章的人。 –
对于重复的目标,你有一个好的建议吗?我没有看到一个(显然),但我仍然对这个问题有近距离投票。 – francescalus
这一个https://*.com/questions/11124855/fortran-if-statement-with-numbers-labels-rather-than-another-statement已经是其他两个目标。我现在也有投票权,他们在无效时得到退款。 –
这就是所谓的算术,如果:if(a) 1,2,3
。它的意思是:如果a<0
它变为1,如果(a==0)
它去2,并且如果它(a>0)
如果(NUM-阵列(ⅰ)< 0)它进入8变为3.
在代码(退出循环并跳过另一行),否则它将转到7(循环)。
谢谢你的回答。 – LionsFan
这看起来像现代语言,例如C? – LionsFan
DO循环来自1-3行。当你在第四行时,你离开DO循环。 – gbdcool
如果我从第2行到第4行怎么办?当条件满足时?那么我走出了循环?称这是'休息'声明是否安全? – LionsFan