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

C言語で指定した範囲内の乱数を生成する方法

この記事では、C言語を使って指定した範囲内の乱数を生成する方法を解説します。乱数の生成には srand() 関数と rand() 関数を使用し、srand() のシード(種)には現在の時刻を設定することで、実行するたびに異なる乱数列を得られるようにします。

基本的な考え方

標準ライブラリの rand() 関数は、0 から定義された最大値(RAND_MAX)までの乱数しか生成できず、任意の範囲を直接指定することはできません。そこで、次のようなテクニックを使います。

  1. まず、0 ~ (上限 − 下限 + 1) の範囲で乱数を生成します。これは rand() % (r - l + 1) という剰余演算で実現できます。
  2. 次に、生成した値に下限値を加算してオフセットすることで、目的の範囲 [l, r] 内の乱数に変換します。

サンプルコード

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

// l から r の範囲で乱数を count 回生成して表示する関数
void generate_random(int l, int r, int count) {
    int i;
    for (i = 0; i < count; i++) {
        int rand_num = (rand() % (r - l + 1)) + l;
        printf("%d ", rand_num);
    }
}

int main() {
    int lower = 10, upper = 15, count = 15;

    // 現在時刻を乱数生成器のシードとして設定
    srand(time(0));

    generate_random(lower, upper, count);
    printf("\n");
    return 0;
}

コードのポイント

  • srand(time(0)):現在時刻をシードに設定することで、プログラムを実行するたびに異なる乱数列が得られます。これを忘れると毎回同じ乱数が出力されてしまいます。
  • rand() % (r - l + 1):剰余を取ることで、結果を 0 ~ (r − l) の範囲に収めます。
  • + l:下限値を加算することで、最終的な範囲が l ~ r になります。

実行結果

15 11 13 10 13 10 15 11 14 12 12 13 12 13 14

この例では 10 ~ 15 の範囲で 15 個の乱数を生成しています。実行するたびに出力される数値は変わります。なお、% を使う手法は簡易的ですが厳密には分布にわずかな偏りが生じるため、より高品質な乱数が必要な場合は他の手法も検討するとよいでしょう。

  1. JavaScriptで2つの整数間のランダムな整数を生成する方法

    本記事では、ちょうど2つの数値を要素として持つ配列(範囲の指定)を受け取り、その範囲内(両端を含む)に収まるランダムな整数を生成するJavaScript関数の作成方法を解説します。ランダムな数値の生成には標準組み込みオブジェクトの Math.random() を使用し、小数点以下を切り捨てて整数化するために Math.floor() を組み合わせます。実装コードconst range = [5, 15]; const randomBetween = ([min, max]) => { // +1 することで最大値も範囲に含める const random = Math.ra

  2. Androidで指定した範囲の乱数を生成する方法【初心者向けサンプルコード付き】

    この記事では、Androidアプリで指定した範囲(最小値〜最大値)の中からランダムな数値を生成する方法を、実際に動作するサンプルコードとともに解説します。ユーザーが入力した最小値と最大値をもとに、ボタンをタップすると乱数が画面に表示されるシンプルなアプリを作成していきます。 乱数生成の基本的な仕組み Java標準のjava.util.Randomクラスを利用すると、簡単に乱数を生成できます。任意の範囲内の乱数を取得するには、次の式を使います。 output = r.nextInt((max - min) + 1) + min; nextInt(n)メソッドは「0以上 n 未満」の整数を返します