C言語を学ぶ

【Part9】乱数を使えるようになる

この記事は約3分で読めます。

C言語には乱数を生成するためのrand関数という関数があります。乱数とは、予測できない規則性のない数のことです。乱数はゲームやシミュレーションなど様々な場面で使われます。この記事では、rand関数の記述方法、プログラム例、演習課題について順に述べていきます。

rand関数の記述方法

rand関数は、stdlib.hというヘッダファイルに定義されています。rand関数を使うには、まずプログラムの先頭に以下のようにヘッダファイルをインクルードする必要があります。

#include<stdlib.h>

rand関数は、引数を取らずに呼び出すことができます。rand関数は、0からRAND_MAXという定数までの範囲内の整数を返します。RAND_MAXは環境によって異なりますが、通常は32767です。例えば、以下のようにrand関数を呼び出してその結果を表示するプログラムを作ることができます。

#include<stdio.h>
#include<stdlib.h>
int main(void) {
  int x;
  x = rand(); // rand関数を呼び出して乱数を生成
  printf("乱数: %d\n", x); // 乱数を表示
  return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

乱数: 1804289383

ただし、このプログラムは毎回同じ乱数を生成します。これは、rand関数が内部的に乱数の種という値を使って乱数を計算しているためです。乱数の種はプログラムが開始されるときに自動的に設定されますが、デフォルトでは1になります。そのため、同じ種から同じ乱数が生成されるのです。

乱数の種を変えるには、srand関数という関数を使います。srand関数は、引数に任意の整数を与えることで、乱数の種を設定します。srand関数は一度だけ呼び出すことで十分です。例えば、以下のようにsrand関数に現在時刻を与えることで、毎回異なる乱数が生成されるようにすることができます。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void) {
  int x;
  srand(time(NULL)); // 現在時刻を乱数の種に設定
  x = rand(); // rand関数を呼び出して乱数を生成
  printf("乱数: %d\n", x); // 乱数を表示
  return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

乱数: 1047882599

プログラム例

rand関数を使って、1から6までの範囲内の整数をランダムに生成するプログラムを作ってみましょう。これはサイコロを振ることに相当します。1から6までの範囲内の整数をランダムに生成するには、rand関数の結果に対して剰余演算子(%)を使って6で割った余りに1を足すことでできます。例えば、以下のようなプログラムを作ることができます。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void) {
  int x;
  srand(time(NULL)); // 現在時刻を乱数の種に設定
  x = rand() % 6 + 1; // rand関数の結果を6で割った余りに1を足す
  printf("サイコロの目: %d\n", x); // サイコロの目を表示
  return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

サイコロの目: 4

演習課題

rand関数を使って、以下の演習課題に挑戦してみましょう。

  1. 0から9までの範囲内の整数をランダムに生成するプログラムを作成してください。
  2. 1から10までの範囲内の整数をランダムに生成して、その数が奇数か偶数か判定するプログラムを作成してください。

コメント

タイトルとURLをコピーしました