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标准才有。
- 1 回答
- 0 关注
- 198 浏览
添加回答
举报