头文件
#include <cstdlib>
srand()函数功能: 修改rand()函数需要的种子值,rand()函数的默认种子是1。
rand()
函数返回一个伪随机数,其范围在0-RAND_MAX之
间。
RAND_MAX
的值依赖于库,不同的库RAND_MAX
值不同,但在所有的库中,RAND_MAX
至少是32767
。
1.对于以下代码
int main(){
for(int i=0;i<10;i++){
cout<<i<<":"<<rand()<<endl;
}
return 0;
}
每次运行产生的随机序列都是相同的,因为seed值默认为1,每次运行seed值都不变,即产生相同序列。
2.改变seed值,使用srand()
函数
int main(){
srand(time(0));//*time(0):系统从1970年1月1日00:00:00到现在总共的秒数*/
for(int i=0;i<10;i++){
cout<<i<<":"<<rand()<<endl;
}
return 0;
}
每次运行会产生不同的序列。
3.srand()
放在for循环内会有什么不同?
int main(){
for(int i=0;i<10;i++){
srand(time(0));
cout<<i<<":"<<rand()<<endl;
}
return 0;
}
产生的随机数都是一样的!
Why???
和第一点情况类似,相当于每次都从头执行了rand()函数,获取的是该seed值下第一个数。
(1)同一seed值下,rand()函数产生的随机序列是相同的,那么上面的代码相当于,每次都是取得该序列下的第一个值。
(2)为什么是同一序列?该for循环每次执行的时间很短,seed值几乎不变,所以产生的是相同的随机序列。