Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のrand()とsrand()関数の使い方を徹底解説!乱数生成の基本

本記事では、C++ STLにおけるrand()関数とsrand()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。

rand()とは?

rand()はC++ STLに組み込まれた関数で、<cstdlib>ヘッダーファイル内で定義されています。この関数は一連の乱数(ランダムな数値)を生成するために使用され、コード内でランダムな数値が必要になった場面で活用できます。

例えば、C++で双六(すごろく)やサイコロを使うゲームを作成する際、1から6までのランダムな数値を生成したい場合があります。そんなときにrand()が役立ちます。

乱数はアルゴリズムによって生成されており、この関数が呼び出されるたびに、互いに関連性のない数値の系列が出力されます。

例えば、1〜6の範囲でランダムな数値を生成したい場合は、次のように記述します。

Num = rand() % 6 + 1;

構文

int rand();

引数(パラメータ)

この関数は引数を受け取りません。

戻り値

0からRAND_MAXまでの範囲の整数値を返します。RAND_MAXは標準ライブラリで定義されている定数で、少なくとも32767以上の値が保証されています。

入力例:

rand() % 100 + 1;

出力例:

57

使用例:rand()

#include <stdio.h>
#include <stdlib.h>
int main(void){
    printf("Randomly generated numbers are: ");
    for(int i = 0; i<5; i++)
        printf(" %d ", rand());
    return 0;
}

出力結果

初回実行時の出力:

Randomly generated numbers are: 1804289383 846930886 1681692777 1714636915
1957747793

N回目に実行した場合の出力:

Randomly generated numbers are: 1804289383 846930886 1681692777 1714636915
1957747793

ご覧のとおり、シードを設定しない限り、何度実行しても毎回同じ数値の系列が出力されます。これはrand()が擬似乱数を生成しており、デフォルトのシード値が固定されているためです。この問題を解決するのが次に紹介するsrand()です。

srand()とは?

srand()もC++ STLに組み込まれた関数で、<cstdlib>ヘッダーファイル内で定義されています。この関数は乱数生成器を初期化するために使用されます。

srand()は、擬似乱数整数系列を生成するための「開始点」を提供します。引数として渡された値は、擬似乱数を生成するための「シード(種)」として扱われます。srand()に異なるシード値を指定すれば、rand()とは異なる一連の結果を生成させることが期待できます。

構文

int srand(unsigned int seed);

引数(パラメータ)

この関数は以下の引数を受け取ります。

  • seed − 擬似乱数生成器のシードとして使用される整数値です。通常、実行ごとに異なる値となるtime(0)(現在時刻)を指定することが一般的です。

戻り値

この関数自体は戻り値として擬似乱数を返しません。実際には、後続のrand()呼び出しに対して新しい乱数系列の基点を設定する役割を果たします。

入力例:

srand(time(0));
rand();

出力例:

1804289383

使用例:srand()

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main(void){
    srand(time(0));
    printf("Randomly generated numbers are: ");
    for(int i = 0; i<5; i++)
        printf(" %d ", rand());
    return 0;
}

出力結果

初回実行時の出力:

Randomly generated numbers are: 382366186 1045528146 1291469435 515349891
931606430

2回目に実行した場合の出力:

Randomly generated numbers are: 1410939666 214525217 875042802
1560673843 782892338

このように、srand(time(0))によって現在時刻をシードとして設定することで、プログラムを実行するたびに異なる乱数系列が生成されるようになります。

まとめ

rand()は擬似乱数を生成する基本的な関数ですが、単体では毎回同じ系列が出力されるという特徴があります。実行ごとに異なる乱数を得たい場合は、srand()time(0)などをシードとして設定することが重要です。ゲーム開発やシミュレーションなど、乱数を利用する場面では両者を組み合わせて使うことを覚えておきましょう。

  1. C/C++のputwchar()関数とは?使い方と実行例をわかりやすく解説

    この記事では、C++ STLにおけるputwchar()関数の動作、構文、および具体的な使用例について詳しく解説します。 putwchar()とは? putwchar()関数は、C++ STLに組み込まれている関数の一つで、<cwchar>ヘッダーファイル内で定義されています。この関数は、ワイド文字(wide character)を標準出力デバイスに書き込むために使用されます。引数として渡されたワイド文字を受け取り、システムの標準出力(stdout)に出力します。 なお、putwchar()は<cstdio>ヘッダーで定義されているputchar()関数のワイド文字版

  2. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int