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

例:DO 3 I=1,20 IF(I>10)I=I+1 X=5*I ..... 3 CONTINUE 在这个循环里,能不能实现IF语句?或者用其它的方法来实现?

catspeake
浏览 202回答 1
1回答

素胚勾勒不出你

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