int rand(void)
この関数は0以上RAND_MAX以下のひとつの整数を返します。
RAND_MAXはstdlib.hの中で大抵の場合、
#define RAND_MAX 0x7FFF
と定義されています。0x7FFFは10進数で32767です。

しかし、乱数と言ってもこの関数だけだと、計算する元の数(種)が同じなので、毎回同じ数列しか発生しない。そこで、randの種を変える関数があります。
void srand(unsigned int seed)
この関数によって、randの種がseedになります。

これだけでも、seedの値が毎回同じだと、出てくる数列が同じになってしまいます。そこで、よく使われるのが、
srand((unsigned int)time(NULL));
という書き方です。time(NULL)は、1970年1月1日からの経過秒を返す関数です。seedにtime(NULL)を入れることで、実行した時間によって常に違う種を与えることができるようになりました。

※(unsigned int)というのは、time関数が返す値を強制的にunsigned int型に変えるキャストというものです。


[References]
例題で学ぶはじめてのC言語/大石 弥幸
(P.150-152,158-160)


にほんブログ村 資格ブログ IT系資格へ
にほんブログ村
人気ブログランキングへ