C/C++生成随机数函数rand()与srand()详解

5星 · 超过95%的资源 需积分: 45 23 下载量 26 浏览量 更新于2024-09-22 收藏 16KB DOCX 举报
"C++随机数生成主要依赖于两个关键函数:rand()和srand()。rand()用于生成随机整数,而srand()则用于设定随机数生成的初始种子。" 在C++中,生成随机数是通过标准库中的`<cstdlib>`或`<stdlib.h>`头文件提供的`rand()`函数实现的。`rand()`函数产生一个在0到RAND_MAX之间的随机整数。RAND_MAX是一个预定义的常量,至少为32767,代表`rand()`可能产生的最大值。由于`rand()`使用线性同余法生成随机数,这些数字在多次运行程序时是可预测的,除非使用不同的种子进行初始化。 为了使每次运行程序时生成不同的随机数序列,我们需要使用`srand()`函数来设定随机数生成器的种子。`srand(unsigned int seed)`函数接受一个无符号整数作为参数,这个参数通常是一个不固定的值,比如当前时间`time(0)`,以确保每次运行时的种子都是唯一的。如果不设置种子或者设置相同的种子,`rand()`将会产生同样的随机数序列。 以下是一个使用`srand()`和`rand()`的例子,演示如何生成1到10之间的随机数: ```cpp #include <iostream> #include <ctime> #include <cstdlib> int main() { srand((unsigned int) std::time(0)); // 使用当前时间初始化随机数种子 for (int i = 0; i < 10; ++i) { int j = 1 + static_cast<int>(10.0 * rand() / ((double)RAND_MAX + 1.0)); std::cout << j << " "; } return 0; } ``` 在这个例子中,`srand((unsigned int)std::time(0))`确保了每次运行时都会有一个不同的种子,从而产生不同的随机数序列。`rand()/(RAND_MAX+1.0)`是为了将`rand()`的返回值转换到0.0到1.0之间,然后乘以10并向上取整,得到1到10的随机整数。 值得注意的是,尽管`rand()`可以满足大多数基本的随机数需求,但在需要高质量随机数的场合,如加密或模拟等,推荐使用更先进的随机数生成库,如C++11引入的`<random>`库,它提供了各种分布和高效的随机数生成器。