首先来看如何获取代码:

#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 语言随机数获取相关推荐

  1. c语言学习进阶-C语言程序产生正态分布随机数

    C语言程序产生正态分布随机数 目录 C语言程序产生正态分布随机数 **中心极限定理(大数定理)** **Hasiting有理逼近法:** **反函数产生给定分布的随机数法:** **Box-Mulle ...

  2. c语言产生50以内随机数,C语言产生随机数

    C语言/C++产生随机数:要用到的函数是rand(), srand()和time() 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time( ...

  3. 生成随机数c 语言,C 语言随机数生成器的实现分析

    (点击上方公众号,可快速关注) 如需转载,发送「转载」二字查看说明 本文是为了记录和澄清一个由来已久的关于C语言随机数生成器的误解. 目前所看到的所有公开的关于C随机数生成器的中文资料,都提到经典的线 ...

  4. c语言连续生成不同随机数_C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为: int ran ...

  5. R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串

    R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项).randomSequence函数创建不含重复项的随机序列数据集.创建随机字符串 ...

  6. R语言head函数和tail函数获取dataframe、列表list、向量vector的头部和尾部数据:tail提取数据对象的尾部数据、head提取数据对象的头部数据、默认6条数据、自定义设置返回条数

    R语言head函数和tail函数获取dataframe.列表list.向量vector的头部和尾部数据:tail提取数据对象的尾部数据.head提取数据对象的头部数据.默认6条数据.自定义设置返回条数 ...

  7. 黯然微信小程序杂记(一):从服务器获取数据 后端语言php

    黯然学编程 之 微信小程序杂记(一):从服务器获取数据 后端语言php 一.功能描述 二.服务器.数据库与微信小程序逻辑的关系 服务器 数据库 与微信小程序逻辑关系 三.请求数据的代码(可当做模板用) ...

  8. c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化

    原文链接 随机数.随机数种子 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有 ...

  9. Swift3.0语言教程使用Unicode范式标准化获取字符串

    Swift3.0语言教程使用Unicode范式标准化获取字符串 Swift3.0语言教程使用Unicode范式标准化获取字符串,在NSString中可以使用4个属性去使用Unicode范式标准化获取字 ...

  10. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

最新文章

  1. linux磁盘满时,如何定位并删除文件
  2. 怎么修改windows控制台编码?(不改了)
  3. 统计各个函数的耗时_Prometheus 常用函数 histogram_quantile 的若干“反直觉”问题...
  4. 如何在Angular单元测试里,对class protected方法进行测试
  5. 常熟理工学院计算机考研,2018江苏专转本考生必看-常熟理工学院介绍
  6. springMvc(实现HandlerMethodArgumentResolver)自定义参数解析器
  7. c语言while的读音,C语言的32个关键字(读音、用法、注释)转来的,给刚接触C的...
  8. BZOJ 4443: [Scoi2015]小凸玩矩阵
  9. 面向数据科学的概率论 一、基础
  10. DXperience 6.3.9 for Visual Studio 2002, 2003
  11. python比较两个文件内容是否一样_python判断两个json文件是否相等
  12. 基于React和Html5的宠物领养平台网站设计与实现
  13. 单龙芯3A3000-7A1000PMON研究学习-(2)搭建交叉编译环境
  14. 【QT】找茬外挂制作
  15. 《模拟电子技术基础》课程笔记(九)——互补对称式功率放大电路
  16. 学数据结构 是不是一定要先学离散数学
  17. 2016 Unicode Conference拾遗(一)
  18. 【CodeForces 1255D --- Feeding Chicken】
  19. Minecraft 1.12.2 生化8 模组1.5版本 存档Bug修复+海森伯格钢铁巨兽
  20. JAVA自己面试遇到的问题

热门文章

  1. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
  2. 牛客 华为机试(我的代码记录)
  3. 使用websockets,后台实时发数据,前台实时接受数据,并集成到Django
  4. mybatis中getMapper是怎么通过动态代理得到dao接口的实现类并执行mapper文件sql语句的
  5. mysql稠化报表_使用Partitioned Outer Join实现稠化报表
  6. ua获取手机型号_无牌山寨手机的数据提取解决方案
  7. linux安装mysql8.0_Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
  8. Java读写文件的几种方式
  9. 怎么通俗的理解Netty呢?
  10. 面试python开发_python开发面试问题