C言語のrand()関数

Rand Function C Language



C言語では、 行() 関数はのために使用されます 疑似乱数ジェネレータ(PRNG) 。 rand()関数によって生成される乱数は、真にランダムではありません。定期的に繰り返されるシーケンスですが、周期が大きいので無視できます。 NS 行() 関数は、次の乱数と次の新しいシードを計算するために使用されるシード値を記憶することによって機能します。この記事では、を使用して乱数を生成する方法について詳しく説明します。 行() 関数。それでは、始めましょう!

ヘッダーファイル:

stdlib.h







構文:

int rand(void)



戻り値:

この関数は、シリーズの次の疑似乱数を返します。数値シリーズの範囲値は0からRAND_MAXの間です。 RAND_MAXは、で定義されているマクロです。 stdlib.h ヘッダーファイル。その値は最大値であり、rand()関数で返すことができます。 RAND_MAXの値は、Cライブラリによって異なりますが、32767以上です。



//Example1.c

#含む
#含む

int主要(()。
{{

int;

printf (('10乱数=>NS')。;

にとって((=0;<10;++)。
{{
printf (('%NS ' (()。)。;
}

printf (('NS')。;
戻る 0;
}


Example1.cでは、forループの各反復でrand()関数を呼び出し、関数の戻り値を出力します。 rand()関数の値の順序は、プログラムを実行するたびに同じです。デフォルトでは、rand関数のシードは1に設定されています。





rand関数のシードは、 srand() 関数。シードは一度だけ、そして最初の前に設定することができます 行() 関数呼び出し。

srand()関数:

ヘッダーファイル:

stdlib.h



構文:

int srand(unsigned int seed)

引数:

この関数は1つの引数を取ります

シード: 新しい一連の疑似乱数のシードとして使用される整数値。

戻り値:

なし

//Example2.c

#含む
#含む
#含む

int主要(()。
{{

int;

srand (( 時間 ((0)。)。;

printf (('10乱数=>NS')。;

にとって((=0;<10;++)。
{{
printf (('%NS ' (()。)。;
}

printf (('NS')。;
戻る 0;
}


Example2.cでは、srand()関数を使用して、rand()関数によって生成された乱数シーケンスの初期シードを設定しました。プログラムが実行されるたびに、異なるシーケンスが生成されます。 srand()では、time(0)関数(で宣言されています time.h ヘッダーファイル)がシードとして使用されます。このtime(0)関数は、エポック(1970年1月1日00:00:00)から経過した秒数を返します。同じ秒でプログラムを実行すると、これでも同じシーケンスが生成される可能性があります。

//Example3.c

#含む
#含む
#含む

int主要(()。
{{

int;

srand (( 時間 ((0)。)。;

printf (('1から10までの10個の乱数=>NS')。;

にとって((=0;<10;++)。
{{
printf (('%NS '(( (()。 10)。 + 1)。;
}

printf (('NS')。;
戻る 0;
}


Example3.cでは、1から10の間で乱数を生成する方法を確認しました。

//Example4.c

#含む
#含む
#含む

int主要(()。
{{

int最大最小;

printf (('最小値を入力=>')。;
scanf (('%NS'、&最小)。;
printf (('最大値を入力=>')。;
scanf (('%NS'、&最大)。;

もしも((最小>>最大)。
{{
printf (('最小値が最大値より大きいNS')。;
戻る 0;
}

srand (( 時間 ((0)。)。;


printf (('10%dと%dの間の乱数=>NS'最小最大)。;

にとって((=0;<10;++)。
{{
printf (('%NS '(( (()。 ((最大-最小+1)。)。 +最小)。;
}

printf (('NS')。;
戻る 0;
}


Example4.cでは、ユーザーから範囲を取得し、この範囲内で乱数を生成しました。式は次のとおりです。 rand()%(max-min +1))+ min

//Example5.c

#含む
#含む
#含む

int主要(()。
{{

int;

srand (( 時間 ((0)。)。;

printf (('10 0.0〜1.0の乱数=>NS')。;

にとって((=0;<10;++)。
{{
printf (('%NS '((((浮く)。 (()。 /RAND_MAX)。)。;
}

printf (('NS')。;
戻る 0;
}


Example5.cでは、float0.0と1.0の間のランダムな数値を生成する方法を確認しました。式は次のとおりです。 (float)rand()/ RAND_MAX)

//Example6.c

#含む
#含む
#含む

int主要(()。
{{

int;
浮く最大最小;

printf (('最小値を入力=>')。;
scanf (('%NS'、&最小)。;
printf (('最大値を入力=>')。;
scanf (('%NS'、&最大)。;

もしも((最小>>最大)。
{{
printf (('最小値が最大値より大きいNS')。;
戻る 0;
}

srand (( 時間 ((0)。)。;

printf (('10%fと%fの間の乱数=>NS'最小最大)。;

にとって((=0;<10;++)。
{{
printf (('%NS '最小+ ((((浮く)。 (()。 /((RAND_MAX/((最大-最小)。)。)。)。;
}

printf (('NS')。;
戻る 0;
}


Example6.cでは、ユーザーから範囲を取得し、この範囲内の乱数を生成しました(両方を含む)。式は次のとおりです。 min +((float)rand()/(RAND_MAX /(max – min)))

結論:

この記事では、を使用して乱数を生成する方法を学びました。 行()srand() 関数。 rand関数によって生成される乱数の品質についての保証はありませんが、カジュアルな使用には十分です。