问题1:

怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。

专家解答:

之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式

计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个

特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进

行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序

列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand(

(unsigned)time( NULL )

),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数

来人为指定种子数。Windows

9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。

问题2:

我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列:

#include

#include

#include

#include

void main()

{

for(int i=0;i<100000;i++)

{

srand( (unsigned)time( NULL ) );

cout<

}

}

专家解答:

你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间

精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外:

srand( (unsigned)time( NULL ) );

for(int i=0;i<100000;i++)

{

//相关语句

}

C语言生成随机数需要用到两个函数,一个是srand(),一个是rand(),首先给srand()提供一个种子,unsigned

int类型,其取值范围从0~65535,srand()根据这个种子会由一个特定的公式生成一个随机数序列;然后调用rand(),它会依次从这个序列

中返回一个数(在0到32767之间),而在不指定srand()种子的情况下,它每次都使用默认的种子,因此生成的序列是同一个,你每次运行,当然就取

到相同的数字了。

你可以在程序里添加头文件time.h,用当前时间作为srand的种子,这样就能保证每次运行时都能取到不同的随机数序列。如下:

time_t t;

srand((unsigned) time(&t));

然后就可以用rand()取随机数了

真随机数 c语言编程,C语言真正获取随机数相关推荐

  1. [Lua语言编程]Lua语言基础知识

    文章目录 `Lua` `Lua`语言的起源 `Lua` 特性 `Lua下载` Linux 系统上安装 Mac OS X 系统上安装 Window 系统上安装 `Lua` `Lua`语言语法 `Lua` ...

  2. 11 12 13c语言编程,C语言编程

    C语言编程 1.sscanf() sscanf()与scanf()类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源. 头文件:#include 格式:int ssc ...

  3. 0.618法C语言编程,c语言编程题--0.618法求最小值

    c语言编程题--0.618法求最小值0 题目: 1.函数f(x)=x+10/x,初始量a=2,b=10,c=0.3 2.步骤:(1)取a1=a+0.382*(b-a),b1=b+0.618*(b-a) ...

  4. 100以内加减法C语言编程,C语言编程100题(其三)来啦!

    原标题:C语言编程100题(其三)来啦! 无论是风里,还是在雨里,我都在这里守候着你- 大家好啊,我是小C,咱们又见面咯,前面的题目做的怎么样呢,今天又给大家送上新的题目了,快来学习吧! 计算200到 ...

  5. 在线模拟c语言编程,c语言模拟编程学习软件v2019

    C/C ++程序设计学习与实验系统是一款可用于设计教学演示.学习与实验的C/C ++语言编程学习软件,是由从事教学的老师根据C/C ++的初学者及C程序多媒体演示研发.对于想要学习C语言的朋友是一个不 ...

  6. 6174C语言编程,C语言验证6174数学问题

    有意思的数学问题 任意4位不完全一样的数字,能组合出的最大数字减去能组合出的最小数字,得到一个新的数字(3位数补0),重复以上操作,不超过7个循环,必然得到一个数:6174 这个问题是之前发布的文章, ...

  7. 面向对象的C语言编程-DynamicLinkageGenericFunctions--C语言中的偷梁换柱

    文章目录 `DynamicLinkageGenericFunctions` Constructors and Destructors 方法.信息.类和对象 `new` `delete` `clone` ...

  8. 数制转换c语言编程,C语言数据结构中数制转换实例代码

    C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以 ...

  9. 万年历(c语言)编程,C语言实现的万年历

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #include #include static char *months[]={&quo ...

  10. 月份30或31c语言编程,C语言程序设计上机编程方法.PPT

    C语言程序设计上机编程方法 2000年1月25日 北京理工大学 / <C语言程序设计>上机编程方法 <C语言程序设计>上机编程方法系列讲座 5月24日 中心教学楼0231 下午 ...

最新文章

  1. idea resources目录_最全八种IDEA目录类型标注:Mark Dir as Sources/Resources Root
  2. c#版在pc端发起微信扫码支付
  3. 将一个MapString, String写入properties文件,并且覆盖原来的内容
  4. 设计模式 — 创建型模式 — 建造者模式
  5. 用关系型NoSQL回到未来
  6. php+mssql 分页,一个PHP+MSSQL分页的例子
  7. [转]Windows Shell 编程 第十四章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988010】...
  8. C语言插入排序Insertion Sort算法(附完整源码)
  9. python画图小猪佩奇_吊炸天!Python 20秒画出小猪佩奇
  10. 地产相继入局智能家居,LifeSmart云起获新世界集团战略投资
  11. 爬虫-视频资源的爬取
  12. php 获取文件扩展名
  13. 机器学习 Machine Learning- 吴恩达Andrew Ng Week2-Octave
  14. 【每天一个 Linux 命令】tree命令
  15. 在ideaIU上使用JDBC连接MySQL及简单操作
  16. 微商模式的出路在哪里?
  17. 使用markdown写论文
  18. 大数据会议资料学习笔记201402
  19. android10无法获取ssid,How to get WIFI SSID in Android 10.0?
  20. 桌面窗口管理器(dwm.exe)占用高内存的解决方法

热门文章

  1. vue实例的参数说明
  2. CSS 图像居中对齐
  3. Vue进阶-异步动态加载组件
  4. 餐饮行业收银系统源码,C# .NET + MSSQL WPF
  5. 数据库关闭的四种方式
  6. 几个常用的产品原型设计工具
  7. 【MOS管】基础知识和简易电路
  8. ubuntu截屏软件
  9. 【原创】nbsp;Window7nbsp;vs201…
  10. 华为认证双IE网络工程师,花了三天时间整理的OSPF详解,建议收藏