引言

在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函数详解相关推荐

  1. rand()函数与srand()函数以及随机数种子详解

    目录 引言 rand()函数 随机数 srand()函数 拓展思考 引言 初学者大部分对这两个函数的意义都不甚了解,以及不明白为什么需要srand()函数来播种,这里会对两函数的意义进行解释,让大家明 ...

  2. 784-C语言rand和srand用法详解

    C语言rand和srand用法详解 在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头 ...

  3. python scatter参数详解_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  4. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  5. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  6. 函数assert()详解

    函数assert()详解: 断言assert是一个宏,该宏在<assert>中,,当使用assert时候,给他个参数,即一个判读为真的表达式.预处理器产生测试该断言的代码,如果断言不为真, ...

  7. php。defined,PHP defined()函数的使用图文详解

    PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...

  8. python中tile的用法_python3中numpy函数tile的用法详解

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  9. Delphi Format函数功能及用法详解

    DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...

  10. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

最新文章

  1. C/C++产生随机数
  2. 查看mysql整个库的数据大小_查看mysql数据库容量大小
  3. WPF特效-拼图游戏
  4. 语言中能产生汉明窗吗_相声遇见“二次元”观众买账吗?
  5. Oracle做ip连接限制
  6. dubbo中使用kryo进行对象序列化,反序列化时报错
  7. 简单的俄罗斯方块代码(Java)
  8. linux下tar gz bz2 tgz z等众多压缩文件的解压方法
  9. 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
  10. sicp 3.9题解答
  11. JS随手记——三目表达式
  12. 微信支付被盗刷?微信:我们全赔!支付宝:我们秒赔!
  13. .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
  14. SUST OJ P5502
  15. Python之发送邮件模块
  16. 英雄无敌3 Mac 百度云 下载
  17. 80后上什么大学重要吗?看看这些IT富豪吧
  18. 人脸检测算法是什么,有哪些难点
  19. 辽宁师范大学本科毕业论文答辩PPT模板
  20. Python爬虫,微信公众号话题标签内容采集打印PDF输出

热门文章

  1. 怎么把在线网站保存的flv格式转换成mp4
  2. 关于REVIT复制已连接的线管(Conduit类)问题
  3. react使用@tweenjs/tween.js实现数字动态增长
  4. win7系统还原点来还原系统
  5. My console windows won't go away
  6. 小白也能开始VCS+Verdi的旅程
  7. matlab椅子怎么做,设计师张雷:用竹纸做一把椅子
  8. 易烊千玺成为罗莱家纺品牌代言人
  9. 常用的SQL语句大全-单表操作
  10. MySQL查询指令示例---初学者必看