news 2026/5/12 4:10:32

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 4:09:34

高超音速武器技术解析:从超燃冲压发动机到战略稳定性挑战

1. 从巴黎航展的一则合作新闻说起前几天翻看一些老资料&#xff0c;又看到了2019年那篇关于“禁止高超音速武器”的评论文章&#xff0c;作者是EE Times的前执行主编乔治利奥波德。文章的核心事件源于当年的巴黎航展&#xff0c;当时除了波音和空客在窄体客机订单上的激烈角逐&…

作者头像 李华
网站建设 2026/5/12 4:06:34

如果真有外星人,快把我带走吧,换个坑

最近美国公布UFO文件&#xff0c;看了之后感觉多数不明“物体”本质上可能并不是“物体”&#xff0c;而就是一种空间能量聚集体。长久以来人们对“物体”和“物质”的理解实际上是有很大局限性的&#xff0c;就好像“物体”是个实体&#xff0c;推一下会动。实际上&#xff0c…

作者头像 李华
网站建设 2026/5/12 4:05:57

刘教链|百万美刀的比特币:VanEck的预言与微策略的进化困境

BTC在8万刀附近磨了一周。就在市场踟蹰不前的时候&#xff0c;VanEck抛出一个大胆的预测[1]。一、VanEck的百万预言5月9日&#xff0c;VanEck的投资主管Matthew Sigel说了一番话。他认为比特币会在下一届美国总统任期结束前达到100万美刀[1]&#xff0c;算下来大概是2031年前后…

作者头像 李华
网站建设 2026/5/12 4:05:37

路基非线性黏弹回弹模量反演与设计【附数据】

✨ 长期致力于路基工程、非线性、黏弹性、回弹模量、反演、群体智能算法、动三轴试验、原位测试研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;三维移…

作者头像 李华
网站建设 2026/5/12 4:04:21

Redis 集群详解:原理、架构、分片与故障转移

一、为什么要用 Redis 集群日常开发中单节点 Redis 存在三大致命问题&#xff1a;单点故障&#xff1a;单机挂掉直接导致缓存雪崩、业务瘫痪&#xff0c;无高可用能力。容量受限&#xff1a;单实例内存有限&#xff0c;海量数据无法横向扩容。性能瓶颈&#xff1a;单节点 CPU、…

作者头像 李华