输出随机数的完整代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
srand((unsigned int)time(NULL));
printf("%d\n", rand());
return 0;
}
引言:
如何在c语言中实现输出随机数呢?我们只需调用rand函数就行,但关键来了,rand函数真的随机吗?
下面我们可以通过如下代码来验证一下:
3次运行结果如下:
第一次 第二次 第三次
我们发现
rand不算是真正的随机而是一种将已经随机的数的模板印刻下来的伪随机数。但是这里我们需要知道的是rand()括号中放的是“种子”,当没有输入值时,默认为1。
那么问题来了不同的种子是不是就对应不同的“模板”?
是的。我们只需要改变种子的数,就可以使rand“随机”起来。这里我们用到一个函数srand,来改变种子。
可是问题又来了,我们要如何使种子随机起来,也就是改变起来呢?难道用rand吗这不又绕回来了吗?
所以这里我们需要引用一个新概念:time——时间戳。
什么是时间戳通过百度百科我们可以看到
时间戳每时每刻都在变我们就可以用此当作种子才实现种子的变化。
因此我们可以写出这样的代码:
time中不需要传参所以我们定义成NULL空。
注:srand中的参数是无符号整型:
有人就会想到,我们人为的修改不就好了嘛。但是很遗憾是不行的,我们通过代码可以知道。
所以综上要使用随机数,需要rand和srand以及time配套使用才行。