当前位置: 首页 > news >正文

【C语言】生成随机数(rand\srand\time)

一、随机数

(1)真随机数没有规律的随机生成,完全不可预测

(2)伪随机数:通过一个确定的数学公式计算出来,看起来毫无规律,但本质上是可预测的、可重复的

(3)密码学安全伪随机数:介于上面两者之间的一个特殊分类,本质上还是用算法算出来的(伪随机),但是使用了极其复杂的加密算法

二、rand \ srand \ time 函数

2.1 rand()

随机数生成器,它会返回一个介于 0 到 RAND_MAX 之间的整数

注:需要包含头文件#include <stdlib.h>

RAND_MAX是一个常量,不同的编译器和系统上可能不同,在大多数常见的系统中,它的值通常是32767

内部是通过一个固定的数学公式来算数字,需要提前给它设定一个初始值(种子),每次程序启动时,都会根据设定的种子计算出一个值,不设置的话默认种子是1

注:同一个种子每次运行时产生的随机数是相同的,不管运行多少次

2.2 srand()

随机数种子设置器,它的作用是给 rand() 提供一个初始值(种子),但是它也需要接收一个 unsigned int(无符号整数)作为种子

注:需要包含头文件#include <stdlib.h>

注:同一个种子每次运行时提供给rand的随机数种子就是相同的,不管运行多少次

2.3 time()

时间获取工具,time() 的返回值就是从 1970年1月1日 00:00:00 开始,一直到你调用这个函数的那一瞬间,总共流逝的秒数,他是一直在变化

注:需要包含头文件#include <time.h>

srand和rand使用时,如果srand初始值是固定的,那么给rand提供的种子就是固定的,每次生成的随机数就是固定的,所以我们使用time提供一个时刻变化的值

三、生成步骤

我们常用的C语言随机数是伪随机数,生成步骤分为三步:

(1)设置随机数种子(初始化)

srand(time(NULL));

time() 函数其实可以接收一个指针参数用来直接存储时间,但我们这里不需要存储,只需要它的返回值,所以传入 NULL(空指针)即可

这样我们就将time的返回值作为srand的种子来生成一个rand的种子,传给了rand函数,保证rand每次生成的数值都不相同

(2)获取基础随机数

int num = rand();

这个时候我们运行程序就可以得到一个随机数,rand生成的数会很大,我们通常需要指定范围的数(比如 1 到 100)

(3)限定数值范围(取模运算)

如果想生成[m, n]之间的随机整数,公式为:

int result = rand() % (n - m + 1) + m;

计算% (n - m + 1) 的目的是算出这个范围内总共有多少个数

计算+ m 是为了把起始点从 0 偏移到 m

eg:比如我想生成5-10的随机数

m = 5, n = 10

5、6、7、8、9、10,我们用 n - m + 1算出来这个区间一共有6个数

rand() % 6只能生成0、1、2、3、4、5这6个数,相当于随机数的起始点是0

这时候我们再 + 5 ( m )将起始点改为5,那么生成的随机数就变为5、6、7、8、9、10

http://www.jsqmd.com/news/799930/

相关文章:

  • 创意工作者AI实战指南:Claude与Cursor提升45倍效率
  • Msfvenom深度解析:从MSF分离出的后门生成器,Linux计划任务持久化实战
  • 哔咔漫画下载器完整指南:告别网络卡顿,打造个人离线漫画图书馆
  • FPGA实现UART与电力线通信的高效桥接方案
  • 终极Blender 3MF插件:如何快速实现3D打印文件的无缝转换
  • 基于MCP协议构建垂直领域AI知识服务:猴头菇茶MCP服务器实战
  • 雾计算在物联网中的架构革新与实践
  • 告别手动画图!用Ultra Librarian+OrCAD Capture CIS 5分钟搞定Cadence原理图库
  • GPU需求曲线重塑:从季节性疲软到持续高烧的产业变革
  • Windows光标定制工具开发:从Win32 API到Delphi桌面应用实践
  • 3步快速上手RobotHelper:安卓自动化脚本框架新手指南
  • ENVI 5.3保姆级教程:手把手搞定Landsat 7影像从辐射定标到FLAASH大气校正的全流程
  • AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告
  • 深度解析VinXiangQi:基于深度学习的中国象棋AI连线工具终极指南
  • ltx2.3 最强开源视频生成模型,支持图生视频、文生视频、消费级显卡可本地部署,一键整合包
  • ViGEmBus终极指南:3步掌握Windows游戏手柄模拟核心技术
  • 大型机场U型机坪推出等待点运行优化【附案例】
  • NotebookLM Drive整合失效诊断图谱(含HTTP 403/401错误码映射表、OAuth2作用域校验清单)
  • Sora 2生成素材在AE中频繁掉帧?20年合成老炮儿用CUDA Graph重构图层管线,性能提升3.8倍(含Profile对比图)
  • Pretticlaw:AI应用开发的工作流编排与生产部署平台
  • iPhone 17 护眼膜选购避坑:为什么说圆偏振光才是真护眼?
  • Axolotl与LLaMA-Factory对比:架构与扩展性分析-方案选型对比
  • 硅应变计与Σ-Δ ADC协同设计及温度补偿技术
  • Harness 中的动态熔断阈值调整
  • 清华研究发现:当世界模型能够通过视觉想象而非纯文本思考时,其推理方式更接近人类!
  • 谁懂啊[特殊字符]UniApp上架苹果4.3a被拒?改UI?纯纯大冤种行为!
  • 基于Gemini CLI Blueprint框架构建AI命令行工具:从原理到实践
  • AI发展速度惊人,普通人如何抓住时代红利?内含低门槛入局指南!
  • Discord集成Claude智能体:极简Docker容器化部署与安全实践
  • 使用remote2mac实现Windows远程开发macOS:VSCode SSH配置与优化指南