Fortran:do循环

声明:本博文翻译自: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

你可能感兴趣的:(FortranNote,Fortran教程)