スポンサーリンク

範囲指定して乱数を生成する

rand()を使って乱数を生成した場合、rand()の出力は0〜RAND_MAXの値になります。
そこで、任意の値を範囲指定して、乱数を生成する場合には、
下記のように、乱数を生成したい範囲の最小値と最大値を設定しとします。
ただし、今回の場合は正の整数の範囲で範囲指定するとします。

#define MIN (3)
#define MAX (9)

RANGEを下記のように定義して、

#define RANGE ((MAX) - (MIN) + 1)

MIN + rand() % RANGE とすれば、範囲指定した値で乱数を生成できます。

printf("%d\n", MIN + rand() % RANGE);

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

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

#define LOOP_MAX (15)
#define MIN (3)
#define MAX (9)
#define RANGE ((MAX) - (MIN) + 1)


int main(){
	int i;

	srand((unsigned int)time(NULL));
	printf("RAND_MAX=%d\n\n", RAND_MAX);
	
	for (i = 0; i < LOOP_MAX; i++){
		printf("%d\n", rand());
	}

	for (i = 0; i < LOOP_MAX; i++){
		printf("%d\n", MIN + rand() % RANGE);
	}

	return 0;
}

下記が実行結果になります。
$ gcc -o sample sample.c ;./sample 
RAND_MAX=2147483647

127975474
1252660871
1689067356
568722599
71008596
1588048887
1410878893
127124477
1982339821
1124071989
864276464
315142140
899273478
99437160
498070754
4
6
9
6
8
9
9
7
7
4
6
9
3
3
5

スポンサーリンク