
C++中生成随机数方法:rand()函数
·
C++中生成随机数方法:rand()函数
在C++中,可以使用 #include <·cstdlib·>头文件中的随机函数来生成随机数。
以下是几个常用的随机函数
文章目录
一、随机函数的介绍
1.rand()函数
在C++标准库中rand()函数是生成0到RAND_MAX之间的随机整数,RAND_MAXs是定义一个宏定义,在库中定义为一个大于32767的整数。
但是rand()函数生成的随机数是一个伪随机数(每次代码运行都是相同的数字除非重启),需要设置随机数种子。
2.srand()函数
(1)srand函数的介绍
在C++标准库中srand()函数可以传递一个整数值作为种子,从而改变rand()的随机序列,一般可以使用time(NULL)作为时间种子,根据当前时间作为随机数种子。
(2)随机种子的介绍
时间种子
原理:使用系统时间作为随机数种子,根据时间改变随机数。
代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
// 使用系统时钟作为硬件种子
srand(time(0));
for (int i = 0; i < 5; i++) {
int randomNum = rand(); // 生成随机数
std::cout << "Random number: " << randomNum << std::endl;
}
return 0;
}
进程ID种子
原理:使用进程ID作为随机数种子,每一个进程拥有各自的ID。
代码:
#include <iostream>
#include <cstdlib>
#include <unistd.h> // 包含 getpid() 函数的头文件
using namespace std;
int main() {
// 使用进程ID作为随机数种子
srand(getpid());
// 生成随机数
for (int i = 0; i < 5; i++) {
int randomNumber = rand();
cout << "Random number: " << randomNumber << endl;
}
return 0;
}
用户输入种子
原理:根据用户输入的值调动不同的种子,从而实现随机数。
代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(4); // 设置随机数种子为4
for (int i = 0; i < 5; i++) {
int randomNum = rand(); // 生成随机数
std::cout << "Random number: " << randomNum << std::endl;
}
return 0;
}
二、具体实例
1.随机生成整数
代码:
#include<iostream>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(NULL));
int b = rand();
cout << b;
}
先设置随机数时间种子,在定义变量。
2.随机生成有范围的整数
代码:
#include<iostream>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(NULL));
int max = 1000;
int min = 10;
int b = min+rand()%(max-min+1);
cout << b;
}
int b = min+rand()%(max-min+1);
注释:
①rand()取得0~RAND_MAX的随机数【左闭右闭】
②取模运算使其范围缩小到0~991【左闭右开】
③加上min从而实现min~max+1【左闭右开】
3.随机生成浮点数
代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(NULL)); // 设置随机数种子为当前时间
double randomFloat = rand() / static_cast<double>(RAND_MAX); // 生成一个范围在 0 到 1 之间的随机浮点数
cout << "随机浮点数:" << randomFloat << endl;
return 0;
}
注释:
static_cast(RAND_MAX)代码表示将RAND_MAX转换double类型。
由于 rand() 的范围是0~RAND_MAX,所以最终的范围是0到1的浮点数。
补充:
如果想取大于1的浮点数
代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(NULL)); // 设置随机数种子为当前时间
double randomFloat = rand() / static_cast<double>(RAND_MAX)+rand();
return 0;
}
在 rand() / static_cast(RAND_MAX)加上rand()即可。
更多推荐
所有评论(0)