在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>头文件中,
srand()
:这是一个用于设置随机数生成器种子的函数。srand()
接受一个整数作为种子,用来初始化伪随机数生成器。(unsigned int)
:将time()
返回的time_t
类型的秒数强制转换为无符号整数类型,确保种子是一个正数。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,结束。