文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明。


在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下来以C语言为例介绍其随机值函数 rand() 用法。

原理

引用百度百科,首先,需要包含头文件:

#include <stdlib.h>

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:

#include <time.h>

理论太泛,下面用例子分析理解。

举例分析

先来理解以下伪随机数,编译以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{srand(1);int i;for (i = 0; i < 10; i++)printf("%d, ", rand()%11);
} 

运行结果

8, 9, 9, 1, 7, 5, 5, 10, 1, 0,

然后无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed 都是 1

但是假如把 seed 换成 time(NULL),每次就不一样了,如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{srand(time(NULL));int i;for (i = 0; i < 10; i++)printf("%d, ", rand()%11);
} 

结果是就变了,并且每次都不一样:

6, 3, 4, 5, 5, 9, 8, 10, 10, 4,
6, 4, 2, 4, 3, 2, 5, 1, 2, 9,

这里的 time(NULL) 的结果是一个类似于 1524655706 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。

拓展

这里注意一下例子中函数 rand() 的用法,函数括号内不需要加参数,如果直接调用 rand() 的话会生成下面这样的数:

17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105,

所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,当然这也是取余运算的原理。


技术文章推送 手机、电脑实用软件分享

C语言之随机数函数( rand() )的使用方法相关推荐

  1. 【C语言】随机数函数rand和srand

    文章目录 一.随机数函数 1.rand().srand() 2.time() 二.案例实现 1.案例描述 2.代码实现 一.随机数函数 1.rand().srand() C语言产生随机数要用到的函数是 ...

  2. c语言产生随机数函数

    c语言产生随机数函数 rand()函数和srand()函数 在头文件 stdlib.h中 rand()函数返回一个从0~32767之间的随机整数,为了生成区间 [m,n] 之间的整数,可以用公式 ra ...

  3. mysql 列 随机数_MySQL的指定范围随机数函数rand()的使用技巧

    公式如下: rand() * (y-x) + x 咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数 ...

  4. C++产生随机数函数rand()

    C++产生随机数函数rand() C++11之前没有random,生成随机数用rand(),可以配合srand()来使用.rand()不是真正的生成随机数,而是线性取余,有可能也会生成相同的数出来.生 ...

  5. sqlserⅴer随机函数_SQL server的随机数函数rand()详解

    SQL server的随机数函数rand()详解 from:http://tieba.baidu.com/f?kz=607363268 在SQL Server中,有个随机函数rand(),有不少新手可 ...

  6. c mysql生成随机数函数,MySQL的指定范围随机数函数rand()的使用技巧

    公式如下: rand() * (y-x) + x 咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数 ...

  7. MySQL集函数随机数_MySQL的指定范围随机数函数rand()的使用技巧

    公式如下: rand() * (y-x) + x 咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数 ...

  8. php随机整数rand和mt_rand,PHP随机数函数rand()与mt_rand()的讲解

    PHP随机数函数rand()与mt_rand()的讲解 PHP中rand()与mt_rand()都是用于产生一个指定范围内单独随机数的函数,如果需要产生多个不重复的随机数,请参考:PHP生成指定范围内 ...

  9. c++随机数函数rand()

    c 语言rand()生成随机数 c语言中rand()函数生成随机数的用法: 详细介绍: (1)使用该函数首先应在开头包含头文件stdlib.h #include<stdlib.h>(C++ ...

最新文章

  1. Codeforces Round #703 (Div. 2)(A ~ F)超高质量题解【每日亿题2 / 19】
  2. 商城开发(1)-前期准备
  3. c# oldb连接_C#使用ODBC与OLEDB连接数据库的方法示例
  4. Thymeleaf在循环时设置递增序号
  5. 二维指针*(void **)的研究(uC/OS-II案例)
  6. 每日程序C语言44-反向输出一个链表(递归)
  7. H5+JS+相对单位rem实现第三方支付页(输入金额+模拟数字键盘+自适应布局+大写金额)
  8. One Order CLOSING date修改后的执行原理
  9. shiro学习(16):使用注解实现权限认证和后台管理二
  10. Tips--图像特征提取方法HOG、SIFT、LBP优缺点对比
  11. JZOJ 1386. 排序
  12. php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
  13. Elasticsearch搜索类型(query type)详解
  14. RabbitMQ延迟消息队列实现定时任务完整代码示例
  15. Unity2018引用System.Windows.Forms.dll发布报错
  16. Sublime 3 打开GBK 编码文件中文乱码 解决办法
  17. python语言程序设计实践教程实验八答案_Python语言程序设计.doc
  18. Android TV开机优化
  19. Linux gd库安装步骤说明
  20. 来自和府捞面的信任,一起见证「客户的成功就是璞华的成功」

热门文章

  1. 【Beta阶段】第八次Scrum Meeting
  2. 80C51定时器中断
  3. Typora+Gitee+PicGo搭建图床
  4. b站黑马的Vue快速入门案例代码——小黑记事本
  5. 【愚公系列】2023年05月 攻防世界-Web(fileclude)
  6. ByteBuffer解密
  7. 无符号数跟有符号数之间暗藏杀机
  8. 线性回归预测波士顿房价
  9. 百度地图 省市区县 信息展示
  10. XP蓝屏死机错误代码查询