第1个回答 2011-04-05
产生随机数函数(可在函数速查中可知):randomize(),srand(),rand(),random().
void randomize(void)
通过time函数来得到一个随机数,此数将成为起始发生数据
(stdlib.h | time.h)
void srand(unsigned number)
该函数和rand函数配合使用,产生随机数的起始发生数据
int rand(void)
产生一个随机数(0到 0x7fff 之间)
(stdlib.h)
int random(int num)
得到一个在0和参数num之间的随机数
(stdlib.h)
随机数生成的原理
“计算机产生的随机数一般都只是一个周期很长的数列,不是真的随机数。也就是说,随机数一般是伪随机数,每个随机数都是由随机种子开始的一个已定的数列(周期很长)。一般地,为了随机数更真一点,随机种子在系统中通常是参照系统时钟生成的。”
以上引用了别人的话。有几个关键点:一是所谓的随机数是伪随机数,二『伪随机数生成器返回的每一个值完全由它返回的前一个值所决定数(最终,该种子决定了一切)』。所以产生随机数,首先要解决随机数种子的问题。下面举几个可能遇到的问题:
一、两次运行产生的随机数列相同
……
for(i=0;i<10;i++) printf("%d",rand());
……
上面的程序本意是每次运行后,屏幕输出10个随机数。但如果紧紧只是这段代码,那后果就是,无论运行多少次,每次产生的这10个随机数都和前一次生成的10个数一一对应。
可做如下修改:
……
randomize();
for(i=0;i<10;i++) printf("%d",rand());
……
如此,每次运行产生的随机数列就是不同的啦。因为randomize()是以系统时间为随机数种子的。如果两次运行时间间隔大于一秒,那么种子就会不同。本回答被提问者和网友采纳