サイタパソコン教室・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

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

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

新着レッスンノート

4/17 のレッスンの内容は、以下の午後過去問の解説です。  ・ 2016年度春期 午後問5   - 設問3~4  ・ 2017年度秋期 午後問5   - 全問 今回の解説の詳細は、レッスン中に紙でお渡ししたノートを参照してください。

4/15 のレッスンの内容は、以下の午前過去問の解説です。  ・ 2015年度秋期   - 問32  ・ 2016年度春期   - 問2  ・ 2016年度秋期   - 問2、問4、問30  ・ 2017年度春期   - 問22  ・ 2017年度秋期   - 問75 ...

4/13 のレッスンの内容は、以下の通りです。  ・ 2017年度春期のアルゴリズムの問題 詳細は、レッスン中に紙でお渡ししたノートも併せて参照してください。 □ 2017年度春期のアルゴリズム問題 今回は、過去問の中から  ・ 2017年度春期 午後問8 ...

4/10 のレッスンの内容は、以下の通りです。  ・ ネットワーク関連   - サブネットマスクの役割   - デフォルトゲートウェイとは  ・ データベース関連   - SQLにおけるCOMMITとROLLBACK   - 結合について   - ロールバックとロールフォワー...

4/8 のレッスンの内容は、以下の応用情報技術者試験の過去問解説です。  ・ 2017年度春期   - 問35(ブロードキャストストーム)   - 問36(NAPT機能)   - 問11(データの転送時間)  ・ 2016年度秋期   - 問33(IPアドレスの分類)   -...

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

基本情報技術者試験情報

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