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)) のように実行ごとに異なるシードを与えることで、多様な乱数列を得ることができます。用途に応じてシード設定を使い分けましょう。
-
C言語のループ制御文(for・while・do-while)を徹底解説!フローチャートとサンプルコード付き
C言語におけるループ制御文は、同じ処理を何度も繰り返し実行したい場合に使われる重要な構文です。毎回コードを書き連ねる必要がなくなり、プログラムを簡潔かつ効率的に記述できます。 C言語で利用できるループ制御文は、主に以下の3種類です。 for文 while文 do-while文 本記事では、それぞれの構文の書き方、フローチャートによる動作の流れ、実際に動くサンプルプログラムと実行結果まで、初心者にもわかりやすく解説します。 for文とは?基本構文と使い方 for文は、「初期化」「条件式」「増減式」を1行にまとめて記述できる、最もよく使われるループ構文です。繰り返す回数があらかじめ決まっている
-
Microsoft Store(マイクロソフトストア)とは?Windows 10での使い方を徹底解説
Microsoft Storeは、Windows 8の時代にはシンプルなアプリストアにすぎませんでしたが、その後急速に進化を遂げ、Windows 10ユーザーに多彩なコンテンツを届ける大規模な配信プラットフォームへと成長しました。 「使ったことがない」「何のためにあるのかよく知らない」「単純に興味がある」といった方のために、本記事ではWindows 10におけるMicrosoft Storeの概要と基本的な使い方をわかりやすく解説します。 Microsoft Storeとは? Microsoft Storeは、Windowsユーザー向けのデジタルストアです。無料・有料を問わず、さまざまなデジタ