// 外部定義関数の宣言 (prototype) printf(fmt, args); scanf(fmt, args); // 階乗関数 fact(n) { var r; if (n == 0) r = 1; else r = n*fact(n-1); return r; } // 端末から整数を1つ読み込む関数 // 式の中の単独の配列名は、配列領域の先頭アドレスを表す // という裏仕様を利用している。(scanf の第2引数) getInt() { var n[1]; // 大きさ1の配列 printf("N? "); scanf("%d", n); // n は n[0] のアドレス return n[0]; // scanf で読み込んだ値を返す } // メインルーチン main() { var n; printf("Enter a negative number to end.\n"); n = getInt(); while(n >= 0) { printf("%d! = %d\n", n, fact(n)); n = getInt(); } }