目录:rand函数
srand函数
时间戳
time函数
随机数代码的实现
rand 函数 :可以产生随机数,但是这个随机数是伪随机数。这个伪随机数范围在0--RAND_MAX间
RAND_MAX大小依赖编译器实现,大部分编译器上是32767
为什么为伪随机数?先看如下代码 (rand函数使用需要头文件:stdlib.h)
运行结果看起来每个数字间好像毫无联系,但是试运行几次你会发现其实每次都是这几个数!!
原因:rand函数是对一个叫“种子”的基准值进行运算生成的随机数。之所以每次运行程序产生的随机数列一样,是因为rand函数生成随机数默认的种子是1。
显然这个随机数并不是真正的随机,那么如何真正生成随机数呢?
这里引入 srand 函数 用来初始化随机数的生成器的,原型如下:
可以在调用rand函数前先调用srand函数,通过strand函数的参数seed,来设置rand函数生成随机数的种子,这样只要种子在变化,每次生成的随机数序列也就变化起来啦。
种子如何选择?
在程序中一般选择程序运行时间作为种子,因为我时间在时刻变化。
所以再引入 time 函数,原型如下:(使用时需包括头文件 time.h
time函数会返回当前的日历时间,其实返回的是1970年1月1日0分0秒到现在程序运行时间之间的差值,单位是秒。返回类型 time_t (本质上是32位或64位整型类型)
time函数中参数timer如果是非NULL的指针的话,函数会将这个差值放在timer指向的内存中带回去。如果是NULL,则只返回这个时间差。time函数的这个时间差也被叫作:时间戳。
若只是让time函数返回时间戳,就可以这样写:
time(NULL);
下面就是真正生成随机数的代码
温馨提示:如果运行次数间时间间隔太短 那么生成的随机数也比较相近的