生成随机数的方法
1 rand函数
c语言提供了rand这个库函数来实现随机数的生成,函数原型如下,包含在stdlib.h中
此数字由一种算法生成,该算法每次调用时都会返回一系列明显不相关的数字。该算法使用种子来生成序列,应使用函数将其初始化为某个独特的值。
来自cplusplushttps://legacy.cplusplus.com/reference/cstdlib/rand/?kw=rand
它会产生一个0到RAND_MAX的数字,RAND_MAX这是一个宏,在stdlib.h中定义为32767。
2 srand函数
我们注意到上文中提到rand函数会使用一个种子,我们可以理解为一个随机数生成的起始位置,如果我们不设置,编译器默认为1,这样每次生成的值都是一样的,所以它生成的其实是一个伪随机值。
这时我们需要设置这个种子,就要用到srand函数,同样与rand函数一样包含在stdlib.h中。函数原型如下。
参数是一个无符号整形,那我们不能每次在生成代码的时候都手动去改变这个值,设置我们rand函数生成随机值的起点。我们需要一个时刻在变的值来当作参数传递给srand函数。
srand(1);//第一次使用
srand(2);//第二次使用
srand(3);//第三次使用
//等等
3 time函数
我们既然提到时刻在变的值,那么时间不就是现成的例子。
我们想到c语言的time.h中的time函数,他会返回一个时间戳,而时间是时刻在变化的,原型如下
srand((unsigned int )time(NULL));
因为time函数的返回值time_t类型的数据而srand函数要的是无符号整形,所以我们需要强转类型一下。这样我们就得到了时刻在变化的随机值了。
4 代码实现
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
printf("%d ",rand());
return 0;
}