C++用rand()和srand()生成随机数

内容来自《编程实战宝典》

首先来看函数原型

int rand(void);

void srand(unsigned int seed);

1、rand()函数不需要任何参数,直接返回一个随机数,注意,这个随机数是有范围的,在0~RAND_MAX之间,RAND_MAX一般最小取值为32767,其具体值在头文件stdlib.h中进行定义

2、srand需要一个无符号整形数作为参数(种子),如果作为种子的无符号数相同,那么获取的随机数也就相同,注意:srand()必须配合rand()使用才能有效果 

下面是用法

#include <iostream>
using namespace std;

int main()
{
	int i;

	cout << "测试rand()函数" << endl;
	cout << "随机数最大值RAND_MAX为:" << RAND_MAX << endl;
	for (i = 0; i < 3;i++)
	{
		cout << "num = " << rand() << endl;
	}

	cout << "测试srand()函数" << endl;
	cout << "使用不同的种子生成随机数" << endl;
	for (i = 0; i < 3;i++)
	{
		srand(i);
		cout << "num = " << rand() << endl;
	}

	cout << "使用相同的种子生成随机数" << endl;
	for (i = 0; i < 3;i++)
	{
		srand(2);
		cout << "num = " << rand() << endl;
	}
}

 

以下是结果 

可以看出,在使用srand()函数时,如果使用相同的种子,那么最终用rand()函数所生成的随机数也相同

 

特定随机数的生成

为了使rand()函数生成的随机数在一定的范围内,可以使用如下表达式

a + rand() % n

  

使用上述表达式生成的随机数的范围在a ~ (a + n)之间,其中a为生成的随机数的最小值,a + n - 1为最大值。

例子如下

#include <iostream>
using namespace std;
int main()
{
	cout << "生成特定范围内的随机数:" << endl;
	cout << "生成5 到 15 之间的随机数" << endl;
	for (int i = 0; i < 5;i++)
	{
		cout << "num = " << 5 + rand() % 10 << endl; //可生成5,6,7,...,14,不包含15
	}
}

  

结果如下

 

 使用系统时间作为种子生成随机数

为了让随机数更像随机数,降低人为因数的干扰,可以使用系统当前时间作为种子产生随机数

 

#include <iostream>
#include <time.h>		//时间函数time()的头文件
#include <windows.h>	//暂停函数Sleep()的头文件
using namespace std;

int main()
{
	cout << "使用系统时间作为种子生成随机数:" << endl;
	for (int i = 0; i < 5;i++)
	{
		Sleep(1000);	//暂停一秒,避免因程序执行过快,5次循环中系统时间未发生变化,导致产生的随机数也相同
		srand((unsigned)time(NULL));
		cout << "num = " << rand() << endl;
	}
	return 0;
}

  

结果

 

也可以使用系统时间作为种子生成特定范围内的随机数

  懒得举例了。。

posted @ 2019-02-27 21:08  机智的小小帅  阅读(2887)  评论(0编辑  收藏  举报