プログラムを起動すると、以下のようになるものを想定している。
% ./kazuate 1〜10までの数を当てて下さい。 どの数だと思いますか?: 3 違うなあ。 どの数だと思いますか?: 8 違うなあ。 どの数だと思いますか?: 5 ビンゴ!!
メッセージは自分で面白おかしく適当に考えて良い。余裕があれば、
などの拡張を加えると良い。
乱数(厳密には擬似乱数)を発生するには、random() 関数を
使う。random() 関数は、呼ぶごとに long 型の
整数である擬似乱数を作って返してくれる。
random() 関数の利用には、
#include <stdlib.h>
が必要である。10個の乱数を表示するプログラムは以下のようになる。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i; /* ループ用変数 */
for (i=0; i<10; i++) {
printf("%ld\n", random());
}
}
ただし、実際に実行してみれば分かるが random() 関数は
何度やっても同じ結果が返って来る。違う結果を返させたいときには
srandom()関数に種となる数値を与える。
srandom(50);
これも、50などの定数を与えると毎回同じ乱数の種になるので、普通は
現在時刻をsrandom関数に与える。現在時刻を得る関数は
time() 関数で、time(NULL) とすると、
現在時刻が秒で得られる。time()関数の利用には
#include <time.h>
が必要である。まとめると、乱数の種を毎回違うものにして乱数を 利用するには、以下のようになる。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i; /* ループ用変数 */
srandom(time(NULL));
for (i=0; i<10; i++) {
printf("%ld\n", random());
}
}
発生した乱数を指定した範囲内の整数におさめたいときは、割り算の余り(剰
余)である % 演算をすれば良い。自然数Nの剰余を求めると
かならず余りは 0〜N-1 になる。0〜9の乱数を10個求めるプログラム
random3.cは以下のようになる。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i; /* ループ用変数 */
srandom(time(NULL));
for (i=0; i<10; i++) {
printf("%ld\n", random()%10);
}
}
もし、1〜10の乱数を作りたかったら、rand()%10 の
結果に1を足せば良い。