サイタパソコン教室・IT資格情報処理技術者試験対策講座基本情報技術者試験 神奈川 基本情報技術者試験対策セミナー レッスンノート C言語における乱数の取り扱い

C言語における乱数の取り扱い

基本情報技術者試験対策講座のレッスンノート

レッスンノートって?レッスンノートって?

8/10のレッスン内容は、以下の通りです。

 ・ C言語における乱数の取り扱い
  - 指定範囲の乱数を求める計算式

詳細は、紙でお渡ししたノートも参照してください。

□ C言語における乱数の取り扱い

プログラミングでは、厳密な乱数ではなく「擬似乱数列」と呼ばれる配列を使って乱数を扱います。

その際、以下の2つの標準関数を使います。

 ・ srand()
 ・ rand()

srand()は、擬似乱数列の中の位置を決めるための関数です。

渡された引数に依存して、この位置が決まります。現在時刻(1970年を起点とした経過秒数)を引数として

 srand(time(NULL));

と記すことが多いようです。

一方rand()は、擬似乱数列の現在位置(初期状態は、srand()の呼び出しで決まった位置)にある数値を取得する関数です。

数値を取得すると、現在位置が次の数値に移るようになっています。


ここで、以下のソースコードを見てみましょう。

 for(i=0; i<8; i++) {
  srand(time(NULL));
  a[i] = rand();
 }

このループは8周ですが、これは1秒よりも格段に速く回りきってしまいます。

そうなると、以下のように動作してしまいます。

 (a) srand()で指定される位置が毎回同じ
 (b) rand()では(a)で指定された同じ位置にある数値を取得していた

そこで、srand()をfor文の前に出して、

 srand(time(NULL));

 for(i=0; i<8; i++) {
  a[i] = rand();
 }

と修正すれば、すべての要素に別々の数値が入るようになります。

現在時刻を引数にしてsrand()を使う場合は、使用間隔を遅延処理などを使って1秒以上にする必要があります。


○ 指定範囲の乱数を求める計算式

指定範囲の乱数を求める計算式は、以下のようになります。

 乱数値 = 最小値 + rand() % (指定範囲の整数の個数);

指定範囲の整数の個数は、

 最大値 - 最小値 + 1

で求めることができますね。

目的・種類別に基本情報技術者試験対策・合格講座を探す

新着レッスンノート

10/14 のレッスン内容は、以下の通りです。  ・ C言語文法   - charとsigned/unsigned charの違い   - 日本語コード 詳細は、紙でお渡ししたノートも参照してください。 □ C言語文法 今回も、C言語プログラミングの中級編の問題を題...

10/13 のレッスン内容は、以下の通りです。  ・ マネジメント・戦略の午後問題の解説 詳細は、レッスン中に紙でお渡ししたノートも併せて参照してください。 □ マネジメント・戦略の午後問題の解説 今回は、以下の過去問について解説しました。  ・ 2018年度...

10/7 のレッスン内容は、以下の通りです。  ・ ヒープソートに関するアルゴリズム問題の解説 詳細は、レッスン中に紙でお渡ししたノートも併せて参照してください。 □ ヒープソートに関するアルゴリズム問題の解説 今回は、以下の過去問について解説しました。  ・...

9/24 のレッスン内容は、以下の通りです。  ・ C言語文法   - 実引数と仮引数   - 文字の表示 詳細は、紙でお渡ししたノートも参照してください。 □ C言語文法 今回も、C言語プログラミングの中級編の問題を題材にレッスンを進めました。 〇 実引数と...

9/9のレッスン内容は、以下の通りです。  ・ C言語の応用編   - 水平タブの出力  ・ 情報処理関連   - 改行コードの違い   - クロックと秒の関係 詳細は、紙でお渡ししたノートも参照してください。 □ C言語の応用編 〇 水平タブの出力 C言...

レッスンノート ページ先頭へ

基本情報技術者試験情報

サイタの基本情報技術者試験講師がブログを通して、基本情報技術者試験情報を発信。更新情報のチェックはこちらから!