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例題: