fortran if循环条件中只有变量是什么意思

作者&投稿:邸娥 (若有异议请与网页底部的电邮联系)
fortran 里面 if语句里面的条件还可以嵌套循环吗~

real a(8)
integer i , j
i = 0
do j = 1, 8
if(a(j) == 0) then
i = i + 1
endif
enddo
if(i == 8) then
.........!符合条件,进行下一步
else
.........!不符合条件,跳回
endif

.




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标准才有。

这是逻辑判断语句,就是0和1代表真伪。如果IDD1是0的话,if是假的,不执行if后面跟随的语句;如果IDD1是1的话(貌似只要不是0的数都行),if语句为真,执行if后的语句

IDD1小于0执行1080,IDD1等于0执行1070,IDD1大于0执行1080

IDD1=1,转1080
IDD1=2,转1070
IDD1=3,转1080


高要市15156205797: fortran if循环条件中只有变量是什么意思 -
系蕊葡萄: IDD1小于0执行1080,IDD1等于0执行1070,IDD1大于0执行1080

高要市15156205797: 在fortran中,单do循环放在if语句里面的时候该怎么办? -
系蕊葡萄: 类似这样:If(条件) then Do i = 1, N 循环体 End Do End If

高要市15156205797: fortran 里面 if语句里面的条件还可以嵌套循环吗 -
系蕊葡萄: real a(8) integer i , j i = 0 do j = 1, 8 if(a(j) == 0) then i = i + 1 endif enddo if(i == 8) then .........!符合条件,进行下一步 else .........!不符合条件,跳回 endif

高要市15156205797: fortran和c语言里do while语句是否有区别? -
系蕊葡萄: 【C语言】while只有条件成立才执行循环体 do while无论条件成立与否,都至少要执行一次循环体! 【fortran】里面貌似只有do while,从使用上说,可以肯算是c语言的while,因为fortran要首先判断条件.关于FORTRAN中的循环结构可以参考:至于C中的循环结构:(个人推荐一份不错的博文)

高要市15156205797: C++问题.一个for循环之中只有一个if语句,比如100次,n=1的判断不成立,那么是继续往下循环?还是判断n=2直到if条件成立?
系蕊葡萄: 似乎明白了你的意思可以告诉你if语句的条件不管成立与否都不会影响循环体的执行(除非你在if语句里写了跳转的语句) 循环体是否继续循环只有循环条件才能决定.

高要市15156205797: Fortran循环中时间步长t只能为0.01其他数程序运行都跑死 -
系蕊葡萄: 这个跟Fortran无关.不知道题主算的是什么,目测是流体、温度、浓度、气象之类的数值模拟.这一类数值计算的时候数值步长的设定是有要求的.因为设定的时间步长要同时满足Von Neumann条件和CFL条件,否则可能会出现数值震荡或者模型直接崩溃掉的现象.若是非要改时间步长,解题思路无非有两种,一种是扩大模型的网格大小直到满足上述的两个条件,第二种就是在程序内部修改,加约束条件.可行性的话,第一个要高于第二个.

高要市15156205797: fortran中的if循环嵌套问题 -
系蕊葡萄: 当然可以 就你上面的if嵌套是完全正确的.

高要市15156205797: fortran if 的使用 -
系蕊葡萄: 语法就是这样的. 比如: if (a(i,1).gt.amax) amax=a(i,1) 是对的. 如果换成另一种形式,写成 if (a(i,1) then.gt.amax) amax=a(i,1) endif. 也是对的.

高要市15156205797: 一个for循环中有一个if语句,当满足if的判断条件时,会执行break,这个时候是继续执行for -
系蕊葡萄: break是结束整个循环体,根据你的描述应该整个循环都退出;拓展一下,如果你用的continue就是结束单次循环,只会退出if,然后继续进行for的循环!望采纳

高要市15156205797: [FORTRAN] DO WHILE的条件里.or.没有作用 -
系蕊葡萄: 因为任何一个数都不可能同时等于1,2,3 所以,不等于1,不等于2,不等于3必定至少同时满足一个(实际上是两个) 所以do 会一直执行.这是逻辑问题.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网