C言語 異なる乱数を取得






スポンサードリンク

先日【 rand 】及び【 srand 】での乱数取得方法を説明させて頂きました。
本日は【 time 】関数を使って実行する度に異なる乱数を発生させる方法に付いて説明させて頂きたいと思います。

乱数を発生させる前に【 srand() 】関数で時間をの戻り値を使って、乱数を初期化すれば、異なる乱数を取得する事ができます。以下の記述は定番との為、覚えておくといいようです。

srand((unsigned)time(NULL));


※【 time() 】関数を使用するには【 #include<time.h> 】ヘッダ宣言する必要があります。

サンプル

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   double i;
   srand((unsigned)time(NULL));
   i=rand();
   printf("%f\n",i);

return 0;
}

解説
【 rand() 】関数で乱数を発生させる前に、【srand()】による乱数の初期化を行います。
ただ【 srand(5) 】等のように数値を指定してしまうと、同じ値が出力されてしまいますので、
実行時間を元に乱数を発生させる定番の記述【 srand((unsigend)time(NULL));  】を乱数を発生させる前に記述すれば
毎回実行時に、時間を元に乱数を発生させる事が出来るようになります。
乱数を実行させるサンプル
上記の実行結果
微妙に異なりますが、それぞれ取得した乱数の結果が異なります。


乱数で遊んでみる。
サイコロの目を出力して、おみくじのサンプルを作って見ました。
(※perlでよく出るサンプルです)
【 rand 】0〜32768乱数を発生させる数学関数を使い、6の剰余(割った余り)を求めさせます。すると0〜5をランダムに出力させる事が可能になります。それをさいころ風にさせる為、+1としています。
剰余の計算方法に付いてはこちらを参照してください。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   int i;
   srand((unsigned)time(NULL));
   i=rand()%6+1;

   if(i==1){
   printf("大凶\n");
   }
   else if(i==2){
   printf("凶\n");
   }
   else if(i==3){
   printf("大吉\n");
   }
   else if(i==4){
   printf("吉\n");
   }
   else{
   printf("末吉\n");
   }

return 0;
}

上記の解説図
変数【 i 】(取得する乱数は整数になるのでint型になります)に【 rand()%6+1 】にて1〜6までの値を発生させ代入し
【 if 】分にてそれぞれの結果を出力しています。分岐の詳細についてはこちらを参照してみて下さいね

上記の実行結果です。
上手く異なる乱数を取得し、出力されていることがわります。


簡単ですが説明は以上です

あかかげまるのC言語入門はこちら!!

スポンサードリンク

パソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール

 Subscribe in a reader


ページトップへ