C/C++中rand() 函数产生随机数与srand()设置随机数种子

 (1)rand()产生随机数,输出的随机数序列是确定的,即每次运行结果一致

#include <iostream>

int main()
{
	int i, j;
	for (i = 0; i < 10; i++)
	{
		j =10.0 * rand() /RAND_MAX;
		std::cout << j << "  ";
	}

	system("pause");
	return 0;
}

 

 第一次编译后:

第一次运行:0  5  1  8  5  4  3  8  8  7  请按任意键继续. . .

 第二次运行:0  5  1  8  5  4  3  8  8  7  请按任意键继续. . .

第二次编译后:

第一次运行: 0  5  1  8  5  4  3  8  8  7  请按任意键继续. . .

第二次运行:0  5  1  8  5  4  3  8  8  7  请按任意键继续. . . 

 

 (2)使用srand()设置随机数的种子,使得每次运行产生的随机数不一样

#include <iostream>
#include <time.h>

int main()
{
	int i, j;
	srand((int)time(0));   //包含time.h
	for (i = 0; i < 10; i++)
	{
		j =10.0 * rand() /RAND_MAX;
		std::cout << j << "  ";
	}
	system("pause");
	return 0;
}

第一次编译后:

第一次运行:5  0  8  8  8  4  9  8  0  6  请按任意键继续. . .

第二次运行:5  9  8  4  4  3  1  7  1  0  请按任意键继续. . .

第三次运行:5  1  1  0  2  6  8  1  2  8  请按任意键继续. . .

第二次编译后:

第一次运行:5  7  9  0  0  3  0  7  2  7  请按任意键继续. . .

第二次运行:5  6  1  0  7  1  4  4  8  9  请按任意键继续. . .

第三次运行:5  2  3  5  0  1  0  9  3  7  请按任意键继续. . .

 

#include <iostream>
#include <time.h>

int main()
{
	int i, j;
	srand((int)time(NULL));   //包含time.h

	for (i = 0; i < 10; i++)
	{
		j =10.0 * rand() /RAND_MAX;
		std::cout << j << "  ";
	}
	std::cout << std::endl;

	for (i = 0; i < 10; i++)
	{
		j = 10.0 * rand() / RAND_MAX;
		std::cout << j << "  ";
	}
	system("pause");
	return 0;
}

第一次编译后:

第一次运行:5  5  8  1  0  6  2  2  3  1
8  1  2  1  2  1  0  6  0  7  请按任意键继续. . .

第二次运行:5  5  3  0  7  8  0  4  5  8
0  3  8  4  0  8  8  2  9  7  请按任意键继续. . . 

 

 (3)每次调用srand()都将重新设置随机数种子,由于两次设置时间间隔小于1s【这是由于time(0)返回值是从1970年1月1日至今所经历的时间(以秒为单位)】,所有两次设置的种子一致,导致两次输出的随机数序列相同,所以如果不能保证两次srand()设置的时间间隔大于1s,则不要调用两次srand(),否则将得到相同的随机数序列

#include <iostream>
#include <time.h>

int main()
{
	int i, j;
	srand((int)time(NULL));   //包含time.h

	for (i = 0; i < 10; i++)
	{
		j =10.0 * rand() /RAND_MAX;
		std::cout << j << "  ";
	}
	std::cout << std::endl;

	srand((int)time(NULL));
	for (i = 0; i < 10; i++)
	{
		j = 10.0 * rand() / RAND_MAX;
		std::cout << j << "  ";
	}
	system("pause");
	return 0;
}

第一次编译后:

第一次运行:5  4  2  3  2  4  2  7  4  6
5  4  2  3  2  4  2  7  4  6  请按任意键继续. . . 

第二次运行:5  1  6  9  2  9  3  9  6  5
5  1  6  9  2  9  3  9  6  5  请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值