C++で乱数を生成するプログラムの書き方【srand・rand関数の使い方を解説】
C++を使って乱数を生成する方法を解説します。ここでは、0から指定した値までの範囲で乱数を生成します(このプログラムでは最大値を100に設定しています)。
srand()関数とは
乱数を生成するために使用するのがsrand()関数です。この関数はC標準ライブラリに含まれており、void srand(unsigned int seed)として宣言され、rand()関数が使用する乱数生成器にシード(種)を設定する役割を持ちます。
srand()の宣言は以下のとおりです。
void srand(unsigned int seed)
この関数は「シード(seed)」と呼ばれる引数を1つ受け取ります。シードは、疑似乱数生成アルゴリズムで使用される整数値です。戻り値はありません。
rand()関数で乱数を取得する
実際に乱数を取得するには、rand()関数を使用します。0から最大値までの範囲の数値を得るには、剰余演算子(%)を使って余りを求めます。例えば「rand() % 100」とすれば、0〜99の範囲の整数が得られます。
また、シード値にはtime(0)関数の戻り値をsrand()に渡します。time(0)は現在時刻を秒単位で返すため、プログラムを実行するたびに異なるシードが設定され、毎回異なる乱数列を得ることができます。
サンプルコード
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
int max;
max = 100; // 乱数を生成する上限値を設定
srand(time(0));
cout << "The random number is: " << rand() % max;
return 0;
}
実行結果
実行するたびに異なる値が出力されます。
出力例1
The random number is: 51
出力例2
The random number is: 29
出力例3
The random number is: 47
補足:より高品質な乱数が必要な場合
srand()とrand()は手軽に使える一方、乱数の品質や分布の偏りに課題があります。C++11以降では、<random>ヘッダのstd::mt19937(メルセンヌ・ツイスター)やstd::uniform_int_distributionを使うことで、より高品質で偏りの少ない乱数を生成できます。簡単な用途ではrand()で十分ですが、シミュレーションやゲームなど本格的な乱数が必要な場面では<random>ライブラリの利用を検討するとよいでしょう。
-
数値を逆順に並べ替えるC++プログラムの書き方と解説
数値の反転とは、その桁の数字を逆の順序に並べ替えて格納することを指します。 例えば、元の数値が6529である場合、出力として9256が表示されます。 以下に、数値を反転させるC++プログラムの例を示します。 サンプルプログラム #include <iostream> using namespace std; int main() { int num = 63972, rev = 0; while(num > 0) { rev = rev*10 + num%10; num = num/10; } cout<
-
C++で掛け算の九九(乗算表)を生成するプログラム
掛け算表(乗算表)は、任意の数に対する掛け算の結果を一覧にまとめたもので、十進法における初等算術の基礎を学ぶために広く使われています。掛け算表は通常、1から10までの積を各行に表示します。例として、4の掛け算表は以下のようになります。4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 4 * 10 = 40指定した数の掛け算表を生成するC++プログラムの例は以下の通りです。プログラム例#include <iostream> using nam