C言語で乱数の作成
この記事では、C言語で乱数を作成する方法について記載する。
1. 目的
・C言語で乱数(ランダムな数値)を生成する方法について記載する。
目次
2. 乱数を作成する方法
2.1数値を文字列に変換する関数
・rand関数
・必要ヘッダファイル:stdib.h
2.2 使用方法:rand 関数
(1) rand関数を実行し、その値を変数に入れる。
rand();
2.3 プログラム作成(rand関数)
乱数の作成
#include <stdio.h> #include <stdlib.h> int main(void){ // Your code here! printf("%d",rand()); }
実行結果:https://paiza.io/projects/_zR7scEbuLgiFpkIFtOBYg?language=c
#include <stdio.h> #include <stdlib.h> int main(void){ // Your code here! int a; a = rand(); printf("a=%d",a); }
実行結果:https://paiza.io/projects/_zR7scEbuLgiFpkIFtOBYg?language=c
※ただ、これだけだとrandで生成される値は、何回実行しても同じ乱数が生成される。
実行ごとに違う乱数を生成する場合は、初期化する必要がある。
3. 乱数の初期化方法
3.1 乱数を初期化する関数
・srand関数とtime関数
・必要ヘッダファイル:time.h
srand(time(NULL));
3.2 プログラムの作成(乱数作成と初期化)
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ // Your code here! int a; ///現在の時間で乱数を初期化 srand(time(NULL)); a = rand(); printf("a=%d",a); }
結果:https://paiza.io/projects/0LnhcM3ene771mtBYxDjxw?language=c
※現在の時間で乱数を初期化することにより、
作成する乱数が、実行するごとに変化する。
3.3 プログラムの作成(time関数の確認)
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ // Your code here! int a; time_t t; ///現在の時間で乱数を初期化 srand((unsigned)time(&t)); a = rand(); printf("a=%d\n",a); printf("time=%d\n",t); }
結果:https://paiza.io/projects/Mr2Z7eCehnJcomoPWftuLQ?language=c
time関数では、1970年1月1日0時0分0秒(UTC)からの経過秒数が出力される。
4. 乱数の最大値について
・rand関数で生成される数値の最大値は、stdlib.hのRAND_MAXで設定されている。
4.1 プログラム作成(乱数の最大値の確認)
#include <stdio.h> #include <stdlib.h> int main(void){ // Your code here! int a =RAND_MAX; printf("a=%d",a); }
実行結果:https://paiza.io/projects/b1IKtqD81NMe0n-Os5eOeg?language=c
4.2 プログラム作成(乱数の数値範囲を設定する)
・0~100までの乱数を生成するプログラム。
・aの値が0~100までの乱数が入力される。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ // Your code here! srand(time(NULL)); int a = 100.0*rand()/(RAND_MAX); printf("a=%d\n",a); #if 0 int ran = rand(); int ranmax = RAND_MAX; int a2 = 100.0*ran/(ranmax); printf("a2=%d\n",a2); printf("%d\n",ran); printf("%d\n",ranmax); #endif }
結果:https://paiza.io/projects/t2Tb2-nVqqOSQyFqIW7IcQ?language=c
4.3 プログラム作成(乱数の数値範囲を設定する2)
・50~1000までの乱数を生成するプログラム。
・aの値が50~1000までの乱数が入力される。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ // Your code here! float min = 50.0; float max =1000.0; int a; srand(time(NULL)); #if 1 for(int i=0;i<10;i++){ a = min+((max-min)*rand())/(RAND_MAX); printf("a=%d\n",a); } #else //以下でも算出可能 for(int i=0;i<10;i++){ a = min + rand() % (int)(max - min + 1); printf("a=%d\n",a); } #endif }
実行結果:https://paiza.io/projects/f_Wj_dVpdc12G54CG21ZRw?language=c
参考:
http://adlib.rsch.tuis.ac.jp/~akira/lect/softa/refs/rand.txt
【C言語入門】乱数(rand)の使い方 | 侍エンジニアブログ
関連記事
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary
・C言語基礎知識6(関数) - Project_OKI’s diary
・C言語基礎知識7(構造体1) - Project_OKI’s diary
・C言語基礎知識8(enum:列挙型) - Project_OKI’s diary
・C言語基礎知識9(typedef) - Project_OKI’s diary