関数rand()の補足説明

関数rand()は呼び出すたびに0〜32767の範囲の1つの値を返す関数である。

List 1 関数rand()をmain()中から呼び出した例

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num, i;
    for (i=0; i<10; i++) {
        num=rand();
        printf("%5d\n",num);
    }
    return 0;
}

/********************* 実行結果 ********************
   41
18467
 6334
26500
19169
15724
11478
29358
26962
24464
****************************************************/

解説
関数rand()は呼び出されるたびに乱数(気まぐれに選んだ数)を発生させて,関数の返す値としているのがわかる。
ただし,このプログラムでは,何回実行しても同じ10個の乱数が得られてしまうのが問題である。
これを解決するのが関数srand()の使用である。

List 2 関数rand()をmain()中から呼び出した例, srand()による初期化付き

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int num, i;
    srand((unsigned) time(NULL));/*乱数列生成の初期化,プログラム起動時に呼ばれる*/
    for (i=0; i<10; i++) {
        num=rand();
        printf("%5d\n",num);
    }
    return 0;
}

/********************* 実行結果 ********************
13414
17322
15801
 4389
26243
31287
15267
 6646
 3752
23361
****************************************************/

解説
このプログラムでは,何回実行しても,異なる10個の乱数が得られる。

List 3 1から100までの範囲の乱数を得る

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int num, i;
    srand((unsigned) time(NULL));/*乱数列生成の初期化,プログラム起動時に呼ばれる*/
    for (i=0; i<10; i++) {
        num=rand()%100+1;
        printf("%5d\n",num);
    }
    return 0;
}

/********************* 実行結果 ********************
   99
   76
   25
   15
   77
   77
   41
   53
    8
    2
****************************************************/

解説
rand()...........0〜32767の乱数
rand()%100.......0〜99の乱数
rand()%100+1.....1〜100の乱数

List 4 '0'から'9'の文字コードを乱数として得る

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int num;
    char ch;
    int i;
    srand((unsigned) time(NULL));/*乱数列生成の初期化,プログラム起動時に呼ばれる*/
    for (i=0; i<10; i++) {
        num=rand()%10;
        ch=num+'0';
        printf("%5d %d %x %c\n",num,ch,ch,ch);
    }
    return 0;
}

/********************* 実行結果 ********************
    3 51 33 3
    4 52 34 4
    7 55 37 7
    0 48 30 0
    5 53 35 5
    4 52 34 4
    3 51 33 3
    5 53 35 5
    1 49 31 1
    9 57 39 9
****************************************************/

解説
数字の文字コードは,'0','1','2',..,'9'は16進表記で0x30,0x31,0x32,..,0x39である。
そこで0〜9の数値に,'0'の文字コードを加えると,数字を表す文字コードとなるのがわかる。