笔记-生成随机数

在C++中可以使用rand()函数来生成随机数,rand()函数的使用需要头文件<cstdlib>.

但是rand() 函数在每次程序运行时都会生成相同的随机数序列。例如:

使用rand()函数,代码如下:

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
	int n;
	for(int i=0;i<5;i++)
	{
    	n=rand();
	    cout<<n<<" ";
	}
	cout<<endl;
	return 0;
}

运行结果:

再次运行结果相同。

如果想要每次随机生成的随机数序列变化,可以结合使用 srand() 函数来设置不同的种子。

使用rand()函数结合使用srand(),代码如下:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	int n;
	srand((unsigned int)time(NULL));
	for(int i=0;i<5;i++)
	{
    	n=rand();
	    cout<<n<<" ";
	}
	cout<<endl;
	return 0;
}

运行结果:

每次运行结果都不相同。

在此代码中,srand((unsigned int)time(NULL));用到了srand()函数,此函数同样包含在<cstdlib>头文件中,

  1. srand():这是一个用于设置随机数生成器种子的函数。srand() 接受一个整数作为种子,用来初始化伪随机数生成器。
  2. (unsigned int):将 time() 返回的 time_t 类型的秒数强制转换为无符号整数类型,确保种子是一个正数。
  3. time(NULL):获取当前时间的秒数。time() 函数是一个C/C++标准库函数,用于获取当前系统时间的秒数(自1970年1月1日午夜以来的秒数),并以 time_t 类型的形式返回。它在 <ctime> 头文件中声明。                                                                                                                 函数原型:time_t time(time_t* timer);                                                                                       timer:一个指向 time_t 类型的指针,用于存储从 Epoch(1970年1月1日午夜)开始的秒数值;   如果传递了一个非空的指针参数,函数会将当前时间的秒数存储在该指针所指向的位置上。如果不想获取返回值,可以将参数设置为 nullptr(在 C++ 中)或者 NULL(在 C 语言中)。                                                                                                                                     time_t:通常是一个整数类型,表示时间的秒数。在不同的平台上,time_t 可以是有符号的或无符号的整数类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ***使用当前时间的秒数作为种子,初始化伪随机数生成器,以便生成不同的随机数序列。这样可以增加随机性,使得每次运行程序时生成的随机数序列都不同                                                                                                                                                                                        ***在理论上,如果你在相同的秒数调用 srand() 函数,它可能会产生相同的随机数序列,因为种子相同。但是实际上,由于 srand() 函数通常使用的是操作系统的时间信息,它的分辨率通常是秒级的,所以在同一分钟内,很可能不会调用 srand() 函数两次。即使在同一秒内调用 srand() 函数两次,由于 srand() 函数会将种子转换成整数类型,而操作系统的时间通常是以秒数存储的,所以即使在同一秒内调用 srand() 函数,秒数的微小变化也可能会导致不同的种子值。总的来说,除非你在同一秒内多次调用 srand() 函数,否则不同分钟的相同秒数通常不会产生相同的随机数序列。

补充:

如果想要生成的数在一定范围之内,比如说生成的数在[40,100]之间,可以采用取余的方式。

比如:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	int n;
	srand((unsigned int)time(NULL));
	for(int i=0;i<5;i++)
	{
    	n=rand()%61+40;//注意这里是对61取余而不是对60取余,若为60,则取余最大为59,整个数最大取到 
                        //99,无法取到100.
	    cout<<n<<" ";
	}
	cout<<endl;
	return 0;
}

想要随机数在[a,b]之间,则rand()%(b-a+1)+a;

可以上级试一下:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	int n;
	srand((unsigned int)time(NULL));
	for(int i=0;i<5;i++)
	{
    	n=rand()%11+20;//生成数在[20,30]
	    cout<<n<<" ";
	}
	cout<<endl;
	return 0;
}

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	int n;
	srand((unsigned int)time(NULL));
	for(int i=0;i<5;i++)
	{
    	n=rand()%7+5;//生成数在[5,11]
	    cout<<n<<" ";
	}
	cout<<endl;
	return 0;
}

ok,结束。

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值