答案:C++中常用rand()和srand()生成随机数,需用srand(time(0))设置种子以获得不同序列,结合取模运算可生成指定范围内的随机数,但因其随机性差、跨平台不一致等问题,高要求场景应使用C++11的库。

在C++中生成随机数,最常用的方法是使用标准库中的rand()函数和srand()函数。虽然C++11之后推荐使用更现代的随机数库(如
rand() 函数:生成伪随机数
rand() 是 C++ 标准库中的一个函数,定义在 cstdlib 头文件中,用于生成一个0到RAND_MAX之间的伪随机整数。
RAND_MAX 是一个常量,至少为32767,具体值取决于编译器。
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include#include iostream>
using namespace std;
int main() {
int num = rand();
cout return 0;
}
每次运行程序时,如果未设置随机种子,rand() 会生成相同的“随机”序列,这显然不是我们想要的结果。
srand() 设置随机种子
为了使每次运行程序都能得到不同的随机数序列,需要使用 srand() 函数设置随机种子。srand() 同样定义在 cstdlib 中。
通常结合 time() 函数(来自 ctime)来获取当前时间作为种子。
常见写法:
#include
#include
using namespace std;
int main() {
srand(time(0)); // 以当前时间为种子
int random_num = rand();
cout return 0;
}
注意:srand() 只需调用一次,通常放在程序开始处。多次调用可能导致随机性变差。
生成指定范围内的随机数
实际开发中,我们往往需要某个区间内的随机数,比如1到100之间的整数。
可以使用取模运算配合偏移实现:
- 生成 [0, n-1] 的随机数:rand() % n
- 生成 [a, b] 范围内的随机数:rand() % (b - a + 1) + a
例如:生成1到6之间的随机数(模拟掷骰子):
int dice = rand() % 6 + 1;注意事项与局限性
尽管 rand() 和 srand() 使用简单,但也存在一些问题:
- 随机质量不高,尤其低位的随机性较差
- RAND_MAX 值有限,不适合高精度需求
- 不同平台行为可能不一致
对于要求较高的项目,建议使用 C++11 提供的
基本上就这些。掌握 rand 和 srand 是入门C++随机数的基础,理解其原理有助于过渡到更强大的现代C++随机机制。










