プログラミングでランダムな値を扱いたいときに欠かせないのが、C言語 乱数の仕組みです。ゲームの敵の出現位置、シミュレーションデータの生成、テスト用データの作成など、乱数はさまざまな場面で使われています。この記事では、C言語 乱数の基本とrand関数の使い方を中心に、初心者にもわかりやすく解説します。
C言語で乱数を扱う基本を理解しよう
乱数とは?
乱数とは、予測できない値・擬似的なランダム値のことです。C言語では「ある規則に基づいてランダムっぽく見える数」を生成します。
乱数が使われる代表的なシーン
- ゲーム開発・敵の動きやアイテム出現位置をランダムに決める
- シミュレーション・確率に基づいた結果を再現する
- テストデータ生成・入力のバリエーションを増やす
このように、C言語 乱数は実践的なプログラミングに欠かせない重要な機能です。
rand関数で乱数を生成する方法
最も基本的な方法はrand関数を使用することです。C言語で乱数を生成する方法でも詳しく解説されています。
基本構文と使い方
#include <stdlib.h>
int main(void) {
int num = rand();
printf("%dn", num);
return 0;
}
生成される値の範囲
rand()が返す値は 0 ~ RAND_MAX の範囲です。RAND_MAXは多くの環境で32767です。
任意の範囲で乱数を生成する
int num = rand() % 6 + 1; // 1~6 の乱数
サイコロの出目のように1~6までの整数をランダムに生成できます。
srand関数で乱数を初期化する理由と方法
なぜ乱数 初期化が必要なのか?
rand()だけを使うと毎回同じ順番の乱数が生成されます。これはC言語の乱数が擬似乱数だからです。そこで初期化用の関数srand()を使います。
使い方の例
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL)); // 現在時刻をシードに設定
int num = rand() % 6 + 1;
printf("%dn", num);
return 0;
}
上記のように、現在時刻で初期化すると実行のたびに異なる結果が得られます。
randとsrandを組み合わせた実践コード例
サイコロを振るプログラム
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL));
int dice = rand() % 6 + 1;
printf("サイコロの目: %dn", dice);
return 0;
}
じゃんけんプログラム
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL));
int hand = rand() % 3; // 0=グー, 1=チョキ, 2=パー
printf("あなたの手は: %dn", hand);
return 0;
}
乱数範囲を自在に設定するテクニック
int random = rand() % (max - min + 1) + min;
例:10~50の範囲の乱数
int num = rand() % (50 - 10 + 1) + 10;
より詳細な範囲設定方法やrand関数の注意点は、C言語 randの基本と注意点で解説されています。
乱数生成の注意点とよくある落とし穴
- srandを複数回初期化すると偏る: 初期化は1回のみ行う
- RAND_MAXを超える値は生成できない: 大きな乱数は別の関数を検討
- 高精度な乱数が必要な場合: メルセンヌ・ツイスタなどのアルゴリズムを使用
まとめ|randとsrandを理解してC言語の乱数を自在に使おう
- rand()で乱数を生成し、srand()で初期化
- 初期化を適切に行うと実行ごとに異なる結果が得られる
- 範囲指定で任意の乱数を作れる
C言語 乱数を理解することで、ゲーム・シミュレーション・データ処理など、幅広いプログラミングに応用できます。


