C语言之随机数函数( rand() )的使用方法

C语言之随机数函数( rand() )的使用方法文章出自个人博客 https knightyun github io 2018 04 25 c rand number 转载请申明 在程序设计中 难免会使用到随机值函数 其原理与语法大多类似 接下来以 C 语言为例介绍其随机值函数 rand 用法 原理引用百度百科 首先 需要包含头文件 include stdlib h rand 函数是按指定的顺序 stdlib h


文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明。


在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下来以C语言为例介绍其随机值函数 rand() 用法。

原理

引用百度百科,首先,需要包含头文件:

#include 
     
    

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:

#include 
     
    

理论太泛,下面用例子分析理解。

举例分析

先来理解以下伪随机数,编译以下代码:

#include 
      #include 
      #include 
      int main() { srand(1); int i; for (i = 0; i < 10; i++) printf("%d, ", rand()%11); } 

运行结果

8, 9, 9, 1, 7, 5, 5, 10, 1, 0, 

然后无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed 都是 1

但是假如把 seed 换成 time(NULL),每次就不一样了,如下:

#include 
      #include 
      #include 
      int main() { srand(time(NULL)); int i; for (i = 0; i < 10; i++) printf("%d, ", rand()%11); } 

结果是就变了,并且每次都不一样:

6, 3, 4, 5, 5, 9, 8, 10, 10, 4, 6, 4, 2, 4, 3, 2, 5, 1, 2, 9, 

这里的 time(NULL) 的结果是一个类似于 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。

拓展

这里注意一下例子中函数 rand() 的用法,函数括号内不需要加参数,如果直接调用 rand() 的话会生成下面这样的数:

17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105, 

所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,当然这也是取余运算的原理。



技术文章推送


手机、电脑实用软件分享



C语言之随机数函数( rand() )的使用方法







C语言之随机数函数( rand() )的使用方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200587.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:29
下一篇 2026年3月20日 上午10:30


相关推荐

  • make menuconfig 使用技巧

    make menuconfig 使用技巧makemenuconfig使用技巧1.直接按行首带颜色的字母,跳转到该行:2.按/搜索对应的configflag,可以看到对应的位置location,也可以直接跳转过去。不支持搜索对应的字符串描述,不区分大小写。如按/后,搜索CONFIG_FIXED_PHY,如下图,可以看到左侧(1),按对应数字,…

    2022年5月2日
    110
  • nacos和eureka的区别 面试_nacos和eureka比较哪个好

    nacos和eureka的区别 面试_nacos和eureka比较哪个好Eureka架构图:Eureka架构图1.服务注册(register):EurekaClient会通过发送REST请求的方式,向EurekaServer注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。EurekaServer接收到注册请求后,就会把这些元数据信息存储在一个双层的Map中。什么时候注册?在启动微服务的时候。2.服务续约(renew):在服务注册后,EurekaClient会维护一个心跳来持续通知EurekaServer,说明服务一

    2022年8月21日
    19
  • 豆包、千问、元宝三强争霸:谁在领跑AI赛道?

    豆包、千问、元宝三强争霸:谁在领跑AI赛道?

    2026年3月13日
    3
  • Intellij IDEA与Eclipse对比

    Intellij IDEA与Eclipse对比IntellijIDEA 与 Eclipse 对比这是一个比较热议的话题 因为这两款 IDE 都很优秀 总体给人的感觉就是 在没有接触到 IntellijIDEA 之前 写 java 代码如果没有 eclipse 这个代码还怎么写 使用了 IntellijIDEA 之后 会觉得原来还有如此智能的 IDE 使用 IDE 工具的目的 是为了提升编码效率 如果你已深深习惯了 eclip

    2026年3月27日
    2
  • 打开vi编辑器出现E325: ATTENTION错误的原因和解决办法

    打开vi编辑器出现E325: ATTENTION错误的原因和解决办法出现如图的所示的情况的原因是上次操作“data.txt”文件异常中断(文件没有退出就直接强制关机或者重启),产生了如下图所示的.data.txt.swp。此文件是隐藏文件查看是使用ls-a命令查看。解决办法是:使用rm命令删除该文件即可。…

    2022年5月19日
    38
  • compound extremes_conscientiousness

    compound extremes_conscientiousnessextremeComponents是一个好用的表格插件,可以方便的对分页,导出excel等进行操作并且可以和任何框架进行集成,包括springmvc,struts,struts2等

    2022年8月20日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号