随机数的设置

在C语言中,在stdlib.h的头文件里有一个库函数叫做rand()函数,其定义如下:
在这里插入图片描述

这个函数能够生成从0-32767的随机数,但是如果只是引用这个函数的话就会有一个问题,就是每一次运行程序,产生的随机数的顺序都是一样的,这样就失去了随机的性质,那么这是在为什么呢?

在定义中有这样一句话:
在这里插入图片描述
rand函数返回一个介于0到RAND_MAX之间的伪随机整数。在调用rand()之前,请使用srand()函数为伪随机数生成器。

就是说如果没有调用srand()函数的话,始终都是默认的随机数。因此要想产生每次都不同的随机数,就必须用srand()函数来作为rand()函数产生随机数的生成器。

srand()函数的定义如下:
在这里插入图片描述
srand()函数中的参数要求为unsigned int,因此使用时要强制转换为unsigned int类型,但是这样子就可以了吗,我们来看看结果:
在这里插入图片描述
在调用rand()之前用了srand()函数生成器,我们来看看结果:
在这里插入图片描述
发现产生的随机数都是一样的,这样子也不对,这个原因是因为srand()函数里用来生成随机数的参数seed是不变的,因此每次的随机数都是一样的,这样就达不到想要的效果了。那么,在计算机中,什么东西是一直在变的呢,就是时间!

在计算机中有一种东西叫做时间戳,是用来计算当前时间和计算机起始时间的差值,这个值是一直在变的(计算机的起始时间是1970年1月1日8:00),因此我们可以使用时间戳来作为srand()的生成器。

调用时间戳可以用time()函数
在这里插入图片描述
从定义来看,time()函数就是用来得到系统的时间,这正是我们想要的。
time()函数的参数是一个指针,但是我们在这里用不到,可以用空指针NULL代替。

但是这样子改了之后发现结果还是不对
在这里插入图片描述
还是会产生一样的值,这种情况是因为将生成器和调用rand()函数放在一个函数里,生成的时间和调用的时间几乎是一样的,所以在计算机运行的过程中几乎没有差别,才会导致现在的情况。所以在产生随机数的时候,将生成器放在主函数中就可以,然后在不同的函数中对rand()函数进行调用就可以了。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41490958/article/details/112912689
今日推荐