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

#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. nginx 获取header 请求参数_Nginx设置Header头信息
  2. 小程序 text decode 真机无效_【移动端测试】APP自动化测试案例2:微信小程序自动化测试...
  3. [Error]SyntaxError: unindent does not match any outer indentation level
  4. 明源云:与阿里云生态共同成长
  5. 加密机工作原理_端子机压力检测装置工作原理
  6. 以下模块打印出超级块中某些字段的内容
  7. java 反射 动态_java实现反射,动态配置
  8. C/C++中的位运算
  9. golang web接口压力测试,性能测试(1)
  10. VBA—Doevents说明
  11. http://blog.csdn.net/myy629464/article/list/1
  12. Python_oldboy_自动化运维之路_面向对象2(十)
  13. 解决tensorboard无法访问此网站
  14. 怎么把视频制作成GIF动态图?这几种制作方法很简单
  15. Python从入门到精通 | Python作用与定义 | 三种注释的语法(三)
  16. 客户端timewait
  17. Leetcode 130. 被围绕的区域
  18. 新手使用APICloud可视化开发搭建商城主页
  19. ICON艾肯VST声卡驱动官方原版新款ProDriver-4.0.1全系列下载安装教程
  20. spacewar无法连接至远程计算机,Start-DscConfiguration无法连接服务器计算机

热门文章

  1. 1388. 3n 块披萨
  2. 实现运动目标检测(opencv3)(一)
  3. 动态规划 01背包问题
  4. 基于MATLAB的变长信源编码算法的性能比较
  5. 如何修复Android手机上无响应的触摸屏
  6. Unity程序框架总结归置系列(2)——对象池
  7. java byte 图片_Java将byte[]转图片存储到本地的案例
  8. JAVA架构之路(设计模式之观察者模式)
  9. 应用matplotlib的imshow函数显示彩色图像(RGB data)报错的解决方法
  10. MySql 全文检索