C++随机函数 rand()、srand()

rand():

rand()是用线性同余法实现的,因此不是真的随机数,但因其周期特别长,故在一定

的范围里可看成是随机的。

rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用

unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中

的机率是相同的。     

用户未设定随机数种子时,系统默认的随机数种子为1。

rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。

srand():

srand()用来设置rand()产生随机数时的随机数种子。

参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。

如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

rand()和srand()的关系:

rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不一样,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了。(摘自:http://www.jb51.net/article/102529.htm)

#include <iostream>
#include <cstdlib>   
#include <ctime>  
using namespace std;
int main() {
	int k = 50;
	int low = 1, high = 10;
	srand(time(0)); //// srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数
	while(k--) { 
		int x = low + rand() % (high - low); //[low,high)
		//int x = low + 1 + rand() % (high - low); //(low,high]
		//int x = low + rand() % (high - low + 1); //[low,high]
		//int x = low + 1 + rand() % (high - low - 1); //(low,high)
		cout << x << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/chushoufengli/article/details/80070284