c++ rand() srand()

如题所述

rand()函数是产生随机数的一个随机函数函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数srand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed);用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的[1]。

参考资料:http://baike.baidu.com/view/5876059.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-31
rand() 产生一个随机数
srand() 设定随机种子
如果不设定随机种子,你每次执行程序得到的rand的值都是同样的一组随机值,无法完全随机
第2个回答  2013-01-31
srand((unsigned)time(NULL)+(i<<i));
out<<rand()<<endl;
第一句设置随机种子,第二句产生随机种子并输出
第3个回答  2019-12-14
srand()的作用是生成一个“种子”然后你再用rand()取随机数的时候就用这个种子来经过计算得到一个数字,在种子相同的情况下rand()的结果是一样的,所以为了保证rand()的随机性,经常用当前的时间作为种子,这样就可以保证rand()每次的结果都是不同的
相似回答