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

#include

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

#include

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

举例分析

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

#include #include #include 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 #include #include 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语言编译产生随机数为什么,C语言 怎样产生随机数相关推荐

  1. c语言编译为机器语言过程,C语言编译全过程

    C语言编译全过程 编译的概念 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成 ...

  2. c语言编译的手机软件,C语言编译工具

    软件介绍 C语言编译工具app是一款功能十分强大的手机编译.更换代码的软件工具,C语言编译工具app可以快速进行代码翻译.代码查找.替换等,它支持多种代码语言,欢迎下载! C语言编译工具app内容 简 ...

  3. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

  4. stm单片机c语言编译,单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  5. keil c语言编译运行,Keil的c语言编译器

    我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论. (1)全局变量:如果程序中定义了全局变量,而且初始值不是0.此时,在程序调到main()函数执行前,除了要进 ...

  6. c语言编译机器码,[转载]单片机C语言到机器码的全过程

    我们平时做单片机编程,最常使用的是C语言和汇编语言两种,但是最终下载到单片机内部的,却是HEX文件里的二进制机器代码,很多同学不懂这个过程是如何转换的. 我们的程序开发环境,比如KEIL和伟福等等,都 ...

  7. c语言编译中scanf命令,C语言scanf的用法

    scanf()是C语言中的一个输入函数.与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include .(在有一些实现中,printf函数与scanf函数 ...

  8. c语言编译预处理指令大全,C语言预处理指令

    「今天是学习C语言第 32 天」 当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch # 预处理 C语言源程序先经过预处理器进行预处理,之后经过编译器编译成二进制可执 ...

  9. c语言编译时字符黑色,C语言黑与白问题

    问题描述 有A.B.C.D.E这5个人,每个人额头上都帖了一张黑或白的纸.5人对坐,每 个人都可以看到其他人额头上纸的颜色.5人相互观察后: A说:"我看见有3人额头上贴的是白纸,1人额头上 ...

  10. c语言编译星座测试,用c语言编写程序,判断输入的日期(月,日)属于哪个星座?...

    匿名用户 1级 2010-04-29 回答 c语言的输出输入是格式化的,printf表示输出,在屏幕上打印出来:scanf表示读入,即把你在屏幕上如果打10,按回车,10就存储到month那个变量里面 ...

最新文章

  1. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效
  2. Office 365 成微软 AI 落地载体, 53 项 AI 功能你用过多少?
  3. Markdown中常用的转义字符
  4. 国内用户ios android比例,国内iOS、Android系统的设备总量已达到了2亿
  5. SpringBoot热部署加持
  6. 浏览器根对象document之字符串属性
  7. 利用爬虫获取网上医院药品价格信息 (下)
  8. vijos 1464 积木游戏 DP
  9. thinkphp5.0架构总览
  10. cmd 日志刷新卡屏
  11. 安卓Android资源链接失败,Android资源链接失败
  12. 修改JSONArray里所有key的值
  13. Python学习之路9☞面向对象的程序设计
  14. 【转】Java 杂谈(三)
  15. php 获取ipad,利用PHP判断iPhone、iPad、Android、PC设备
  16. 计算机黑屏或死机怎么办,激光打标机电脑黑屏或死机时怎么办?
  17. ArcGIS基本使用介绍
  18. 三维扫描+逆向建模+3D打印复刻工艺品
  19. 对路径“C:\inetpub\wwwroot\Test\Temper\”的访问被拒绝 【已解决】
  20. TF/06_Neural_Networks/01_Introduction02gate03activate fuctions

热门文章

  1. C#程序设计之windows应用程序设计基础
  2. taro开发微信小程序禁止下拉刷新(ios下拉出现空白问题)
  3. iOS App内测分发的步骤解析
  4. 中科院基于gpt的学术优化网站搭建教程
  5. Linux系统编程第六节——进程的替换(execl、exelp、execle、execv、execvp、execve)
  6. 前端开发之从零开始的uniapp(1):创建uni-app项目
  7. 0-1背包问题和背包问题
  8. WEB、WEB标准、W3C的理解
  9. AWS ELB技术要点
  10. 项目十大管理之成本管理