真随机数 c语言编程,C语言真正获取随机数
问题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语言真正获取随机数相关推荐
- [Lua语言编程]Lua语言基础知识
文章目录 `Lua` `Lua`语言的起源 `Lua` 特性 `Lua下载` Linux 系统上安装 Mac OS X 系统上安装 Window 系统上安装 `Lua` `Lua`语言语法 `Lua` ...
- 11 12 13c语言编程,C语言编程
C语言编程 1.sscanf() sscanf()与scanf()类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源. 头文件:#include 格式:int ssc ...
- 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) ...
- 100以内加减法C语言编程,C语言编程100题(其三)来啦!
原标题:C语言编程100题(其三)来啦! 无论是风里,还是在雨里,我都在这里守候着你- 大家好啊,我是小C,咱们又见面咯,前面的题目做的怎么样呢,今天又给大家送上新的题目了,快来学习吧! 计算200到 ...
- 在线模拟c语言编程,c语言模拟编程学习软件v2019
C/C ++程序设计学习与实验系统是一款可用于设计教学演示.学习与实验的C/C ++语言编程学习软件,是由从事教学的老师根据C/C ++的初学者及C程序多媒体演示研发.对于想要学习C语言的朋友是一个不 ...
- 6174C语言编程,C语言验证6174数学问题
有意思的数学问题 任意4位不完全一样的数字,能组合出的最大数字减去能组合出的最小数字,得到一个新的数字(3位数补0),重复以上操作,不超过7个循环,必然得到一个数:6174 这个问题是之前发布的文章, ...
- 面向对象的C语言编程-DynamicLinkageGenericFunctions--C语言中的偷梁换柱
文章目录 `DynamicLinkageGenericFunctions` Constructors and Destructors 方法.信息.类和对象 `new` `delete` `clone` ...
- 数制转换c语言编程,C语言数据结构中数制转换实例代码
C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以 ...
- 万年历(c语言)编程,C语言实现的万年历
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #include #include static char *months[]={&quo ...
- 月份30或31c语言编程,C语言程序设计上机编程方法.PPT
C语言程序设计上机编程方法 2000年1月25日 北京理工大学 / <C语言程序设计>上机编程方法 <C语言程序设计>上机编程方法系列讲座 5月24日 中心教学楼0231 下午 ...
最新文章
- idea resources目录_最全八种IDEA目录类型标注:Mark Dir as Sources/Resources Root
- c#版在pc端发起微信扫码支付
- 将一个MapString, String写入properties文件,并且覆盖原来的内容
- 设计模式 — 创建型模式 — 建造者模式
- 用关系型NoSQL回到未来
- php+mssql 分页,一个PHP+MSSQL分页的例子
- [转]Windows Shell 编程 第十四章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988010】...
- C语言插入排序Insertion Sort算法(附完整源码)
- python画图小猪佩奇_吊炸天!Python 20秒画出小猪佩奇
- 地产相继入局智能家居,LifeSmart云起获新世界集团战略投资
- 爬虫-视频资源的爬取
- php 获取文件扩展名
- 机器学习 Machine Learning- 吴恩达Andrew Ng Week2-Octave
- 【每天一个 Linux 命令】tree命令
- 在ideaIU上使用JDBC连接MySQL及简单操作
- 微商模式的出路在哪里?
- 使用markdown写论文
- 大数据会议资料学习笔记201402
- android10无法获取ssid,How to get WIFI SSID in Android 10.0?
- 桌面窗口管理器(dwm.exe)占用高内存的解决方法