C++中生成随机数方法:rand()函数
在C++中,可以使用 #include <·cstdlib·>头文件中的随机函数来生成随机数。
以下是几个常用的随机函数
文章目录
C++中生成随机数方法:rand()函数一、随机函数的介绍1.rand()函数2.srand()函数(1)srand函数的介绍(2)随机种子的介绍时间种子进程ID种子用户输入种子 二、具体实例1.随机生成整数2.随机生成有范围的整数3.随机生成浮点数
一、随机函数的介绍
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()即可。