科学技術計算を効率的に記述できるよう、 数式をほぼそのまま表現できるように作られたのがFORTRANである。 最古クラスの言語でありながら今でも進化を続けていて、 現代風の書き方もできるが、ここでは歴史を味わう意味で Fortran77について述べる。
| INTEGER | 整数型 | 
|---|---|
| REAL | 実数型 | 
| DOUBLE PRECISION | 倍精度実数型 | 
| CHARACTER | 文字列型 | 
配列は変数宣言のあとDIMENSIONで最大要素数を指定する。
DIMENSION x(50) ! x(1)からx(50)まで DIMENSION x(0:49) ! x(0)からx(49)まで DIMENSION x(20,20) ! x(0,0)からx(20,20)まで
IFとDOループとGOTOとサブルーチンコールのみ。
IF (条件式) THEN ELSE IF (条件式2) THEN : ELSE ENDIF
関係演算子および論理演算子は以下のものが使える。
| 演算子 | 意味 | 
|---|---|
| .LT. | Less Than (<) | 
| .GT. | Grater Than (>) | 
| .LE. | Less Than or Equal(<=) | 
| .GE. | Grater Than or Equal (>=) | 
| .EQ. | Equal (==) | 
| .NE. | Not Equal (!=) | 
| .AND. | AND | 
| .OR. | OR | 
ループはDO文にて構成する。整数変数の値の変化で繰り返し回数を 制御する。FORTRAN77では繰り返し範囲の指定に文番号が必要な形式のみが、 FORTRAN95からは対応するENDDOを自動的に繰り返し範囲と見なす形式も 利用できる。
         DO 文番号 整数変数 = 開始値, 終了値 [, 刻み]
	    繰り返し処理
文番号   CONTINUE
CONTINUEはその行に文番号を置くための場所とりであり、
意味のある次の処理を書いてもよい。文番号は重複がないよう把握管理する
必要がある。
ENDDOを用いる書式には文番号は必要ない。
         DO 整数変数 = 開始値, 終了値 [, 刻み]
	    繰り返し処理
         ENDDO
ループを途中で抜ける場合、FORTRAN77ではGOTO文でループ範囲外の行番号に ジャンプするしかない。
      DO 10 I=1,100
        処理……
	IF (何かの条件) GOTO 110
  100 CONTINUE
  110 次の処理
Fortran95ではループを抜けるEXITが利用できる。
関数の定義はFUNCTIONで、サブルーチンの定義は
SUBROUTINEで開始する。いずれも参照渡しの引数を
取ることができる。
      [型] FUNCTION 関数名(引数リスト)
        定義本体
        関数名 = 値
      END
あるいは
      SUBROUTINE 関数名(引数リスト)
        定義本体
      END
関数とサブルーチンの違いは、呼び側に値を返すかどうかのみで、 関数の返却値を設定するには関数名と同名変数に値を代入する。 返す値の型は関数定義の直前に宣言する。
INTEGER FUNCTION foo(x) 処理…処理… foo = 結果の値(この場合INTEGER) END
型を省略すると関数名の先頭 英字の暗黙の型ルールに従う。
入出力は READ, WRITE で行なう。
READ(デバイス, フォーマット) [読み込み先変数...] WRITE(デバイス, フォーマット) [読み込み先変数...]
デバイスに * を指定すると標準入出力が用いられる。
フォーマットに * を指定すると「適当に」値が解釈される。
フォーマットは「個数 型 桁数」の並びを指定する。
例:
| I3 | 3桁の整数 | 
| F12.5 | 12桁(小数点以下5桁)の実数 | 
| E12.5 | 指数表記で12桁(小数点以下5桁)の実数 | 
| 3A12 | 3個の「12桁の文字列」 | 
整数変数Iを3桁で、実数変数Xを10桁(小数以下3桁)で出力するときは 以下のようにする。
WRITE(*, '(I3, F10.3)') I, X
改行なしで出すには第3引数に advance='no' を指定する。
WRITE(*, '(A)', advanced='no') 'Input N: ' READ(*, *) N
いくつか例を示す。
C
C     Hello World!
C
      PROGRAM main
      WRITE(*,'(A)') 'Hello, world!'
      END PROGRAM main
C
C     Hello World! x 10 times
C
      PROGRAM main
      DO 10 I=1, 10
         WRITE(*,'(A)') 'Hello, world!'
 10   CONTINUE
      END PROGRAM main
2重ループで九九の表を出力するプログラムを作成せよ。
FizzBuzzプログラムを作成せよ
解答例: kuku.f