c语言 srand was not,c语言srand生成随机数的问题
srand是初始化种子。你这个问题我们不得不谈到rand函数的实现。
我们来看看概念性的代码static unsigned long next = 1;/* 如果你不 srand,那种子就默认为1 */
int rand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void srand(unsigned seed) {
next = seed;
}
真正的这俩函数的实现比这个复杂多了,但是原理是一样的。
其实rand函数就是种子经过一系列计算后取余,更新种子,并返回取余后的这个值。
那么,更新种子和初始化种子有何不同呢?
初始化种子是给种子一个固定值。
我们可以清楚的知道,rand每次运行后是自己更新种子的,经过一系列数学原理的运算取余等,导致了每次的返回值不相同,造成了随机数的现象。
但是如果这样会怎么样?srand(2);
a = rand();
srand(2);
b = rand();
a和b会相等!
原因在于生成a后种子值本来被rand更新了,但又被srand(2)设置为了2!
因为仅仅是数学运算,当种子相同,即都为2时,返回值是相同的。所以两次生成的随机数才相同。
明白了这个,我们返回来看看你这个问题。
其实你也是同理的,你在函数里这么写int creatnum()
{
srand(time(NULL));
return rand()%10+1;
}
调用的时候a = creatnum();
b = creatnum();
实际上就是srand(time(NULL));
a = rand()%10+1;
srand(time(NULL));
b = rand()%10+1;
可以看出,虽然是时间作种子,但是由于计算机运行速度太快了,在一秒之内就执行完了你这四句代码,所以time(NULL)产生的秒数是相同的!
这就发生了上面那个问题。
但是如果你函数不写srand(time(NULL));而写在主函数里,看起来就像是srand(time(NULL));
a = rand()%10+1;
b = rand()%10+1;
生成a后种子值被rand更新了。当然就和b不一样了。
不懂再问。
c语言 srand was not,c语言srand生成随机数的问题相关推荐
- java随机数语句_Java语言程序设计(七)Math类生成随机数及if语句
Java有几种类型的选择语句,单向if语句,双向if语句,嵌套if语句,switch语句和条件表达式. 1.单向if语句 if(radius>=0){ area = radius*radius* ...
- 【C语言】C语言随机数生成教程,C语言rand和srand用法详解
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...
- C语言:生成随机数(并非固定的随机数)——rand()、srand()
C语言:生成随机数 1.rand() 函数 2.srand() 函数 3.生成一定范围内的随机数 在实际编程中,我们经常需要生成随机数. 1.rand() 函数 在C语言中,我们一般使用 <st ...
- 第十章 结构体_C语言随机数生成教程,C语言rand和srand用法详解
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...
- C语言随机数生成教程,C语言rand和srand用法详解
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...
- C语言详解生成随机数的过程,time函数、时间戳timer、rand函数和srand函数,附猜数字小游戏
第十一篇:随机数详解 一.准备工作(预备知识) 1.1.生成伪随机数(函数rand) 1.2.伪随机数"变成"随机数(函数time) 1.3.生成确定范围随机数 二.练手随机数经典 ...
- c语言连续生成不同随机数_C语言随机数生成教程,C语言rand和srand用法详解
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为: int ran ...
- c语言随机数猜字,玩猜字游戏顺便理解c语言的伪随机数(rand,srand)
随机数 要想要产生真正的随机数,需要先来了解下面几个函数. rand()函数 C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数. RAND_MAX 是 ...
- 北京邮电大学c语言按要求输出_C语言经典100例004-统计各个年龄阶段的人数
系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...
- c语言线性顺序表,C语言程序——线性顺序表.doc
C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...
最新文章
- 专业软件测试,各类专业软件测试情况
- LIB和DLL的区别与使用,非常详细
- HTML5学习笔记(二十七):Ajax
- 【SSH进阶】java.lang.IllegalArgumentException: id to load is required for loading
- java如何获取全部省市_纯java获取省市区
- CorelDRAW2022最新电脑版离线安装教程
- IDM与其他下载器加速器优缺点介绍
- VUE定时器任务(每天定时12点执行)
- matlab矩阵转入tecplot,[转载]tecplot编辑自己想要的变量
- Ubuntu 查看文件以及磁盘空间大小管理
- win11 删除自带的微软输入法
- 计算机boot快捷键,求各种电脑进入boot 的方式,一般的电脑快捷键是什么?
- svn update冲突解决
- 云呐:资产密集型企业固定资产管理系统的基本功能特点
- 鸿蒙二部曲之一,网文封神之作,“鸿蒙二部曲”和“斗罗四部曲”你选择站哪边?...
- 如何在opengl用代码绘制英文_如何用Python画一只肥肥的柯基狗狗——turtle库绘制椭圆与弧线实践...
- Android初学------系统设置之设置输入法
- 合同诈骗与普通诈骗有什么区别
- 商业研究(18):以小见大,看互联网经济(4个股权众筹平台,10个项目)
- 学习OMO游戏管理驾驶舱的设计