Top プログラム課題集


乱数生成
下記は乱数生成処理を使用して、サイコロの出目を表示するプログラムのソースコードです。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
srand((unsigned int)time(NULL));

// サイコロの出目を表示する
printf("サイコロの出目は%dです\n",rand() % 6 + 1);

return 0;
}

上記の内容について、簡単に解説します。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
上記は理解せずにとりあえず、「魔法の言葉」と思って使ってもらっても大丈夫ですが、
解説しておきます。

「stdlib.h」は「srand」「rand」の宣言が記載されており、
「srand」「rand」を使うために必要です。

「stdio.h」は「printf」の宣言が記載されており、
「printf」を使うために必要です。

「time.h」は「time」の宣言が記載されており、
「time」を使うために必要です。


srand((unsigned int)time(NULL));
上記もほとんど魔法の言葉として使ってもらっても大丈夫です。
でも、とりあえず簡単に解説します。
この1行には説明するべきものが二つあります。
「srand」と「time」です。

「srand」は乱数系列の初期化処理を行います。
よく分からないと思うので、実験してみましょう。
実験方法は簡単です。この行を消して、ビルド→実行してみて下さい。
何度か実行してみるとわかりますが、サイコロの出目が同じになります。
誤解のないように説明しておくと、
printf("サイコロの出目は%dです\n",rand() % 6 + 1);
上記を、下記のように複数回書くと、ランダムで表示されます。
(6と5しか表示されていないのはたまたまです)
printf("サイコロの出目は%dです\n",rand() % 6 + 1);
printf("サイコロの出目は%dです\n",rand() % 6 + 1);
printf("サイコロの出目は%dです\n",rand() % 6 + 1);
printf("サイコロの出目は%dです\n",rand() % 6 + 1);
printf("サイコロの出目は%dです\n",rand() % 6 + 1);

実行例
「time(NULL)」はグリニッチ標準時(GMT)の1970年 1月 1日の00:00:00 から現在までの経過時間を返します。
単位は秒です。関数の戻り値と引数に設定される値は同じものです。

つまり、この1行は実行時の時間で乱数系列を初期化してします。


printf("サイコロの出目は%dです\n",rand() % 6 + 1);
上記処理で説明するべきは「rand」の使い方です。
「rand」は乱数系列に従って、乱数を出力します。
今回はサイコロのため、1~6の間にする必要がある。
そのために、「%6」で6で割った余りを求めます。
これだけだと、0~5になります。それを1~6にするために、「+1」をしています。

説明は以上です。