相关函数
1、rand()
- 介绍
函数功能:rand()函数是产生随机数的一个随机函数。
函数返回:返回的随机数是 0 ~ RAND_MAX (32767)之间的随机整数。
使用时需包含头文件 #include <stdlib.h>。
但严格意义上来说它不是真正的随机值,在它里面有一个算法,调用它时就会通过种子算出一个数,但是因为该函数的默认种子是 1,就算用它得到了一个数,看似是随机的,其实再次执行程序会发现还是那个数,这就没什么意义了,于是它就被称为伪随机数。
因此我们就需要srand()函数来提供随机的种子,rand就会返回随机值了。
- 用法
获得范围为 0 ~ m-1 之间的整数:
int x = rand() % m
获得范围为 n ~ m 之间的整数:
int x = (rand() % m) + n;
- 示例
2、srand()
- 介绍
srand函数是随机数发生器的初始化函数。
通俗来说:srand()函数为rand()函数提供随机数种子,rand()就能根据其种子算出伪随机值。
- 函数原型:
void srand(unsigned int seed)
rand()函数调用前会查看是否有srand()函数给定了种子,有则调用srand(seed)一次来初始化它的起始值。,若没有,那么就默认种子为 1 。
seed值就是我们自己给定的种子,但是这个种子也是不变的,导致仍然是伪随机数,如果我们想让这个种子变化该怎么办?这时候就需要=time()函数了;
- time()函数
函数功能:获取当前的系统时间。
函数返回:返回结果是一个time_t类型。
函数原型:
time_t time(time_t * timer)
time_t * timer是一个指针,在这用不到,直接给NULL就行。
返回类型 time_t 是一个时间戳可以将其看作long long int,也就是一个很大的整数。时间在不断的发生变化,时间戳也就跟着变化。
- 用法
#include <time.h>
包含头文件!
srand((unsigned int)time(NULL));
将time函数返回值转为无符号整型作为随机数种子,此时rand函数所产生的值就是真正的随机值了。
- 示例
- 注意
千万不能将srand函数写在循环里,只需要初始化一次即可。
否则不会改变,或者说如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。