C/C++生成随机数函数rand()与srand()详解
5星 · 超过95%的资源 需积分: 45 71 浏览量
更新于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-09-02 上传
2009-02-27 上传
2023-05-31 上传
zzp191111
- 粉丝: 2
- 资源: 9
最新资源
- OPNET 用户指南_翻译稿
- 数据库的设计-----VFP
- FLEX 3 CookBook 简体中文学习基础资料PDF
- TOMCAT移植到JBOSS
- Myeclipse7[1].0+JBoss5.0测试EJB3.0环境搭建过程详解
- PROTEUS中文教程
- NCURSES Programming HOWTO中文第二版
- 高性能计算之并行编程技术--MPI并行程序设计
- ORACLE备份策略
- 软件评测师07年大题与答案,Word版
- The Productive Programmer.pdf
- c#团队开发之命名规范
- 计算机操作系统(汤子瀛)习题答案.pdf
- ArcGIS Server轻松入门
- 基于组播技术的网络抢答系统设计
- USB数据采集的几个问题