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

    文章

    7527

    浏览量

    128184
  • 随机数
    +关注

    关注

    0

    文章

    17

    浏览量

    11938

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

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

收藏 人收藏

    评论

    相关推荐

    请问如何在MATLAB中生成一组在规定范围符合指定分布的随机数

    何在MATLAB中生成一组在规定范围符合指定分布的随机数何在MATLAB中生成一组在规定范围符合指定分布的随机数例如,我想在1-60之间得到10个服从标准正态分布的
    发表于 03-17 11:40

    【assingle分享】labview随机数发生器

    ,提供了多种不同的函数,下面大概总结一下。一、伪随机数发生器在LABVIEW数值函数选板中,提供了一个随机数发生器函数,返回一个0-1之间的伪随机数。常规语言中都提供了类似的RAND函
    发表于 04-07 10:27

    求大神C语言编写产生100-255随机数程序

    89C51程序,C语言编写的,产生的随机数用数码管显示出来。求各路大神。或者有程序的直接发邮箱好了
    发表于 07-13 12:42

    随机数的应用

    随机数的应用!
    发表于 06-29 12:18

    【总结】LabVIEW随机数发生器

    ,提供了多种不同的函数,下面大概总结一下。一、伪随机数发生器在LABVIEW数值函数选板中,提供了一个随机数发生器函数,返回一个0-1之间的伪随机数。常规语言中都提供了类似的RAND函
    发表于 01-30 14:51

    随机数产生小程序求助

    刚开始学习Labview,想做一个小程序:打开布尔开关,自动产生0-10范围内的随机数,输出数值控件一直刷新随机数,开关关闭后,随机数停止刷新,输出控件显示最后一个随机数的值,再次打开
    发表于 04-18 23:50

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

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

    关于STM32真随机数算法的问题

    rand是伪随机数,真随机数配合定时器time()计算产生随机数,但是如果我想上电初始化的时候要产生一个随机数怎么做,单片机每次上电时间都是一样的,怎么产生这个真
    发表于 11-13 10:12

    单片机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

    AT32的随机数的产生

    AT32的随机数的产生为设计者使用AT32芯片时,产生符合应用需求的随机数,提供设计建议。
    发表于 10-26 06:04

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

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

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

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

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

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