codecamp

Fortran do 循环

Fortran 的最简单的循环语句称为 do 语句,其形式如下所示:

!!! 不设置步长,默认为 1
do 整数型变量 = 起始值, 结束值
......
......
enddo

!!! 示例 1
integer a(10)
do n = 1, 10 ! 计算 1,2,3,4,5,6,7,8,9,10
a(n) = n
enddo

!!! 设置步长,可以设置正整数和负整数,不能为 0
do 整数型变量 = 初始值, 结束值, 步长
......
......
enddo

!!! 示例 2
integer a(5)
do n = 1, 10, 2 ! 计算 1,3,5,7,9
a(nint(n/2)) = n
enddo

!!! 示例 3
integer a(5)
do n = 10, 1, -2 ! 计算 10,8,6,4,2
a(n/2) = n
enddo

 在使用 do 循环语句的时候,我们需要注意在结束循环语句后循环条件变量 n 仍然存在。如果后续计算中还使用到了相同变量,务必要进行重新初始化赋值,否则可能造成数据上的污染。我们可以拿示例 3 举个例子,当循环结束后,n 的值其实为 0 (不是 2)。虽然此时的 n 值并不满足循环继续的条件,但是已经完成了对步长的迭代计算,所以如果后续还是使用相同的变量 n,我们期待的 n 初始值与循环结束后的 n 值就可能不一样。建议在将某个变量设置为循环条件变量之后,循环外尽量不要使用同一个变量,从而避免这一可能存在的干扰。

do 循环语句实际上也可以存在嵌套,即一个 do 循环语句包含了其他的 do 循环语句,如下示例 4 所示。其中需要注意的是,在多重 do 循环语句中,循环语句的条件变量不要使用相同的,否则很可能出现了我们意料之外的问题。建议同一个 do 循环嵌套语句中使用不同的条件变量。如果不在同一个 do 循环嵌套语句中,使用相同的条件变量产生问题的可能性比较小。

!!! 示例 4
integer a(10)
integer b(10, 5)
do n = 1, 10
a(n) = n
do m = 1, 10, 2
b(n, nint(m/2)) = a(n) + m
enddo
enddo

其实在 do 循环中所指定的条件变量的初始值、结束值及步长也可以用已有值的变量来代替,如下所示。

integer m, sum
m = 10
sum = 0
do n = 1, m
sum = sum + n
enddo
Fortran 条件与循环语句
Fortran while 循环
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }