当我们要用到随机数时,通常是要用到C程序库中所提供的rand() ,但因为其“伪”性,所以如果要产生真正的随机序列必须要了解“ 种子”的概念。开始的时候这个“种子”是我不知道的。如今总算找到了答案。
因为随机数产生函数 rand()(函数原型int rand(void);)的机理是通过一个静态全局变量来产生的,即种子。默认情况下种子 = = 1;如下:
ststic unsigned long int next = 1; //种子
int rand ( void)
{
next = next * 1103515245 + 12345;
return (unsigned int ) (next / 65536) % 32768; //可见产生的随机数是不大于 32768;
}
可见每次调用此函数的时候产生的数当然就一样咯。
所以就又有了个重置种子的第二个函数 srand ().(函数原型 void srand(unsigned int seed));来帮助rand()了,但这往往还是达不到我们的要求,因为我们只有每次通过重置种子来改变产生的随机数,这常常显得比较麻烦。
void srand(unsigned int seed)
{
next = seed;
}
要是可以自动重置种子该多好啊。这是可行的。因为一个系统的时钟往往是在不断的变化的。因此可以通过一个能够从系统时钟中得到不同返回值的函数time()来初始化种子。
#include <time.h>
srand((unsigned int) time(0))
这样就可以随着每次的rand()而产生不同的随机数了。
如产生1000以内随机数:
int getrand(void) /*产生随机数*/
{
srand(time(NULL));
return rand()%1000+1;
}
这个函数可以产生1到1000之间的真随机数