Fortran语言基础 - 图文 联系客服

发布时间 : 星期四 文章Fortran语言基础 - 图文更新完毕开始阅读f58fff49fe4733687e21aa93

山东建筑大学

do k=1,10 {程 序 代 码} end do end do end do

DO循环有明确的循环次数,在已知需要循环的次数时使用。若事先无法知道循环的次数,采用下面的循环方式。

4.2 DO WHILE循环

语法:

do while (逻辑表达式) 循环体 end do

例 利用循环计算2+4+6+8+10

program ex0604 implicit none

integer, parameter :: limit=10 ! 计数器的上限 integer counter ! 计数器 integer :: ans = 0 ! 拿来累加使用 counter = 2 ! 设定计数器初值 do while( counter <= limit ) ans = ans + counter

counter = counter + 2 ! 计数器累加 end do write(*,*) ans stop end

例 猜体重

program ex0605

29

数值分析程序设计——Fortran基础

implicit none

real, parameter :: weight=45.0 real, parameter :: e = 0.001 real :: guess = 0.0

do while( abs(guess-weight) > e ) write(*,*) \ read(*,*) guess end do

write(*,*) \ stop end

Do While循环使用时应当注意正确设置循环判断表达式,以免进入死循环。

4.3 循环的流程控制

4.3.1 CYCLE命令

CYCLE命令可以略过循环的程序模块中,在CYCLE命令后面的所有程序代码,直接跳回循环的开头来进行下一次循环。

例 假设某大楼共有9层,但电梯在4层不停,试写一个程序仿真大楼电梯从一层到九层的信号显示情况。

program ex0606 implicit none integer :: dest = 9 integer floor do floor=1, dest if ( floor==4 ) cycle write(*,*) floor end do stop end

30

山东建筑大学

4.3.2 EXIT命令

EXIT的功能是直接跳出当前循环。 例 猜体重

program ex0607 implicit none

real, parameter :: weight=45.0 real, parameter :: error=0.0001 real :: guess = 0.0

do while( .true. ) !循环条件永远成立 write(*,*) \ read(*,*) guess

if ( abs(guess-weight)

write(*,*) \ stop end

4.3.2 署名的循环

循环署名可以在编写程序时,明确知道END DO这个描述的位置是否正确。

program ex0609 implicit none integer :: i,j loop1: do i=1,3 loop2: do j=1,3

if ( i==3 ) exit loop1 ! 跳离loop1循环 if ( j==2 ) cycle loop2 ! 重做loop2循环 write(*, \ end do loop2 end do loop1 stop

31

数值分析程序设计——Fortran基础

end

4.4 循环的应用

循环是程序编写时不可缺少的工具之一。下面通过几个实例,说明循环的使用方法。

例1 计算等差数列1+2+3+4+…+99+100 program ex0610 implicit none integer counter integer :: ans = 0 do counter = 1, 100 ans = ans + counter end do write(*,*) ans stop end

执行结果:5050

例2 计算Fibonacci数列。费氏数列的规则为:fn?fn?1?fn?2。

program ex0611 implicit none integer counter integer :: fn_1 = 1 integer :: fn_2 = 0 integer :: fn = 0 write(*,*) fn_2 write(*,*) fn_1 do counter = 3, 10 fn = fn_2 + fn_1 write(*,*) fn

32

f0?0,f1?1,当n?1时