rand函数和srand函数详解
引言
在C语言中,rand函数可以用来产生随机数,但并不是真正意义上的随机数。它是返回介于 0 和 RAND_ MAX 之间的伪随机整数。这个数字是由一个算法生成的,该算法每次调用它时都返回一个显然不相关的数字序列。该算法是使用一个种子来生成序列,当计算机正常开机后,这个种子的值是固定的,因此产生的伪随机整数也是固定的,除非你为了改变这个值破坏了系统。为了初始化的值不同,C语言提供了srand函数。
srand函数原型
void srand(unsigned seed);
rand函数代码示例
调用rand函数,需要包含头文件 <stdlib.h>
这里先说一下rand函数的用法,在确定的范围内生成平凡的伪随机数,如下表所示:
v1 = rand() % 100 | v1 取值范围 0~99 |
---|---|
v2 = rand() % 100 + 1 | v2 取值范围 1~100 |
v3 = rand() % 30 + 1985 | v3 取值范围 1985~2014 |
代码示例
int main() {int i = 0;for (int i = 0; i < 10; i++) {printf("%d ", rand() % 10);}system("pause");return 0;
}
多次运行不难发现,每次运行结果都相同。这里就不贴运行结果了,大家下去可自行尝试
srand函数代码示例
调用srand函数,需要包含头文件 <stdlib.h>
此处注意
使用系统时间来初始化,需要包含头文件<time.h>
代码示例
int main() {int i = 0;srand((unsigned int) time(0));for (int i = 0; i < 10; i++) {printf("%d ", rand() % 10);}system("pause");return;
}
根据上面两个代码的运行结果便可看出,不加srand函数的rand函数产生的随机数是伪随机数
rand & srand
rand函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果没有,种子的值就默认为1,直接用 1 来初始化种子,那生成的随机数每次就会重复,为了防止生成的随机数重复,一般使用时间戳作为时间种子,采用系统时间来初始化,使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数。
RAND_MAX
RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。
注意事项
如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。
所以,一定不要将srand写在生成随机数的循环中~
参考资料网址:http://cplusplus.com/
rand函数和srand函数详解相关推荐
- rand()函数与srand()函数以及随机数种子详解
目录 引言 rand()函数 随机数 srand()函数 拓展思考 引言 初学者大部分对这两个函数的意义都不甚了解,以及不明白为什么需要srand()函数来播种,这里会对两函数的意义进行解释,让大家明 ...
- 784-C语言rand和srand用法详解
C语言rand和srand用法详解 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头 ...
- python scatter参数详解_Python中scatter函数参数及用法详解
最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...
- python scatter参数详解_Python 中 scatter 函数参数及用法详解
Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- 函数assert()详解
函数assert()详解: 断言assert是一个宏,该宏在<assert>中,,当使用assert时候,给他个参数,即一个判读为真的表达式.预处理器产生测试该断言的代码,如果断言不为真, ...
- php。defined,PHP defined()函数的使用图文详解
PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...
- python中tile的用法_python3中numpy函数tile的用法详解
tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...
- Delphi Format函数功能及用法详解
DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...
- python中的json函数_python中装饰器、内置函数、json的详解
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
最新文章
- C/C++产生随机数
- 查看mysql整个库的数据大小_查看mysql数据库容量大小
- WPF特效-拼图游戏
- 语言中能产生汉明窗吗_相声遇见“二次元”观众买账吗?
- Oracle做ip连接限制
- dubbo中使用kryo进行对象序列化,反序列化时报错
- 简单的俄罗斯方块代码(Java)
- linux下tar gz bz2 tgz z等众多压缩文件的解压方法
- 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
- sicp 3.9题解答
- JS随手记——三目表达式
- 微信支付被盗刷?微信:我们全赔!支付宝:我们秒赔!
- .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
- SUST OJ P5502
- Python之发送邮件模块
- 英雄无敌3 Mac 百度云 下载
- 80后上什么大学重要吗?看看这些IT富豪吧
- 人脸检测算法是什么,有哪些难点
- 辽宁师范大学本科毕业论文答辩PPT模板
- Python爬虫,微信公众号话题标签内容采集打印PDF输出