一、 C++ 中不能使用 random() 函数 , random 函数不是 ANSI C 标准,不能在 gcc,vc 等编译器下编译通过。可改用 C++ 下的 rand 函数来实现。

1 、 C++ 标准函数库提供一随机数生成器 rand ,返回 0 - RAND_MAX 之间均匀分布的伪随机整数。 RAND_MAX 必须至少为 32767 。 rand() 函数不接受参数,默认 seed 为 1 ,程序调用一次后将改变。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)

2 、 C++ 中另一函数 srand (),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。

3 、 比较理想的是用变化的数,比如时间来作为随机数生成器的种子。 time 的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

// C++ 随机函数( VC program )

#include <stdio.h>

#include <iostream>

#include <time.h>

using namespace std;

#define MAX 100

int main(int argc, char* argv[])

{         srand( (unsigned)time( NULL ) );//srand() 函数产生一个以当前时间开始的随机种子 . 应该放在 for 等循环语句前面 不然要很长时间等待

   for (int i=0;i<10;i++)

   cout<<rand()%MAX<<endl;//MAX 为最大值,其随机域为 0~MAX-1

   return 0;

}

二、 rand() 的用法

rand() 不需要参数,它会返回一个从 0 到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生 0~10 的 10 个整数,可以表达为:

   int N = rand() % 11;

这样, N 的值就是一个 0~10 的随机数,如果要产生 1~10 ,则是这样:

   int N = 1 + rand() % 11;

  总结来说,可以表示为:

   a + rand() % n

其中的 a 是起始值, n 是整数的范围。 a + rand() % (b-a+1) 就表示a~b之间的一个随机数。

  若要 0~1 的小数,则可以先取得 0~10 的整数,然后均除以 10 即可得到随机到十分位的 10 个随机小数,若要得到随机到百分位的随机小数,则需要先得到 0~100 的 10 个整数,然后均除以 100 ,其它情况依此类推。

另一种小数的产生方法。    用 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<<ran_numf<<" ";
}
运行结果为: 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 的情况,如此类推。

通常 rand() 产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用 srand( seed ) 函数进行随机化,随着 seed 的不同,就能够产生不同的随机数。

如大家所说,还可以包含 time.h 头文件,然后使用 srand(time(0)) 来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列 ( 只要两次运行的间隔超过 1 秒 ) 。

参考资料:

《伪随机数 _ 百度百科》 http://baike.baidu.com/view/1127.htm

C++中如何产生随机数 http://hi.baidu.com/skywind_21flying/blog/item/fd2cef62b3e68adce6113aa7.html

C++ 中用 rand() 和 srand() 产生为随机数方法 http://hi.baidu.com/sdood/blog/item/4737297f573c8d0a28388a9c.html

伪随机数产生原理及用法相关推荐

  1. mysql 实时聚合分析,mysql累积聚合原理与用法实例分析

    本文实例讲述了mysql累积聚合原理与用法.分享给大家供大家参考,具体如下: 累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两 ...

  2. python装饰器原理-Python装饰器原理与用法分析

    这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念.原理.使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法.分享给大 ...

  3. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  4. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  5. python装饰器原理-python装饰器原理与用法深入详解

    本文实例讲述了python装饰器原理与用法.分享给大家供大家参考,具体如下: 你会Python嘛? 我会! 那你给我讲下Python装饰器吧! Python装饰器啊?我没用过哎 以上是我一个哥们面试时 ...

  6. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

  7. mysql 实时聚合分析_mysql滑动聚合/年初至今聚合原理与用法实例分析

    本文实例讲述了mysql滑动聚合/年初至今聚合原理与用法.分享给大家供大家参考,具体如下: 滑动聚合是按顺序对滑动窗口范围内的数据进行聚合的操作.下累积聚合不同,滑动聚合并不是统计开始计算的位置到当前 ...

  8. java 字节缓冲_Java字节缓冲流原理与用法详解

    本文实例讲述了Java字节缓冲流原理与用法.分享给大家供大家参考,具体如下: 一 介绍 BufferInputStresm和BufferOutputStream 这两个流类为IO提供了带缓冲区的操作, ...

  9. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  10. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析

    本文实例讲述了python异常处理.自定义异常.断言原理与用法.分享给大家供大家参考,具体如下: 什么是异常: 当程序遭遇某些非正常问题的时候就会抛出异常:比如int()只能处理能转化成int的对象, ...

最新文章

  1. 51nod 1090 1267 【二分简单题】
  2. 文件系统磁盘管理(七)--RAID
  3. stm32 GPIO模式
  4. SpringBoot笔记:SpringBoot2.3集成Kafka组件配置
  5. 堆排序算法c语言筛选法,【排序】排序算法之选择排序
  6. git小乌龟一次性设置密码
  7. 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗
  8. 苹果CMS萝卜二开修复渐变绿影视原生App源码-投屏试看可用
  9. FTP 1 协议分析
  10. java基础Runtime类的使用
  11. 修改linux服务器时间
  12. 大涨50%之后 瑞幸咖啡美股盘前再涨逾30%
  13. 1225 八数码难题
  14. AR+AI的这些落地应用 你居然不知道?
  15. PEP 635 – Structural Pattern Matching: Motivation and Rationale
  16. 如果将编程语言变成女孩子,你更“喜欢”哪些呢?
  17. 2021-1-30最短路入门
  18. 声音频率和乐器知识记录
  19. bt面板从7.1升级到7.5.2之后网络挂了
  20. java数据类型_Java数据类型

热门文章

  1. w ndows7光盘安装,想装啥版装啥版:Windows7安装光盘版本转换软件
  2. 小勇机器人如何绑定_‎App Store 上的“小勇机器人”
  3. 7-1 循环-Fibonacci数列的运算 (50 分)
  4. 插入目录后 正文页码重新怎么从1开始
  5. Anaconda多环境python管理(创建、删除、复制环境)
  6. 穿山甲android对接错误码40029,头条 穿山甲广告 错误码列表
  7. apple music导入本地歌曲及歌词
  8. 【Python 邮件合并 pandas mailmerge】
  9. 手机聊天页面 html5,HTML5仿手机微信聊天界面
  10. 电驴无法增加服务器怎么办,电驴连接不上服务器怎么办?