C言語のrand()関数とsrand()関数:擬似乱数の生成方法を解説
rand()関数とは
rand()関数は、C言語で擬似乱数を生成するために使用される標準ライブラリ関数です。戻り値は整数型で、0からRAND_MAX(一般的に32767)までの範囲の値を返します。この関数を使用するには、ヘッダーファイル「stdlib.h」をインクルードする必要があります。
C言語におけるrand()の構文は以下の通りです。
int rand(void);
rand()の使用例
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("%d\n", rand());
printf("%d", rand());
return 0;
}実行結果
1804289383 846930886
なお、rand()関数はデフォルトで同じシード値を基に動作するため、プログラムを実行するたびに毎回同じ乱数列が生成されます。実行のたびに異なる乱数を取得したい場合は、後述のsrand()関数と組み合わせて使用します。
srand()関数とは
srand()関数は、rand()関数が生成する擬似乱数列を初期化するための関数です。引数としてシード値(種となる数値)を指定し、戻り値はありません。
C言語におけるsrand()の構文は以下の通りです。
void srand(unsigned int number);
引数numberにはシード値を指定します。通常、実行するたびに異なる乱数列を得るために、現在時刻を返すtime(NULL)をシード値として渡すのが一般的です。その場合は「time.h」のインクルードが必要になります。
srand()の使用例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
printf("%d\n", rand());
srand(12);
printf("%d", rand());
return 0;
}実行結果
1432462941 1687063760
この例では、最初のsrand(time(NULL))で現在時刻をシード値として設定しているため、プログラムを実行するたびに異なる乱数が生成されます。一方、srand(12)のように固定値を指定した場合は、シード値が常に同じであるため、生成される乱数も毎回同一になります。用途に応じてシード値を使い分けることが、擬似乱数を正しく扱うポイントです。
-
UEFIとは?Windows 8におけるUEFIのメリットと設定画面へのアクセス方法を解説
本記事では、UEFIの基本概念と、Windows 8におけるこの技術の活用方法について詳しく解説します。 UEFIとは何か? UEFIは「Unified Extensible Firmware Interface(統一拡張ファームウェアインターフェース)」の略称です。この技術は従来のコンピューターのブートシステムを刷新するために設計され、旧式化したBIOSシステムに取って代わるものです。しかし、単なる旧技術の近代化ではなく、OSやコンピューターの起動技術に対する根本的に新しいアプローチと言えます。実際、UEFIはPCのBIOSシステムとはほとんど共通点がありません。 BIOSがシステム基板上の
-
Pythonで3の倍数と7の倍数の組み合わせで数値nを作れるか判定する方法
ある正の整数 n が与えられたとき、その n を「3の非負の倍数」と「7の非負の倍数」の合計として表すことができるかどうかを判定する問題を考えてみましょう。例えば、入力が 13 の場合、出力は True になります。なぜなら、13 = 1×7 + 2×3 と表せるからです。解法のアプローチこの問題は、次の手順で解くことができます。i を 0 から n+1 まで、7 ずつ増やしながら繰り返します。各 i について、(n − i) が 3 で割り切れるかどうかを確認します。割り切れる場合は True を返します。ループを最後まで回っても条件を満たさなかった場合は、False を返します。このアルゴ