声明:本博文翻译自:https://www.tutorialspoint.com/fortran/fortran_loops.htm
编程语言提供各种控制结构,允许更复杂的执行路径。
循环语句允许我们多次执行一个语句或一组语句。
fortran提供了下面三种类型循环。分别是do loop; do while loop; nested loop
下面进行详解:
1. do loop
do loop的一般形式为:
do var = start, stop [,step]
! statement(s)
…
end do
这里需要注意:循环变量var必须是整型;start为循环变量初值;stop为循环变量终值;step为循环变量的增量。当省略step时,默认为1。注意:step也可以是负数,此时start > stop.
示例代码2如下:
Program main
implicit none
integer :: i
do i = 1, 10
write(*,'(1x,g0)') i
end do
End program main
用ivf,执行结果为:
1
2
3
4
5
6
7
8
9
10
示例代码2:用来计算10!
Program factorial
implicit none
integer :: nfact = 1
integer :: n
do n = 1, 10
nfact = nfact * n
write(*,'(1x,g0,3x,g0)') n, nfact
end do
end program factorial
用ivf,执行结果如下:
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
2. do while loop
当给定条件为真时,它重复执行一个或一组语句。它在执行循环体之前进行条件测试。
基本语法如下:
do while (logical expr)
statements
end do
示例代码如下:
Program factorial
implicit none
integer :: nfact = 1
integer :: n = 1
do while (n <= 10)
nfact = nfact * n
n = n + 1 !.. do while loop多了这一句
write(*,'(1x,g0,3x,g0)') n, nfact
end do
End program factorial
执行结果如下:
2 1
3 2
4 6
5 24
6 120
7 720
8 5040
9 40320
10 362880
11 3628800
3. nested loops
此种循环方式叫多重循环。一个简单的示例如下:
iloop: do i = 1, 3
print*, "i: ", i
jloop: do j = 1, 3
print*, "j: ", j
kloop: do k = 1, 3
print*, "k: ", k
end do kloop
end do jloop
end do iloop
此处给出示例代码:
Program nestedLoop
implicit none
integer:: i, j, k
iloop: do i = 1, 3
jloop: do j = 1, 3
kloop: do k = 1, 3
print*, "(i, j, k): ", i, j, k
end do kloop
end do jloop
end do iloop
End program nestedLoop
用ivf,执行结果如下:
(i, j, k): 1 1 1
(i, j, k): 1 1 2
(i, j, k): 1 1 3
(i, j, k): 1 2 1
(i, j, k): 1 2 2
(i, j, k): 1 2 3
(i, j, k): 1 3 1
(i, j, k): 1 3 2
(i, j, k): 1 3 3
(i, j, k): 2 1 1
(i, j, k): 2 1 2
(i, j, k): 2 1 3
(i, j, k): 2 2 1
(i, j, k): 2 2 2
(i, j, k): 2 2 3
(i, j, k): 2 3 1
(i, j, k): 2 3 2
(i, j, k): 2 3 3
(i, j, k): 3 1 1
(i, j, k): 3 1 2
(i, j, k): 3 1 3
(i, j, k): 3 2 1
(i, j, k): 3 2 2
(i, j, k): 3 2 3
(i, j, k): 3 3 1
(i, j, k): 3 3 2
(i, j, k): 3 3 3
除了上面介绍的三种循环类型,还有三种循环控制语句。分别是exit;cycle;stop
exit: 跳出离exit最近的外层循环。如果循环有署名,也可以跳出对应的署名循环
示例代码:
Program exittest
implicit none
integer:: i, j, k
iloop: do i = 1, 3
jloop: do j = 1, 3
kloop: do k = 1, 3
print*, "(i, j, k): ", i, j, k
if (k==2) then
exit jloop !.. k = 2时,跳出jloop
end if
end do kloop
end do jloop
end do iloop
End program exittest
用ivf,执行结果如下:
(i, j, k): 1 1 1
(i, j, k): 1 1 2
(i, j, k): 2 1 1
(i, j, k): 2 1 2
(i, j, k): 3 1 1
(i, j, k): 3 1 2
cycle: cycle类似于exit,都在循环体内部。一般与if语句搭配使用。当条件满足时,cycle跳过循环,注意不是跳出循环。这一点与exit不同。
示例代码如下:
Program cycle_example
implicit none
integer :: i
do i = 1, 20
if (i == 5) then
cycle
end if
print*, i
end do
End program cycle_example
用ivf,执行结果如下:
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
stop: stop代表程序的终止。
示例代码:
Program main
implicit none
integer :: i
do i = 1, 10
if ( i == 5 ) stop
print*, i
end do
End program main
执行结果为:
1
2
3
4
Fortran:do循环
最新推荐文章于 2024-08-15 14:33:48 发布