《标准c++开发入门与编程实践》——随机数函数srand()/rand()
随机数函数定义在<cstdlib>:
int rand();
rand()返回0~RAND_MAX中随机的一个整数,最大随机整数值RAND_MAX一般会在头文件中被定义。
rand()的产生依赖于一个发生器序列,一般需要调用srand()函数来初始化一下发生器,这个初始值一般被称作随机种子,srand()函数的原型:
void srand(unsigned int seed);
通常的做法是将时间的毫秒数作为这个种子:
time_t time(0);
如下是一个实例:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
srand((unsigned)time(0));
for(int i=0;i<10;i++)
{
cout<<rand()<<endl;
}
cout<<"RAND_MAX:"<<RAND_MAX<<endl;
return 0;
}
某次输出如下:
2866 19880 10504 22030 23353 2547 23105 20051 5081 11269 RAND_MAX:32767
可以看出,rand()通过某种算法确实达到了生成随机数的目的。
可以看出,rand()产生的随机数是0~RAND_MAX,RAND_MAX在16位机器为32767,在32位为65535,但是在实际应用中,我们一般需要的是产生0~10,这种较小集合的,一种简单的做法是取 rand()%10,但是这样明显不妥,因为0~9之间数字产生并不是概率均等的。一般采用另外一种做法:(int)((rand()*10.0)/(RAND_MAX+1.0))
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
浙公网安备 33010602011771号