《标准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); 
} 
}    

 

posted @ 2012-04-27 18:04  墨白麒麟  阅读(127)  评论(0)    收藏  举报