c.语言 获取随机数,C 语言随机数获取
首先来看如何获取代码:
#include
#include
#include
int main(void)
{
int i;
srand((unsigned)time(0));
for(i=0;i<100;i++)
{
printf("%5d",rand()%100);
if(!((i+1)%10))
printf("\n");
}
}
标准库(被包含于中)提供两个帮助生成伪随机数的函数:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
举几个例子,假设我们要取得0~6之间的随机整数(不含6本身):
例一,不指定seed:
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2
例二,指定seed为定值1:
srand(1);
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2
跟例子一的结果完全一样。
例三,指定seed为定值6:
srand(6);
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<
}
每次运行都将输出:4 1 5 1 4 3 4 4 2 2
随机值也是在[0,6)之间,随得的值跟srand(1)不同,但是每次运行的结果都相同。
例四,指定seed为当前系统流逝了的时间(单位为秒):time_t time(0):
#include
//…
srand((unsigned)time(0));
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<
}
第一次运行时输出:0 1 5 4 5 0 2 3 4 2
第二次:3 2 3 0 3 5 5 2 2 3
总之,每次运行结果将不一样,因为每次启动程序的时刻都不同(间隔须大于1秒?见下)。
关于time_t time(0):
time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。比如假设输出:
cout<
值约为1169174701,约等于37(年)乘365(天)乘24(小时)乘3600(秒)(月日没算)。
另外,关于ran_num = rand() % 6,
将rand()的返回值与6求模是必须的,这样才能确保目的随机数落在[0,6)之间,否则rand()的返回值本身可能是很巨大的。
一个通用的公式是:
要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b)。
在a为0的情况下,简写为rand() % b。
最后,关于伪随机浮点数:
用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:
double ran_numf=0.0;
srand((unsigned)time(0));
for(int i=0;i<10;i++){
ran_numf = rand() / (double)(RAND_MAX);
cout<
}
运行结果为:0.716636,0.457725,…等10个0~1之间的浮点数,每次结果都不同。
如果想取更大范围的随机浮点数,比如1~10,可以将
rand() /(double)(RAND_MAX) 改为 rand() /(double)(RAND_MAX/10)
运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。
至于100,1000的情况,如此类推。
以上不是伪随机浮点数最好的实现方法,不过可以将就着用用…
0111 0101
0001 1000 +
---------------
1000 1101
这种情况就是溢出了,
八位有符号最大是0111 1111
只要加1就已经溢出.你在第5位加1,当然仍是溢出
-97-88=-185
这个同样是溢出,
八位有符号数最小是1000 0000 ,十进制是-128
注意你的结果已是-185了,当然又溢出了 转载至
http://zhidao.baidu.com/question/204869547.html
c.语言 获取随机数,C 语言随机数获取相关推荐
- c语言学习进阶-C语言程序产生正态分布随机数
C语言程序产生正态分布随机数 目录 C语言程序产生正态分布随机数 **中心极限定理(大数定理)** **Hasiting有理逼近法:** **反函数产生给定分布的随机数法:** **Box-Mulle ...
- c语言产生50以内随机数,C语言产生随机数
C语言/C++产生随机数:要用到的函数是rand(), srand()和time() 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time( ...
- 生成随机数c 语言,C 语言随机数生成器的实现分析
(点击上方公众号,可快速关注) 如需转载,发送「转载」二字查看说明 本文是为了记录和澄清一个由来已久的关于C语言随机数生成器的误解. 目前所看到的所有公开的关于C随机数生成器的中文资料,都提到经典的线 ...
- c语言连续生成不同随机数_C语言随机数生成教程,C语言rand和srand用法详解
在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为: int ran ...
- R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串
R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项).randomSequence函数创建不含重复项的随机序列数据集.创建随机字符串 ...
- R语言head函数和tail函数获取dataframe、列表list、向量vector的头部和尾部数据:tail提取数据对象的尾部数据、head提取数据对象的头部数据、默认6条数据、自定义设置返回条数
R语言head函数和tail函数获取dataframe.列表list.向量vector的头部和尾部数据:tail提取数据对象的尾部数据.head提取数据对象的头部数据.默认6条数据.自定义设置返回条数 ...
- 黯然微信小程序杂记(一):从服务器获取数据 后端语言php
黯然学编程 之 微信小程序杂记(一):从服务器获取数据 后端语言php 一.功能描述 二.服务器.数据库与微信小程序逻辑的关系 服务器 数据库 与微信小程序逻辑关系 三.请求数据的代码(可当做模板用) ...
- c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化
原文链接 随机数.随机数种子 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有 ...
- Swift3.0语言教程使用Unicode范式标准化获取字符串
Swift3.0语言教程使用Unicode范式标准化获取字符串 Swift3.0语言教程使用Unicode范式标准化获取字符串,在NSString中可以使用4个属性去使用Unicode范式标准化获取字 ...
- 在C语言中以编程的方式获取函数名
在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...
最新文章
- linux磁盘满时,如何定位并删除文件
- 怎么修改windows控制台编码?(不改了)
- 统计各个函数的耗时_Prometheus 常用函数 histogram_quantile 的若干“反直觉”问题...
- 如何在Angular单元测试里,对class protected方法进行测试
- 常熟理工学院计算机考研,2018江苏专转本考生必看-常熟理工学院介绍
- springMvc(实现HandlerMethodArgumentResolver)自定义参数解析器
- c语言while的读音,C语言的32个关键字(读音、用法、注释)转来的,给刚接触C的...
- BZOJ 4443: [Scoi2015]小凸玩矩阵
- 面向数据科学的概率论 一、基础
- DXperience 6.3.9 for Visual Studio 2002, 2003
- python比较两个文件内容是否一样_python判断两个json文件是否相等
- 基于React和Html5的宠物领养平台网站设计与实现
- 单龙芯3A3000-7A1000PMON研究学习-(2)搭建交叉编译环境
- 【QT】找茬外挂制作
- 《模拟电子技术基础》课程笔记(九)——互补对称式功率放大电路
- 学数据结构 是不是一定要先学离散数学
- 2016 Unicode Conference拾遗(一)
- 【CodeForces 1255D --- Feeding Chicken】
- Minecraft 1.12.2 生化8 模组1.5版本 存档Bug修复+海森伯格钢铁巨兽
- JAVA自己面试遇到的问题
热门文章
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
- 牛客 华为机试(我的代码记录)
- 使用websockets,后台实时发数据,前台实时接受数据,并集成到Django
- mybatis中getMapper是怎么通过动态代理得到dao接口的实现类并执行mapper文件sql语句的
- mysql稠化报表_使用Partitioned Outer Join实现稠化报表
- ua获取手机型号_无牌山寨手机的数据提取解决方案
- linux安装mysql8.0_Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
- Java读写文件的几种方式
- 怎么通俗的理解Netty呢?
- 面试python开发_python开发面试问题