Project_OKI’s diary

エンジニアの勉強ブログ

C言語基礎知識31(乱数の作成)

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)の使い方 | 侍エンジニアブログ

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - 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

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary

 

組み込みC言語