c++语言生成一个随机数,C/C++怎么生成“真正的”随机数

C/C++怎么生成“真正的”随机数

C语言中,直接用rand()函数生成随机数的话,会出现一个尴尬的局面,那就是每次运行都会生成相同的一个数,这显然不能满足我们的期望。怎么回事呢?

不管从哲学上说,还是从技术上说,都难以生成绝对随机的随机数,但是我们可以尽可能让那些“伪随机数”更像是“真正的”随机数。

先认识srand()

srand()是随机数发生器的初始化函数。原型函数是srand(unsigned int seed),通过参数seed改变系统提供的种子值。常用的srand((unsigned)time(NULL))就是根据系统的计时器来改变种子值,time(NULL)是用一套预先设定好的算法计算出的随机数,会随着时间变化。

为了清晰地看到seed的值随时间变化的情形,设计了下面几行代码。编译后多次运行,每次都能输出一个不同的值。

#include#includeusing namespace std;

int main()

{

int s=(unsigned)time(NULL);

cout<

再说说seed

系统调用rand()之前会先调用srand(),看用户有没有给seed一个指定的值。如果有,就用这个值作为产生伪随机数的初始值,如果没有,就会用一个固定不变的数作为初始值(这个值与系统有关)。

这就解释了为什么不用srand()给初始值,或是用了srand()但是给一个定值会导致随机数不变的问题。简单的说,只有种子的值变了,随机数才有可能变化。

回归正题

现在,我们貌似能够生成几个像样的随机数了。

#include#include#include#includeusing namespace std;

int main()

{

int a=1,b=50;

srand((unsigned)time(NULL));

for(int i=1;i<=10;++i)

{

int n=a+rand()%(b-a+1);

cout<

上面的代码将生成十个1到50之间的整数随机数。

注:怎么让rand()生成一定范围内的随机整数?

简单说,要生成a到b之间的整数(包含a和b),用a+rand%(b-a+1)就好了。

通俗说,a告诉系统该从哪里开始找随机数,而b-a+1则表示备选范围中一共有多少个整数。

结语

我是个初学者。过去是,现在是,以后还是。

博客有两个目的,一是备忘,虽然是些基础的知识(或是常识),仍然值得回味。二是因为我的水平较低,想多和大家交流,探讨,提升自己的水平。

原创文章,请尊重版权。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值