伪随机数
C语言随机数的生成,很随机,又不随机,比如像下面的程序
//C语言生成随机数的函数在stdlib.h库中
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, i;
for (i = 0; i < 4; ++i)
{
a = rand();
printf("%d ",a);
}
return 0;
}
上面的代码经过运行生成了
41 18467 6334 26500
但是无论运行多好遍结果都是一样的,随机数并不随机。
这是因为rand()函数包含一个随机数种子,当我们没有指定时,这个种子默认为1,如果我们想要每次运行的结果不同,就需要一个变化的种子。
真随机数
现实世界的时间是流逝的,每一刻的时间都是不同的,这正满足了我们想要的随机。所以我们采集系统时间来做随机数种子,保证每次生成的结果不同。
这里用到time.h库
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a, i;
srand((unsigned)time(NULL));
for (i = 0; i < 4; ++i)
{
a = rand();
printf("%d ",a);
}
return 0;
}
srand函数生成随机种子。
srand函数的参数为无符号数,用(unsigned)强制转换
time(NULL)返回系统当前时间与1970年1月1日0时0分0秒之间的时间差,以秒为单位
这时候数字已经可以随机了,但是怎样才能获得我们想要的数字?
%(取余)不失为一个好选择。
例如,我们取0~10
a=rand()%10;
我们取10~100
a=10+rand()%100