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

C言語における乱数生成とは?randomize()とsrand()関数の使い方を徹底解説

はじめに

プログラム内で乱数を生成する際には、生成される数列を適切に制御することが重要です。そのために使用されるのが randomize() 関数と srand() 関数です。

乱数ジェネレータに対して開始値(初期値)を設定することを「シード設定(seeding)」と呼びます。シードが同じであれば毎回同じ乱数列が生成され、シードが異なれば実行ごとに異なる乱数列が得られます。

randomize() と srand() の違い

  • randomize():PCのシステムクロック(時計)を利用して、ランダムなシードを自動的に生成します。
  • srand():乱数ジェネレータの開始値をプログラマが明示的に指定できます。

srand() を使わないサンプルプログラム

まずは rand() 関数のみを使用したC言語のプログラム例です。

#include<stdio.h>
int main(){
    // プログラムを実行するたびに
    // 同じ乱数列が生成される
    for(int i = 0; i<10; i++)
        printf(" %d ", rand());
    return 0;
}

出力結果

シードを設定していないため、何度実行しても次のような同じ出力が得られます。

1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421

srand() を使ったサンプルプログラム

続いて、srand() 関数を使用したC言語のプログラム例を見てみましょう。

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main(){
    // プログラムを実行するたびに
    // 異なる乱数列が生成される
    // 現在時刻を乱数ジェネレータのシードとして使用
    srand(time(0));
    for(int i = 0; i<10; i++)
        printf(" %d ", rand());
    return 0;
}

出力結果

現在時刻をシードとしているため、実行のたびに時刻が変わり、次のように毎回異なる出力が得られます。

1919778910
1203408690
1755813469
1976428341
37040990
1849384103
986990763
2040061815
391541163
1718314135

まとめ

rand() 単体では毎回同じ乱数列しか生成できませんが、srand(time(0)) のように実行ごとに異なるシードを与えることで、多様な乱数列を得ることができます。用途に応じてシード設定を使い分けましょう。

  1. C言語のループ制御文(for・while・do-while)を徹底解説!フローチャートとサンプルコード付き

    C言語におけるループ制御文は、同じ処理を何度も繰り返し実行したい場合に使われる重要な構文です。毎回コードを書き連ねる必要がなくなり、プログラムを簡潔かつ効率的に記述できます。 C言語で利用できるループ制御文は、主に以下の3種類です。 for文 while文 do-while文 本記事では、それぞれの構文の書き方、フローチャートによる動作の流れ、実際に動くサンプルプログラムと実行結果まで、初心者にもわかりやすく解説します。 for文とは?基本構文と使い方 for文は、「初期化」「条件式」「増減式」を1行にまとめて記述できる、最もよく使われるループ構文です。繰り返す回数があらかじめ決まっている

  2. Microsoft Store(マイクロソフトストア)とは?Windows 10での使い方を徹底解説

    Microsoft Storeは、Windows 8の時代にはシンプルなアプリストアにすぎませんでしたが、その後急速に進化を遂げ、Windows 10ユーザーに多彩なコンテンツを届ける大規模な配信プラットフォームへと成長しました。 「使ったことがない」「何のためにあるのかよく知らない」「単純に興味がある」といった方のために、本記事ではWindows 10におけるMicrosoft Storeの概要と基本的な使い方をわかりやすく解説します。 Microsoft Storeとは? Microsoft Storeは、Windowsユーザー向けのデジタルストアです。無料・有料を問わず、さまざまなデジタ