在C语言中,我们一般采用头文件<stdlib.h>中的rand()函数来生成随机数,用法:
()中并不需要传递参数。 而我们可以使用%来对随机数确定一个取值范围,如:
int a=rand()%100就是产生0~99内的数字,而 int a=rand()%101+13却是13~113,这里应将%101看成一部分,+13又是另一部分,所以最小值就是0+13,最大则为100+13。
但是我们重复运行便会发现,a的取值一直固定为一个数了,实际上rand生成的是伪随机数,从我们打开计算机时就已经确定为一个数了,相当于我们打开电脑时就产生了一个种子,而我们只需要重新播种便能改变。srand函数能让我们重新播种使种子发生改变。实际使用中我们一般以时间为参数。
使用 <time.h> 头文件中的 time() 函数即可得到当前的时间:
多次运行便会发现随机数已经不同但他们似乎呈现递增或是递减形势(这是因为我们以时间为参数,而时间不会随机改变而是单调递增)
更有意思的来了,当我们想输入多个随机数的时候,一般使用循环来完成。
不难发现,明明我们每次循环都重新播种了为什么又变成了伪随机数啊!
for循环非常之快,很快便完成了此循环,而time时间间隔如果不超过1秒,time(NULL)返回值保持不变,即随机种子保持不变。
但当我们把srand((unsigned)time(NULL))拿出循环外时边输出了一串随机数。
因为time(NULL)是随毫秒变化的,种子变化极快,所以成无序性。(所以不要在循环中加入srand()函数)