1.随机数的本质

实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布,如下图所示:

种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。

2.产生随机数的实例

在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:

int rand (void);

C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。

下面是一个随机数生成的实例:

#include <stdio.h>
#include <stdlib.h>
int main(){int a = rand();printf("%d\n",a);return 0;
}

3. 利用时间戳生成随机数

我们可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。srand() 的用法为:

 void srand (unsigned int seed);

它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。

使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

srand((unsigned)time(NULL));

对上面的代码进行修改,生成随机数之前先进行播种:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {int a;srand((unsigned)time(NULL));a = rand();printf("%d\n", a);return 0;
}

4. 生成一定范围内的随机数

在实际开发中,我们往往需要一定范围内的随机数,过大或者过小都不符合要求,那么,如何产生一定范围的随机数呢?我们可以利用取模的方法:

int a = rand() % 10;    //产生0~9的随机数,注意10会被整除

如果要规定上下限:

int a = rand() % 51 + 13;    //产生13~63的随机数

分析:取模即取余,rand()%51+13我们可以看成两部分:rand()%51是产生 0~50 的随机数,后面+13保证 a 最小只能是 13,最大就是 50+13=63。

例子:

产生 13~63 范围内随机数的完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){int a;srand((unsigned)time(NULL));a = rand() % 51 + 13;printf("%d\n",a);return 0;
}

【C语言】随机数rand()详解相关推荐

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

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

  2. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  3. C语言贪吃蛇详解4,c语言贪吃蛇详解4.食物的投放与蛇的变长

    c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...

  4. C语言处理贪吃蛇游戏蛇的长度,c语言贪吃蛇详解4.食物的投放与蛇的变长

    c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...

  5. mysql newid函数_sql随机函数newID()和RAND()详解

    sql 随机函数newid()和rand()详解 * from northwind..orders order by newid() 下者效率要高些 select top 10 *,newid() a ...

  6. c语言贪吃蛇详解5.GameOver功能与显示成绩

    c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...

  7. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  8. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  9. c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf

    c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...

最新文章

  1. R语言基于模拟退火(Simulated Annealing)进行特征筛选(feature selection)
  2. 公司内部 action调用持久层规范
  3. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  4. vue就地复用不是更快吗_Vue.js从零开始——组件(1)
  5. 如何选择漏电保护器规格型号_三相四线漏电保护器型号要如何选
  6. pycharm远程开发
  7. [Linux] PHP程序员玩转Linux系列-Nginx中的HTTPS
  8. Java后端开发框架
  9. SQLserver常用创建表 添加字段sql
  10. STM32--DSP库使用(1)
  11. 《莎士比亚》文本生成
  12. HHDBCS便捷功能简介
  13. 哲理故事300篇(上)
  14. MySQL数据库综合练习一
  15. c++/c 大整数乘法的分治与递归实现(string存储)
  16. 学习Java的第十周
  17. ORB-SLAM2的安装及试运行
  18. html5手机点餐,基于HTML5技术的手机点餐系统设计与开发
  19. word文档参考文献如何自动编号
  20. 狂神说JavaWeb笔记(超级详细)

热门文章

  1. 8.5 暑假集训——线段树篇
  2. OneNET云平台设备数据管理工具
  3. ES修改文档的字段数据类型
  4. sap 假脱机请求_SAP打印机配置 - 萧静默的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 物联网相关连接总结 - 摄像头、传感器
  6. css div下第一个span,CSS入门教程——div和span
  7. Tab组件【cube-ui】
  8. EasyExcel 官网观看建议
  9. 最受欢迎的Java第三方库
  10. python爬取豆瓣TOP250生成Excel表格例子最新