广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    c 如何产生50000至150000之间的随机数

    来源:网络收集  点击:  时间:2024-04-03
    【导读】:
    在日常编程中我们经常会遇到需要随机数的情况,虽然目前的随机数都是伪随机,不过还是可以满足需求的。那么在C语言中,我们该如何产生一定范围内的随机数呢?工具/原料more任意一个可以进行C语言程序开发的IDE一、建立一个简单演示项目1/1分步阅读

    这里我们依然使用方便简单的Devc++来进行代码的编写及测试。

    关于Devc++的使用可以参考另一篇经验。

    我们这里建立一个简单的演示项目,先保持默认的代码。

    二、了解相关库函数1/4

    首先来看看C语言的库函数。

    可以看到伪随机数生成器是在头文件stdlib.h中定义的。

    主要是两个函数:rand 和 srand。

    2/4

    先看看库函数:rand。

    3/4

    再来看看库函数:srand

    4/4

    可以看到文档中说,rand会生成0-RAND_MAX的整型数,我们再来看看这个RAND_MAX是什么。

    三、编写随机数生成代码1/5

    其实我们在rand文档中就可以看到相关的代码。

    2/5

    我们来运行下程序看看。

    在运行时我们可以发现,无论我们运行程序多少次,该代码生成的伪随机数都是50041,从来没有变过。第二个数字是rand所能生成的最大伪随机数,之所以把这个打印出来,是因为我们待会要讨论一个问题。

    3/5

    那么如何才能够让程序运行时生成的伪随机数看起来是随机的,起码不是一个不变的随机数。

    这就要用到我们的srand函数了。

    srand函数是用一个随机数种子初始化随机数生成器的。

    如果不使用srand来初始化随机数生成器,那么rand生成的结果是与srand(1)是一样的。我们来看看是不是这样。

    4/5

    如果我们把srand的参数换成别的呢。比如9527。

    可以看到生成的伪随机数确实是变了,但是问题依然存在,那就是生成的始终是一个数字。

    5/5

    看来,我们只有给srand赋值不同的参数才能解决这个问题。

    那么该如何在程序运行时保证srand的参数不一样呢。

    你一定想到了时间这个东西,没错就是将时间传递给srand。

    上代码,我们代码一次生成了10个伪随机数。

    看起来貌似是那么回事了,好像能够正常工作。但是这里面有一个坑。

    四、填上面代码的坑1/3

    上面的代码看起来运行的很好,看起来也确实是随机的,但是隐藏了一个问题。

    我们先来生成40个伪随机数看看。

    2/3

    上面的运行结果有什么问题?

    我们看到生成的40个伪随机数有50000+、60000+、70000+、80000+,最大的数是82556。没有一个90000以上的,实际上也不会出现一个大于82767,也就是不会出现一个大于50000+32767的数。

    你可能觉得是生成的数少造成的,但是答案是无论你生成多少数都是我说的那样。

    为什么?

    我们看rand的文档说,rand生成的数在0-RAND_MAX之间,这个RAND_MAX我们已经打印出来了,是32767。也就是rand生成的最大数是32767,所以再加50000,最大也就是82767。

    既然这样,那该怎么办。

    看代码:

    3/3

    上面的代码,我们通过多次调用不同范围的随机数生成器,来生成给定范围内的随机数,然后通过求和以达到我们的目的。

    运行下看看。可以看到最小的数字是71025,最大的是140257。

    五、进一步建议1/1

    在最新的C++11标准中,有一个random库也提供了随机数生成功能。相比较来说功能更强大,使用更方便,起码在生成大随机数时比C库要方便。

    C语言随机数
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_410391.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-07 16:31:07  耗时:0.035
    0.0352s