Fortran Do循环的上界
Upper bounds of Fortran Do loops
在下面的代码中,DO循环的上界在循环中被修改为
integer :: i1, i2, n1, n2
n1 = 4 ; n2 = 1
do i1 = 1, n1
do i2 = 1, n2
print *, "i1 =", i1, "i2 =", i2
n1 = 2
n2 = 2
enddo
enddo
对于, gfortran4.8和ifor14.0给出如下结果:
i1 = 1 i2 = 1
i1 = 2 i2 = 1
i1 = 2 i2 = 2
i1 = 3 i2 = 1
i1 = 3 i2 = 2
i1 = 4 i2 = 1
i1 = 4 i2 = 2
这表明在进入每个DO循环时边界是固定的(即,尽管在循环内将n1修改为2,但i1的上界仍固定为4)。这种行为与C/c++相反,在C/c++中,对应的代码
int n1 = 4, n2 = 1;
for( int i1 = 1; i1 <= n1; i1++ )
for( int i2 = 1; i2 <= n2; i2++ )
{
printf( "i1 = %d i2 = %dn", i1, i2 );
n1 = 2;
n2 = 2;
}
为
i1 = 1 i2 = 1
i1 = 1 i2 = 2
i1 = 2 i2 = 1
i1 = 2 i2 = 2
,这是合理的,因为for循环的定义(即开始,结束和递增条件)。所以我的问题是:是否可以假设DO循环的上述行为是一般的(=由Fortran标准定义)或编译器依赖(即不同的编译器从ifort或gfortran可能表现不同)?
Fortran标准指定DO
循环的迭代次数在循环开始时固定,使用公式(至少在F95之前,当不能使用非整数循环控制表达式时)
iterations = MAX(0,INT((final-value - initial-value + step-size)/step-size)
这样做的一个后果是你看到的行为:改变任何用于控制循环体内循环的值都不会改变将要执行的迭代次数。
相关文章:
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 如何使用 do while 循环确定最高值和最低值
- do while 循环中的 if 语句以 yes 或 no 结尾
- 在 C 或 C++ 中,循环可以同时具有 "do" 和"while"部分吗?
- 使用 while 或 do while 退出循环
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- 为什么当我输入一个被接受的数字时,我的 do-while 循环没有中断?
- 为什么我的 Do-while 循环无法在C++中运行菜单
- 如果语句不会在 do - while 循环中运行
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- 如何在c++中读取do-while循环中的空白
- 将嵌套的 for 循环更改为 do-while 循环
- 如何修复不会在退出选择时终止的 do-while 循环
- 带有do函数的无限循环
- 为什么这个do-while循环每隔一个循环只写入数组?
- C++ do/while 循环和 if/else: 骰子游戏 -- 第 75 行错误:"Cout"之前的预期"While" -- 如何解决这个问题?
- 卡在链表中的无限 Do-while 循环中
- 试图调节我的 do-while 以停止在终端中退出程序.菜单不会根据需要循环使用当前语句
- 使用基本 do-while 循环求解泊松方程