rand()
C语⾔提供了⼀个函数叫rand,这函数是可以⽣成随机数的,函数原型如下所⽰:
int rand (void) ;
rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。
rand函数的使⽤需要包含⼀个头⽂件是:<stdlib.h>
知道了rand()函数的基本用法,我们可以去用rand()函数随机产生几个数看看它的效果。在这里我们随机产生5个随机数。(你们也可以按照自己的意愿尝试几次)
两次运行的结果:
第一次运行的结果 第二次运行的结果
(在这里我运行了两次,大家如果有兴趣可以多运行几遍)
经过多次运行的结果我们可以看出 连续几次所生成的随机数是一样的。这是为什么呢???
大家可以思考一下。
回归正题,前面我们讲了rand函数会返回⼀个伪随机数,那么什么是伪随机数呢???伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。 之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。
srand()
C语⾔中⼜提供了⼀个函数叫srand,⽤来初始化随机数的⽣成器的,srand的原型如下:
void srand(unsigned int seed)
程序中在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。 那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数。
需要注意的是:srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。
我们可以用rand和srand来写一个产生随机数的代码:
运行结果(这里我只运行了两次,也可以按照自己的意愿多运行几次)
第一次运行结果 第二次运行结果
这时我们就会发现每次运行所产生的随机数就不一样了。
那么思考一下,我们应该如何确定随机数产生的范围呢??
这里我给出来了一个公式:如果要产生的随机数的范围是 a~b 方法如下
a + rand( ) & (b-a+1) ;