随机函数rand()的使用方法——C语言
原理:
引用自百度百科:
所需包含的头文件:
1 #include <stdlib.h>
rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:
#include <time.h>
案例分析:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 int main() 5 { 6 srand(1); 7 int i; 8 for (i = 0; i < 10; i++) 9 printf("%d ", rand()%11); 10 }
以上是用伪随机数的代码,运行结果:
8 9 9 1 7 5 5 10 1 0
无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed
都是 1。
如把 seed
换成 time(NULL)
,每次就不一样了,如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 int main() 5 { 6 srand(time(NULL)); 7 int i; 8 for (i = 0; i < 10; i++) 9 printf("%d ", rand()%11); 10 }
运行结果:
1 6 3 4 5 5 9 8 10 10 42 6 4 2 4 3 2 5 1 2 9
这里的 time(NULL)
的结果是一个类似于 1524655706
的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。但是我们自身在用rand()函数时,即使不调用srand()也没事,因为系统好像会自动调用。
拓展:
注意一下函数 rand()
函数括号内不需要加参数,直接调用 rand()
的话会生成下面这样的数:
17163 2663 24810 4875 26975 14119 22193 11233 26009 20105
所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %
,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11
,0–100就写成 rand()%101
,就是运算符后的数字需要比需求范围极值大 1,这其实就是取余运算的原理。举个例子:对10取余,余数就是在0~9的范围。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)