C语言生成指定范围内的随机数

1. C语言中有产生随机数据的函数,需要添加stdlib.h与time.h头文件,首先需要在main函数的开头加上srand((unsigned)time(NULL));,这个语句将产生随机数的种子,然后再需要使用随机数的地方使用rand函数,但是rand()函数只能够生成[0,RAND_MAX]范围内的整数,RAND_MAX是stdlib.h头文件中的一个常数(32767),在不同的系统之下这个常数是不一样的,因此想要输出给定范围之内的随机数,需要使用rand() % (b - a + 1)+ a,显然,rand()% (b - a + 1)的范围是[0,b - a],再加上a之后的范围就是[a,b]下面的代码是生成[0,2]和[3,8]范围内的随机数

2. 下面是生成[0,2]和[3,8]范围内具体的代码:

#include
#include
#include
int main(void){
	srand((unsigned)time(NULL));
    int i;
	for(i = 0; i < 10; ++i){
		printf("%d ",rand() % 3);//[0,2]	
	} 
	printf("\n");
	for(i = 0; i < 10; ++i){
		printf("%d ",rand() % 6 + 3);//[3, 8]
	}
} 

3. 但是上面的做法只能够产生左右端点不超过RAND_MAX的的随机数,如果需要产生更大的数就不行了,我们还有另外一种思路是:

先用rand()生成一个[0,RAND_MAX]范围内的随机数,然后使用这个随机数除以RAND_MAX这样就得到了一个[0,1]范围内的浮点数,我们只需要将这个浮点数乘以(b - a)再加上a即可,相当于浮点数就是[a,b]范围内的比例位置

下面是生成[10000,60000]的10个随机数的具体代码:

#include
#include
#include
int main(void){
	srand((unsigned)time(NULL));
    int i = 0; 
	for(i = 0; i < 10; ++i){
		printf("%d ", (int) (round(1.0 * rand() / RAND_MAX * 50000 + 10000)));
	}
	return 0;
} 

 

你可能感兴趣的:(C&&C++,算法初步)