程设的lab2文档内容,觉得这段写的还不错
使用rand()函数可以返回一个随机数,范围在0~RNAD_MAX(定义在 stdlib.h 中,值为 2147483647)之间。
那么如果我们想要生成指定范围内的随机数该怎么做呢?这里就不得不提到我们的%运算符,在控制范围时经常使用的一个小工具,通过它我们可以完成范围的上限的确定,比如:rand()%10,可以让我们得到一个0-10的随机数。那么下限呢,在此基础上,我们可以把%看成是一个区间长度控制器,于是乎,当区间长度卡死的情况,我们只需要控制开始的数值,就可以完成对区间的控制,于是:rand()%10+1就可以表示1~11的随机数了
但是我们仍然会发现问题,就是我们会惊奇地发现,他这东西每次运行产生的随机数都是固定的,这显然就是一个假的随机数,与我们的最终目标显然不相同,故而,我们需要寻找一个改进方案,也就是srand()函数
srand()函数实际上是一个初始化随机数发生器,参数即为seed,这名字一听就很复杂,实际上它是用来设置rand()产生随机数时的种子,换句话说,只要我们的种子不断变化,我们的这批随机数也随之发生变换,由此可知,srand函数中我们必然希望传入一个在每次程序中都不同的变量,最简单而又快捷的就是时间,也即time(0),其返回的是从1970 UTC Jan 1 00:00到当前时刻的描述(不过说到这,又有一个有趣的overflow的问题,当然在这不是重点,就不细说了),于是乎我们就可以每次运行都有不同的随机数种子了,也就能完成我们的实验目标了,但是还有一件事非常值得注意,就是由于time(0)返回的是秒数,那么如果我们在间隔不到1s的时间去取出两个种子,那么必然他们是相同的两个数值,于是我们又会得到伪随机数,这也提醒我们千万不要把srand放在循环里