为了账号安全,请及时绑定邮箱和手机立即绑定

求问在Fortran里,关于DO循环中循环变量的问题?该如何解决?

求问在Fortran里,关于DO循环中循环变量的问题?该如何解决?

C++
catspeake 2022-06-04 13:06:27
例:DO 3 I=1,20 IF(I>10)I=I+1 X=5*I ..... 3 CONTINUE 在这个循环里,能不能实现IF语句?或者用其它的方法来实现?
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

DO+计数器变量
的结构,是Fortran里面非常特殊的一种循环结构,也是许多有其它语言基础的人开始学Fortran时很容易迷惑不解的地方。
DO
label
I=min,
max,
step
……
……
label
continue
或者
DO
I=min,
max,
step
……
……
END
DO
都是DO+计数器变量
结构,它们的执行过程可能出乎许多人的意料,是先根据
(max-min)/step
+1
计算好要循环多少次,然后一股脑的执行这么多次。你可以在循环体中引用这个变量,你甚至可以用非整型变量来当计数器(编译器自动给你进行变量类型转换,然后按整型计算次数。)
我这样解释一下原理,你就应该明白为什么不允许你在循环体内随便更改计数器变量了吧……这一特性很奇怪,不过也确实为Fortran带来了方便手工/自动并行化和编译器级别的自动优化加速等等好处。
=============================================================
大部分情况下,你应该利用上述特性,更高级一点的还有隐DO循环等。但如果你确实需要在循环体中改写计数器变量的值,那么不应该用上述“DO+计数器变量”的循环结构,而应该是
DO
……
……
if(循环终止判断)
exit
END
DO
这种无计数器变量的DO循环结构。你可以把你要写的循环改写成类似于
+++++++++++++++++++++++++
i
=
1
DO
if(i>10)
i=i+1
x=5*i
……
i=i+1
if(i>20)
exit
END
DO
+++++++++++++++++++++++++
或者,如果你还在看谭浩强那本Fortran77的破书的话,趁早扔掉改学Fortran90/95吧,在Fortran90以后开始支持——
DO
WHILE
(判断)
……
……
END
DO
的结构,类似于C/C++语言的while结构,用这种结构可以写得更简单
+++++++++++++++++++++++++
i=1
DO
WHILE
(i
<=
20)
if(i>10)
i=i+1
x=5*i
……
i=i+1
END
DO
+++++++++++++++++++++++++
事实上上述exit和do
while都是Fortran77标准中没有的,Fortran90标准才有。

 


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信