Fortran入门教程(六)——循环结构

循环结构

1. do

do 循环需要一个整数类型的变量用作循环的控制变量,在下面的例子中,使用了变量i作为控制变量。
do 循环的语法如下

integer :: i
do i = head, tail, step
end do

head 是循环开始时 i的初值
tail 是循环结束时 i 的条件
step 是循环步长, 每次 i = i + step
例1 输出 1~10所有整数

!> program 6-1
program do_demo
    implicit none
    integer :: i
    do i = 1, 10
        write(*, *) i
    end do
end program

例2 输出 1~10所有奇数

!> program 6-2
program do_step_demo
    implicit none
    integer :: i
    do i = 1, 10, 2
        write(*, *) i
    end do
end program

2. do while

语法如下

do while (condition)
    ...
end do

该结构会执行内部的代码块直到 condition 不成立。

!> program 6-3
program dowhile_demo
    implicit none
    integer :: i
    i = 1
    do while(i < 11)
        print *, i
        i = i + 1
    end do
end program

3. do concurrent

该循环只有在循环内部没有相互依赖时才可以使用, 也就是第一次运行和第二次运行之间没有相互联系。 fortran会将这类循环进行并行运算以提高速度。

!> program 6-4
program concurrent_demo
    implicit none
    real, parameter :: pi = 3.14159265
    integer, parameter :: n = 10
    real :: result_sin(n)
    integer :: i

    do concurrent (i = 1:n)  ! Careful, the syntax is slightly different
      result_sin(i) = sin(i * pi/4.)
    end do

    print *, result_sin
end program

4. exit 和 cycle

exit : 退出当前的循环
cycle: 跳过当前次,进入下次循环

!> program 6-5
program exit_demo
    implicit none
    integer :: i

    do i = 1, 100
      if (i > 10) then
        exit  ! Stop printing numbers
      end if
      print *, i
    end do
    ! Here i = 11
end program exit_test

打印1-10所有奇数

!> program: 6-6
program cycle_demo
    implicit none
    integer :: i

    do i = 1, 10
      if (mod(i, 2) == 0) then
          cycle  ! Don't print even numbers
      end if
      print *, i
    end do
end program

5. tags

fortran 允许给循环标记上名字,并且可以在使用 exitcycle 语句时 退出或跳过指定名字的循环。

打印加法表
下面的程序中,将外层循环命名为outer_loop, 内层循环命名为innter_loop

!> program: 6-7
program tags_demo
    integer :: i, j

    outer_loop: do i = 1, 10
      inner_loop: do j = 1, 10
        if ((j + i) > 10) then  ! Print only pairs of i and j that add up to 10
          cycle outer_loop  ! Go to the next iteration of the outer loop
        end if
        print *, 'I=', i, ' J=', j, ' Sum=', j + i
      end do inner_loop
end do outer_loop
end program
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sumbrella_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值