0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在C语言中使用随机数

C语言编程学习基地 来源:未知 作者:胡薇 2018-11-09 16:46 次阅读

随机数的使用,是不少在学C语言过程中进行一些小功能开发的同学的一个技术问题,今天我们为大家讲解如何在C语言中使用随机数。

通常情况下,使用最多的方法的就是使用rand函数随机生成伪随机数来完成随机数的生成工作。注意这里的伪随机数并非是假的! 只不过是计算机按自己的一套理论生成,并不是”完全理想”状态下的随机数,所以是可以接受的。

函数原型为:int rand(void); 需要包含stdlib头文件,它可以生成一个0 ~RAND_MAX之间的数字,其中RAND_MAX是一个宏,VC6下笔者查看为0x7fff,建议大家亲自上机实验!

这个时候你可能会遇到下面几个问题:

Q1:为什么每次生成的数字都一样?

A1:rand函数每次生成的数字与所谓的”种子”有关,使用rand函数前需要使用srand函数进行种种子(请见后文)。如果没有调用,系统会默认给1,导致每次的随机数都一样。

Q2:为什么最大是0x7fff?

A2:这可能取决于编译器环境,笔者这里是VC6,在rand的函数中看到定义的最大值为0x7fff,如下图:

Q3:如果我想生成特定范围内的数字,该如何写呢?

A3:多多利用%求余运算符即可。如:

生成10以内的数字,可以参考rand()%10

生成1~10之间的数字,可以参考rand()%10+1

特定的,要生成a~b之间的数字,可以参考rand()%(b-a+1)+a

更多时候,我们希望每次运行生成的数字都不相同,这个时候需要配合srand函数来解决这一问题。关于具体原因,大家可以参考rand函数与srand函数的实现细节来加以理解,代码如下:

那么srand函数如何使用呢,先看函数原型:

void srand(unsigned seed); 只需要在rand函数使用之前,调用srand函数传入一个种子即可。但事实上传入一个数,往往产生的随时仍然固定不变。那么较为聪明的写法目前看来只有使用系统时间作为种子最为合适,所以这里srand的参数往往传入time(NULL)参数作为获取系统当前时间作为种子,来产生不同的结果!

并注意类型一致,srand((unsigned)time(NULL)); 记得添加time.h的头文件!

测试代码如下:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136683
  • 随机数
    +关注

    关注

    0

    文章

    18

    浏览量

    12016

原文标题:C语言如何使用随机数?

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问Ti的哪个库可以调用C语言随机数产生函数?

    Ti的哪个库可以调用C语言随机数产生函数啊,就是怎么在CCS里产生随机数
    发表于 07-31 07:03

    单片机C语言如何产生随机数

    来实现随机数的产生。 C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生的并不是真意正义上的
    发表于 05-14 15:14

    产生随机数的方法有哪些

    写好一个随机数表,然后进行取数据。也是可以的。KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现
    发表于 07-15 09:08

    什么是随机数

    做开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可。但实际上随机数后面还是有着比较复杂但也有趣的知识点的。根
    发表于 07-22 09:42

    C语言中随机数的产生及性能检验

    系统仿真或加密算法中常需要产生满足一定分布函数的 伪随机数 ,高级程序设计语言中的库函数采用线性同余法产生一个在[0,32767] 服从均匀分布的伪随机数,但每次程序运行的结果都
    发表于 07-07 16:35 70次下载

    C语言random函数伪随机数产生

    C语言的stalib.h库里面的random函数可以得到一个0-0x7FFFh的随机数,当然,调用随机数函数之前,是要进行种子的筛选的,以当前的时间参数作为种子,可以使得伪
    发表于 08-25 17:56 1.3w次阅读

    C#教程之伪随机数加密

    C#教程之伪随机数加密,很好的C#资料,快来学习吧。
    发表于 04-21 09:52 5次下载

    C语言教程之循环显示随机数问题

    C语言教程之循环显示随机数问题,很好的C语言资料,快来学习吧。
    发表于 04-25 15:03 0次下载

    产生随机数

    一个自己写的产生随机数的工程
    发表于 12-01 15:45 13次下载

    C语言中随机数的生成代码

    C语言中随机数的生成完整代码:
    的头像 发表于 02-20 09:21 1w次阅读

    单片机产生随机数的两种方法

    写好一个随机数表,然后进行取数据。也是可以的。KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现
    发表于 03-01 11:04 2272次阅读

    DApp的随机数为什么会被黑客破解

    随机数可以分为真随机数和伪随机数。真随机数需要同时满足随机性、不可预测性、不可重现性,而伪随机数
    发表于 10-18 10:59 2469次阅读

    单片机C语言如何产生随机数

    C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生的并不是真意正义上的随机数,是一个伪
    的头像 发表于 11-26 14:25 7559次阅读

    单片机C语言如何产生随机数

    随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个
    发表于 02-08 17:12 11次下载
    单片机<b class='flag-5'>C</b><b class='flag-5'>语言</b>如何产生<b class='flag-5'>随机数</b>

    何在FPGA中实现随机数发生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中实现4位伪随机数发生器(PRNGs)。
    的头像 发表于 08-06 11:20 662次阅读
    如<b class='flag-5'>何在</b>FPGA中实现<b class='flag-5'>随机数</b>发生器