随机数rand(); 随机数种子 srand();
在运行程序代码的时候我们可能会需要大量数据来测试我们的程序是否正确,如果主观输入,缺点很多,如果可以让计算机自动生成数据提供给我们测试就会好很多。
如果你多次运行完代码之后就会发现一个问题,你每次运行过后的结果都是一样的。 在同样位置的数字都是一样的, 无论你什么时候运行 ,你换了电脑也是同样的 。那是因为rand()函数是一个通过一系列计算所得到的函数 ,结果是不变的 。
为了解决这个问题我们要设置一个随机数种子,srand();里面要的参数是一个无符号的整形。rand()默认的随机数种子是1。所以你如果想要每次运行得到的数据不一样 ,只需要改变随机数种子就可以。但是只要随机数种子是一样的,你每次运行过后对应位置的数据就是相同的。
那我们再来想想如何解决一个问题,我们如何让我们每次运行之后的数据都不一样,还不需要我们每次手动改数据,怎么能让srand();括号里的数字每次都变呢,时间啊!时间是一直在变化的,我们用一个获取时间的函数来当做参数。srand((unsigned)time(NULL));这个time()函数获取的是从1970年一月一日零时开始到现在这一刻的秒数,那么当你运行程序的时候,时间的秒数是在变化的,那么你每次得到的随机数也就不一样。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand((unsigned)time(NULL));
printf("%d\n",rand());
printf("%d\n",rand());
printf("%d\n",rand());
return 0;
}
当然啦,随机数也可以得到我们想要的范围内的值,这要怎么做呢?
如果想得到 0-9 范围内的随机数 rand()%10;
想得到 0-11 范围内的随机数 rand()%12;
1~10在第一个的基础上+1 也就是rand()%10+1就可以啦。