乱数 (ランダム数)

乱数の取得

rand.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
  stdlib.h [rand]
  
  書式: int rand(void)
  機能: 擬似乱数 (ランダム数) の取得
  引数: なし
  戻り値: 0 ~ RAND_MAX までの整数である乱数を返す
*/

/*
  rand() のみでは, プログラムを実行する度に同じ乱数が生成されてしまう.
  毎回違う乱数を発生させるには, srand() を組み合わせる.
*/

#include <stdio.h>
#include <stdlib.h> /* rand */

int main(void){
  int i;

  for(i = 0; i < 20; i++){
    if (i % 4 == 0) printf("\n");
    printf( "%10d\t", rand() );
  }
  printf("\n");

  return 0;
}

rand.c の実行結果は:

[cactus:~/code_c/refer]% ./rand

     16807              282475249     1622650073       984943658
1144108930               470211272     101027544       1457850878
1458777923               2007237709     823564440      1115438165
1784484492                 74243042      114807987     1137522503
1441282327                   16531729     823378840     143542612
[cactus:~/code_c/refer]% ./rand

     16807              282475249     1622650073       984943658
1144108930               470211272     101027544       1457850878
1458777923               2007237709     823564440      1115438165
1784484492                 74243042      114807987     1137522503
1441282327                   16531729     823378840     143542612

乱数の種の設定

srand.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
  stdlib.h [srand]
  
  書式: void srand(unsigned int seed)
  機能: 擬似乱数 (ランダム数) の種を設定
  引数: unsigned int seed: 乱数の種
  戻り値: なし
*/

/*
  乱数の種 (seed) とは, rand() で発生させる乱数系列のようなもので,
  種が同じだと, 同じ乱数が発生するわけ.
  そのため, rand() を使用する際には, 必ず srand() を読んでから乱数
  を使う.
*/

#include <stdio.h>
#include <stdlib.h> /* srand */
#include <time.h>

int main(void){
  int i;

  srand( (unsigned int)time(NULL) );

  for(i = 0; i < 20; i++){
    if (i % 4 == 0) printf("\n");
    /* 0 ~ 99 */
    printf( "%10d\t", rand() % 100 );
  }
  printf("\n");

  return 0;
}

srand.c の実行結果は:

[cactus:~/code_c/refer]% ./srand

57 49 78 87
12 38 74 70
28 20 10 87
17 74 16 30
49 81 65 21
[cactus:~/code_c/refer]% ./srand

85 98 29 25
38 79 50 41
79 15 23 53
44 42 64 48
63 97 31 69
[cactus:~/code_c/refer]%

Table Of Contents

Previous topic

動的メモリの確保

Next topic

ソートとサーチ