Chapter 5 迴圈

Download Report

Transcript Chapter 5 迴圈

Chapter 5 迴圈
5-1 Do
程式說明
迴圈每次的增量,若增量為1,則可省略
do 10, I = 1, N, 1
…
變數I的終止數值N
I=1→2→3→…→N
10 continue
設定變數I的初值1
指定一個行代碼,兩行代碼間的
程式會變成一個迴圈
迴圈共跑N次
5-1 Do
程式說明
迴圈每次的增量2
do I = 2, N, 2
…
變數I的終止數值N
end do
設定變數I的初值2
I=2→4→6→…→N
迴圈共跑N/2次
也可以用do - end do當作一個迴圈
5-1 Do
Do使用時機
連續重複執行某一段程式碼
< Ex. 完整程式>
< Ex. 執行結果>
program ex0501
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
Do - Loop Demo
implicit none
integer :: I
integer, parameter :: N=10
do 10 I = 1, N, 1
write(*,*) 'Do - Loop Demo'
10 continue
stop
end program ex0501
5-2 Do while
程式說明
do while (logical_expr)
…
當判別式為真時,執行迴圈
end do
當判別式為假時,跳出迴圈
do while - end do之間為一個迴圈
5-2 Do while
永久迴圈
當判別式永遠成真時,會形成永久迴圈
1)
do while (1)
2)
i=5
do while(i>4)
i=i+1
end do
3)
i=4
do while(i=4)
i=i+1
end do
應改成i==4
5-2 Do while
程式流程圖
.FALSE.
logical_expr判斷式
.TRUE.
statement 1
statement 2
…
5-2 Do while
Do while使用時機
不能事先預知
會執行幾次的迴圈時
< Ex. 完整程式>
program ex0502
implicit none
integer, parameter :: answer=45
integer :: input = 0
do while (input /= answer)
write(*,*) 'answer ='
< Ex. 執行結果>
answer=
10 <輸入 1 0 [ENTER] >
answer=
45 <輸入 4 5 [ENTER] >
You are right!
read(*,*) input
end do
write(*,*) 'You are right!'
stop
end program ex0502
5-3 Cycle
Cycle使用時機
< Ex. 完整程式>
program ex0503
略過迴圈中之後的敘述,直接
implicit none
跳回迴圈的開頭來執行迴圈
integer :: i
integer, parameter :: n=10
do i = 1, n
if (i == 4) cycle
write(*, '(I3)') i
end do
stop
end program ex0503
1
2
3
5
6
7
8
9
10
< Ex. 執行結果>
當i=4時,不會被印出來
而繼續執行迴圈
5-4 Exit
Exit使用時機
直接跳出一個在運作中的迴圈
< Ex. 完整程式>
program ex0504
implicit none
integer, parameter :: answer=45
永久迴圈
integer :: input
do while (.true.)
等式input=answer成立
則跳離此迴圈
< Ex. 執行結果>
answer=
10 <輸入 1 0 [ENTER] >
answer=
45 <輸入 4 5 [ENTER] >
You are right!
write(*,*) "answer ="
read(*,*) input
if (input == answer) exit
end do
write(*,*) "You are right!"
stop
end program ex0504
5-5 具名的迴圈
< Ex. 完整程式>
program ex0506
implicit none
integer :: i, j
loop1: do i = 1,3
跳到loop2迴圈
的起頭執行程式
loop2: do j = 1,3
if(j == 2) cycle loop2
if(i == 2) exit loop1
跳出整個loop1迴圈
(也會同時跳出loop2迴圈)
< Ex. 執行結果>
( 1, 1)
( 1, 3)
write(*,'(t2,A1,I3,A1,I3,A1)') '(',i,',',j,')'
end do loop2
end do loop1
stop
end program ex0506