C++ 使用rand()函数生成随机数

生成随机数需要 rand() 和 srand() 一起使用,其中 srand() 用来初始化随机数种子, rand() 用来产生随机数。

rand函数--随机数发生器 :

用法:int x=rand(); 可以产生一个0~32767之间的随机数。

生成一定范围的随机数:  a + rand() % n;其中的 a 是起始值,n 是整数的范围。
例如 int x=rand()%10; 则生成的是0-9的随机数,不包括10.
生成[a,b]之间的随机数,int x=a + rand()%(b-a+1);

随机小数:可以先随机整数,再除以精度。

超范围:如果范围大于32767,可以使用rand()*rand()的方法。

注意:rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
           rand()的调用要依据随机数种子,用户未设定随机数种子时,系统默认的随机数种子为1。

srand函数--初始化随机数发生器:

srand()用来设置随机数种子。

void srand(unsigned  int  seed);  参数seed必须是个整数,通常可以利用time(0)的返回值(也就是当前时间)或NULL来当做seed。

如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

 

下面实践试验一下:

只使用rand函数:

#include<iostream>
#include<cstdlib>
using namespace std; 

int main(){
	int x; 
    for(int i=1; i<=10; i++ ) {
    	x=rand(); //rand函数 
    	cout<<x<<" ";
    }
}

上面的代码运行后也确实产生了10个随机数,似乎并没有什么问题,但是当我们再次运行时发现,产生的随机数还是那10个!

也就是说代码每次产生了相同的随机数。这显然不符合我们的要求。

加上srand()函数:

我们把上面的代码加上srand函数,再次运行发现,每次产生了不同的随机数,满足了我们的需求。

#include<iostream>
#include<cstdlib>
#include<ctime> 
using namespace std; 

int main(){
	int x; 
	srand(time(0));
    for(int i=1; i<=10; i++ ) {
    	x=rand(); //rand函数 
    	cout<<x<<" ";
    }
}

统计次数看看是否满足随机性:

#include<iostream>
using namespace std; 

int a[10];
int main(){
    srand(time(0));  //产生不同的随机数种子 
    for(int i=1; i<=100000000; i++ ) {
    	int x=rand()%10; //rand函数 
    	a[x]++;
    }
    for (int i=0; i<10; i++)
    	cout<<a[i]<<" ";
    cout << endl; 
}

如下我们生成[0,10)之间的随机数10^8次,然后统计每个数字出现的次数,最后发现每个数字出现的次数大约为10^7,说明在每次生成0~10的随机数时,每个数字的产生几率是相等的。

  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值