C++随机函数rand与srand详解及用法

4星 · 超过85%的资源 需积分: 42 15 下载量 131 浏览量 更新于2024-09-19 收藏 28KB DOC 举报
在C++编程中,随机数生成是常用的功能,特别是当需要模拟不确定性和多样性时。本文主要讨论了两个关键的随机函数:rand()和srand()。这两个函数分别用于生成随机数和初始化随机数种子。 rand()函数位于<stdlib.h>头文件中,其原型是intrand(void)。它并非真正的随机数生成器,而是基于线性同余法实现,周期很长,使得在一定范围内(通常是0至RAND_MAX,至少为32767对于int类型,或者65535、4294967295对于更大的数据类型)看起来像随机。尽管如此,由于rand()没有预设的种子,每次程序启动时默认使用1作为种子,这可能导致重复的随机序列。为了打破这种重复,我们需要使用srand()函数。 srand()函数的目的是设定rand()的随机数种子,它的原型是void srand(unsigned int seed)。这个函数需要一个整数作为参数,通常可以使用系统时间(如time(0))或进程ID(如getpid())作为种子,以确保每次程序运行时产生的随机数序列有所不同。如果不提供不同的种子,rand()将重复产生相同的随机数序列。 以下是一个示例代码片段,展示了如何在C++中使用这两个函数生成介于1到10之间的随机整数: ```cpp #include <stdlib.h> #include <time.h> int main() { int i, j; // 设置随机数种子,确保每次运行时生成不同的序列 srand(time(0)); for (i = 0; i < 10; i++) { // 使用srand设置的种子,生成一个0到RAND_MAX的随机数,并将其映射到1到10 j = 1 + (int)(10.0 * rand() / (RAND_MAX + 1.0)); printf("%d ", j); } return 0; } ``` 执行这个程序,你会看到每次运行都会得到不同的随机数序列,因为种子是根据当前时间设置的。然而,如果你有意让程序生成完全相同的随机数序列,只需传递相同的种子给srand()即可。 理解并正确使用rand()和srand()函数对于编写具有随机性质的C++程序至关重要,尤其是在游戏开发、模拟和加密等领域。记住,虽然它们能提供一定程度的随机性,但实际应用中可能需要外部随机数源或更复杂的随机数生成算法来满足更高的随机性和安全性需求。