C言語 - 乱数を生成するにはどうすればよいですか?

ランド関数 

 C言語では、rand関数を使って擬似乱数を生成します。そのプロトタイプは次のとおりです。 int rand(void);                             

rand 関数は、0 から RAND_MAX までの範囲の整数を返します。ここで、RAND_MAX は乱数の最大値を表す定数です。RAND_MAX の値は32767です。その値には最大範囲制限があるため、 rand 関数は擬似乱数 と呼ばれます。ただし、 rand 関数によって生成される乱数の範囲は、srand 関数によって最適化できます。

指定した範囲内の乱数を生成したい場合は、剰余演算子を使用できます。たとえば、0 ~ 9 の範囲の乱数を生成したい場合は、rand() % 10を使用できます。これは 0 から 9 までの整数を返します。

スランド関数

C 言語では、乱数生成器のシードを設定するために srand 関数が使用されます。

そのプロトタイプは次のとおりです。 void srand(unsigned int seed);

このうち、seed は乱数発生器のシードを初期化するために使用される符号なし整数です。通常、プログラムを実行するたびに生成される乱数列が異なることを保証するために、time関数を使用して現在時刻をシードとして取得します。

例は次のとおりです。

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

int main() {
    int i;
    
    // 使用时间作为种子
    srand((unsigned int)time(NULL));
    
    // 生成并打印10个随机数
    for (i = 0; i < 10; i++) {
        printf("%d\n", rand());
    }

    return 0;
}

上記の例では、srand((unsigned int)time(NULL)) は時間をシードとして srand 関数に渡し、rand 関数を通じて 10 個の乱数を生成して出力します。シードは時間の経過とともに変化するため、プログラムを実行するたびに異なる乱数のシーケンスが得られます。

なぜ (unsigned int) をキャストするのでしょうか?

一部のコンパイラおよびコンパイル環境では、 関数のパラメータが型である のに対し、time(NULL) の戻り値は time_t 型で ある場合があります 。 型 にキャストする 目的は、 型が一致していることを確認し、コンパイラの警告を回避することです。srandunsigned inttime(NULL)unsigned int

したがって、 異なるコンパイル環境下でもプログラムが正常に実行できるようにし、型の不一致の問題を回避するにはtime(NULL) 、これをその前に追加することを お勧めし(unsigned int) ます。そうすることで、コードの移植性が向上します。

おすすめ

転載: blog.csdn.net/m0_73800602/article/details/131950580