S = 0
N = 1
10 IF ( N .LE. 100 ) THEN
S = S + N
N = N + 1
GO TO 10
END IF
PRINT *, S
前例改用DO 迥圈, 則更為簡明:
S = 0
DO 10 N = 1, 100
S = S + N
10 CONTINUE
PRINT *, S
假如計算 2+4+6+...+100,即 N 每次增2, 則DO 敘述應改為
DO 10 N = 2, 100, 2
DO 敘述的一般格式:
DO [label] I = e1, e2, e3
I 控制變數 Control variable
e1 初值 Begin range
e2 終值 End range
e3 增值 Stride
DO I = e1, e2, e3
...
END DO
例題:
Sum_of_Integers
例題 : 計算 1+2+3+...+n 的總和,總和大於 LIMIT 時,n 最小是多少?
由於控制變數的終值未知,使用 DO 迥圈設計時比較不方便。 這就要使用 DO WHILE 迥圈設計。
PROGRAM ADDER1
INTEGER NUMBER, SUM, LIMIT
PRINT *, 'ENTER VALUE 1 + 2 + ... + ? IS TO EXCEED'
READ *, LIMIT
NUMBER = 0
SUM = 0
* While SUM does not exceed LIMIT, increment NUMBER and add to SUM
DO WHILE (SUM .LE. LIMIT)
NUMBER = NUMBER + 1
SUM = SUM + NUMBER
END DO
PRINT *, '1 + ... +', NUMBER, ' =', SUM, ' >', LIMIT
END
例題:
注意 : 有的Fortran 編譯程式不接受 DO WHILE 敘述,就要用 IF
和 GO TO 敘述來實現。
10 IF (SUM .LE. LIMIT) THEN
NUMBER = NUMBER + 1
SUM = SUM + NUMBER
GO TO 10
END IF
例題:
FORTRAN 90 -- 多重選擇可使用CASE,例如
SELECT CASE (SCORE)
CASE (90:100)
PRINT * 'A'
CASE (80:99)
PRINT * 'B'
CASE (70:79)
PRINT * 'C'
CASE (60:69)
PRINT * 'D'
CASE (0:59)
PRINT * 'F'
CASE DEFAULT
PRINT * 'OUT OF RANGE.'
END SELECT
WHILE ( condition ) DO ... ENDDO
================================
10 CONTINUE
IF ( .NOT. condition ) GOTO 20
...................
迥 圈 主 體
...................
GOTO 10
20 CONTINUE
有時候條件的測試必須在執行迥圈主體之後:
DO ... WHILE ( condition )
==========================
10 CONTINUE
...................
迥 圈 主 體
...................
IF ( condition ) GOTO 10
例題 : 計算平均誤失時間
PROGRAM FAIL3
INTEGER COUNT, RESPON
REAL FAILTM, SUM, MEAN
SUM = 0
COUNT = 0
* Read fail times, count and sum them until there are no more
10 CONTINUE
PRINT *, 'ENTER FAIL TIME'
READ *, FAILTM
COUNT = COUNT + 1
SUM = SUM + FAILTM
PRINT *, 'MORE (0 = NO, 1 = YES)'
READ *, RESPON
IF (RESPON .NE. 0) GO TO 10
* Calculate and display mean time to failure
IF (COUNT .GT. 0) THEN
MEAN = SUM / COUNT
PRINT *
PRINT *, 'NUMBER OF FAIL TIME READINGS:', COUNT
PRINT *, 'MEAN TIME TO FAILURE:', MEAN
ELSE
PRINT *, 'NO FAIL TIMES WERE ENTERED.'
END IF
END
例題: