C中随机数的生成

首先必须新增几个头文件:#include、#include,然后在main函数开头加一句“srand((unsigned)time(NULL))”,这个语句将生成随机数的种子,然后使用ranf()函数生成随机数。实例如下:

#include<cstdio> 
#include<cstdlib>
#include<time.h>
int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",rand());
	}
	return 0;
}

同时rand()函数只能生成【0,RAND_MAX】范围内的整数,RAND_MAX是cstdlib的一个常数,不同环境中有所不同,我看的书是32767。
如果想要输出固定范围【a,b】的随机数,需要使用rand()%(b-a+1)+a,显然rand()%(b-a+1)的范围是[0,b-a],再加上a就是[a,b],如下生成[0,1]与[3,7]范围内的数:

#include<cstdio> 
#include<cstdlib>
#include<time.h>
int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",rand()%2);
	}
	printf("\n");
	for(int i=0;i<10;i++){
		printf("%d ",rand()%5+3);	
	}
	return 0;
}

但是这几种方法只能生成边界小于32767,如果想要更大可以采用多次生成rand随机数,然后用位运算拼接起来(或者直接让两个随机数相乘),另一种思路就是先用rand()生成一个[0,RAND_MAX]的随机数,然后用这个数除以RAND_MAX,这样就会得到一个[0,1]范围内的浮点数。我们只需要用这个浮点数乘以范围长度(b-a+1),再加上a即可,即(int)((double)rand()/32767*(b-a+1)+a),相当于这个浮点数就是[a,b]范围内的比例位置。比如生成[10000,60000]范围内的随机数:

int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",(int)(round(1.0*rand()/RAND_MAX*50000+10000)));
	}
	return 0;
}
发布了19 篇原创文章 · 获赞 2 · 访问量 743

猜你喜欢

转载自blog.csdn.net/zan1763921822/article/details/104330271
今日推荐