最初のCALL文では、キーボードから入力された、外径(A)と内径(B)、長さ (L1)、密度(G1)を使って、体積(V)と質量(W)を計算しています。
2番目のCALL文では、直接サブルーチンに値を与えています。すなわち、外径 を8.0、内径を6.0、長さを350.0、密度を7.8として、体積(V)と質量(W)を計算 しています。
 *=======================================================
 * MAIN ROUTINE
 *=======================================================
      PROGRAM MAIN
      REAL A, B, L1, G1, V, W
      READ(5,*)A, B, L1, G1
      CALL PIPE(A, B, L1, G1, V, W)
      WRITE(6,600)V,W
      CALL PIPE(8.0, 6.0, 350.0, 7.8, V, W)
      WRITE(6, 600)V,W
  600 FORMAT('V=',E15.8, ' W=', E15.8)
      
      STOP
      END
 *=======================================================
 *     SUBROUTINE OF PIPE CALCULATION
 *=======================================================
      SUBROUTINE PIPE(X, Y, L, G, V, W)
      REAL X, Y, L, G, V, W
      V=3.14159/4.0*(X*X-Y*Y)*L
      W=V*G
      RETURN
      END
      CALL サブルーチン名(実引数並び)
仮引数並びと実引数並びは、同じ数で型でなくてはなりません。ただし、引数 の変数名は異なっても、何ら問題はありません。関数の処理の部分は、今まで 学習してきたFORTRANのプログラムを書けばよいのです。計算のみならず、 WRITE文やREAD文も書けます。
サブルーチン副プログラム内で使われた変数は、引数以外は全く、メインルー チンに影響を及ぼしません。メインルーチンと同じ名前の変数が使われていて も、その結果が反映されることはありません。
       SUBROUTINE サブルーチン名(仮引数並び)
       宣言文(引数や変数などの宣言を行う)
    
       実行文(関数の値を求めるための処理)
       RETURN
       END
 *=======================================================
 * MAIN ROUTINE
 *=======================================================
       INTEGER I,J,K,M
       I=2
       J=3
       K=4
       CALL WA(I,J,M)
       WRITE(6,601)I,J,K,M
   601 FORMAT('I=',I2,'  J=',I2,'  K=',I2,'  M=',I2)
       STOP
       END
*=======================================================
* SUBROUTINE
*=======================================================
       SUBROUTINE WA(M,N,K)
       INTEGER I,J,K,M,N
       I=99
       J=99
       K=M+N
       M=88
       N=77
       RETURN
       END
このプログラムを実行するとその結果は、
      I=88  J=77  K= 4  M= 5
となります。要するに、引数を除いて、メインルーチンとサブルーチンの変数
の格納領域は異なるということです。名前が異なっていても、実引数と仮引数
は同じ領域にデータが格納されます。一方、その他の変数は名前が同じでも、
異なった領域にデータは格納されます。