Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 77 Do循环块澄清_Fortran_Fortran77 - Fatal编程技术网

Fortran 77 Do循环块澄清

Fortran 77 Do循环块澄清,fortran,fortran77,Fortran,Fortran77,NUM和ARRAY双精度变量,不确定if块将如何执行。什么时候停止?它实际上在做什么?如果我们转到8,那么我们是否退出do循环 谢谢 DO 7 I = 1,28 IF (NUM - ARRAY(I)) 8,7,7 7 CONTINUE

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) 
....
....
....
....

这称为算术if:
if(a)1,2,3
。它的意思是:如果
a0)
它将变为3


在代码if(num array(i)中,如前所述,循环中的条件是一个

我们知道(这在前面的答案中已经明确说明)如果
num
小于
array(i)
则选择标签
8
,否则选择标签
7
。在另一个答案中还说明,这些标签具有退出循环或循环循环的效果。确切地说,我将继续

DO构造有一个范围。像问题中的一个非块DO构造有一个范围,由
DO
语句和DO终止语句之间的语句组成(在本例中为
7 continue
)。DO终止语句是从构造范围内进行跳转的有效目标

当跳转到DO termination语句时,执行仍在构造的范围内。将执行该终止语句(在本例中,
continue
,不执行任何操作),并再次测试循环迭代条件。也就是说,循环周期

从DO构造内部跳转到构造范围之外的语句会终止构造的执行:就像退出一样

因此,这个例子使用了IF构造(with
go to
s-bear with me)的等价形式

这仍然很难看(不仅仅是因为所有的大写字母)。幸运的是,我们可以使它更漂亮。
i=29
语句只有在循环终止时才会执行,而不会跳转到标记为
8
的语句。现在,循环索引
i
具有控制权
i=1,28
,因此,当循环自然终止时,索引已经
29
。该赋值可以执行在现代Fortran语言中什么都没有,所以我们可以删除它。这就给我们留下了

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
如果(NUM<数组(I)),则
去8号
其他的
周期
如果结束
7继续
8 NUM=数组(I)
当我们还注意到IF构造后面紧跟着循环的结束(因此我们不需要显式循环)时,我们已经知道了

DO 7 I=1,28
如果(NUM
或者(更贴切地说)

DO I=1,28
如果(NUM

此示例所做的全部工作是查找
数组(1:28)
中最早的元素的值,该值大于
num
,或
数组(29)
如果没有。

这在现代语言中会是什么样子,例如C?DO循环是从1-3行开始的。当你在第4行时,你就不在DO循环中。如果我从第2行转到第4行怎么办?当条件满足时?那么我就不在循环中了?称之为“中断”语句安全吗?这就是我无法编辑标记的原因。我确信我投了票以重复的方式结束(有几个),但如果我失去了hammer权限,它将无法在审查队列中获得足够的投票,投票将消失。我们需要更多拥有金标签徽章的人。关于重复目标,你有什么好的建议吗?我没有看到(显然),但我在这个问题上仍然有一张接近票数的票。这张票已经是另外两张的目标。我现在也有一张票,当他们无效时,他们会得到退款。但这张票更老。我同意第二张票是可能的候选人,但不是第一张。在我看来,与do范围的互动是重要的部分。(我甚至链接到关于定义算术if的问题。)关于第二个问题,我认为这实际上是一个更好的问题,因为它明确地询问了循环。谢谢你的回答。
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)
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)