以下に示すのは乱数を生成するプログラムの例です。
乱数の生成においては種(seed)となる値を元にし、逐次的に乱数を生成していきます。
そのため、乱数をつくる関数の中で、前の乱数の値を保持しておく必要があります。
以下のプログラムではそれを大域変数を使って実現しています。
<問題>:
しかしながら、この実現ではプログラム本体では知る必要のないnextという種となる値を記憶する変数を用意する必要があり、不必要な変数を外部に見せているという意味で、スマートなプログラムではありません。これを、静的変数を利用して実現してみなさい。
- (a)プログラムリスト
#include <stdio.h> unsigned long next; unsigned int random(int k, int m); int main(void) { int seed, i; scanf ("%d", &seed); random (0, seed); for (i = 0; i < 100; i++) { printf ("%d\n", random (1, seed)); } } unsigned int random(int k, int m) { if (k == 0) { next = (unsigned long)m; } else { next = next * 1103515245L + 12345; } return (unsigned int)(next / 65536L) % 32768; /* 0〜32767の乱数 */ }