NUM和ARRAY都是双精度变量,不确定if块的执行方式。什么时候会停止?它到底在做什么?,如果我们去8,那么我们是否退出了do循环?
谢谢
DO 7 I = 1,28
IF (NUM - ARRAY(I)) 8,7,7
7 CONTINUE
I=29
8 NUM = ARRAY(I)
....
....
....
....
答案 0 :(得分:1)
如果:if(a) 1,2,3
,则称为算术运算。它表示:如果a<0
为1,则(a==0)
为2,如果(a>0)
则为3。
如果(num-array(i)&lt; 0)它变为8(退出循环并跳过另一行),否则它变为7(循环)。
答案 1 :(得分:1)
如前所述,循环中的条件是arithmetic if statement。
我们知道(并且在此前的答案中已明确说明),如果num
小于array(i)
,则选择标签8
,否则标记{{1被选中了。它还在其他答案中说明这些具有退出循环或循环循环的效果。确切地说,我会继续。
DO构造具有范围。像问题中那样的非块DO构造的范围包括7
语句和DO终止语句之间的语句(在本例中为do
)。 DO终止语句是从构造范围内跳转的有效目标。
当跳转到DO终止语句时,执行仍然在构造的范围内。执行终止语句(在这种情况下,7 continue
,什么都不做),并再次测试循环迭代条件。也就是说,循环循环。
在DO构造中,跳转到构造范围之外的语句会终止构造的执行:就像退出一样。
然后,这个例子具有使用IF构造的等效形式(continue
s - 跟我一起承担)
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
,因此当循环自然终止时,索引已经has the value I = 1,28
。该任务没有任何作用(在现代Fortran中),因此我们可以删除它。这让我们留下了
29
当我们注意到IF结构紧跟循环结束后(因此我们不需要明确循环)我们有
DO 7 I = 1,28
IF (NUM < ARRAY(I)) THEN
GO TO 8
ELSE
CYCLE
END IF
7 CONTINUE
8 NUM = ARRAY(I)
或(更好)
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
。