C/C++生成随机数函数rand()与srand()详解
5星 · 超过95%的资源 需积分: 45 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>`库,它提供了各种分布和高效的随机数生成器。
2008-11-22 上传
2017-01-15 上传
2021-01-01 上传
2023-10-05 上传
2014-03-01 上传
2021-10-11 上传
2020-12-31 上传
2009-02-27 上传
2023-05-31 上传
zzp191111
- 粉丝: 2
- 资源: 9
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码