1.rand

c++中生成随机数最简单的方式就是rand函数。而且rand函数位于stdlib.h头文件中,不需要额外的再引入。

int   rand(void) __swift_unavailable("Use arc4random instead.");

从rand的函数签名不难看出其返回的是一个int类型。

#include<iostream>
#include<ctime>
using namespace std;void run1() {for(int i=0; i<3; i++) {std::cout<<"rand() is: "<<rand()<<std::endl;}std::cout<<"RAND_MAX is: "<<RAND_MAX<<std::endl;
}

run1方法的输出为

rand() is: 16807
rand() is: 282475249
rand() is: 1622650073
RAND_MAX is: 2147483647

2.srand

rand函数生成的是伪随机数。伪随机数的意思是,不管运行多少次,每次运行的结果都是一致的。为了解决伪随机数的问题,可以采用srand函数。

srand的函数签名为

void  srand(unsigned) __swift_unavailable("Use arc4random instead.");

可见要想使用srand,需要传入一个unsigned类型,一般就可以使用time方法。

void run2() {srand((unsigned)time(NULL));for(int i=0; i<3; i++) {std::cout<<"srand() is: "<<rand()<<std::endl;}
}

上述输出为

srand() is: 1462514084
srand() is: 376386226
srand() is: 1583959967

3.生成一定区间的整数

上面的分析我们看出rand函数返回的是int整数,如果我们想要返回一定范围内的整数,该怎么办?
c++中没有直接相关的内置函数,不过我们可以通过简单的方式就可以满足上面的要求。

3.1 生成[a,b)左开右闭区间整数

可以直接套用公式rand()%(a-b) + a
上面的公式也很好理解,rand()%(a-b)的范围是[0, b-a),则[0, b-a) + a的范围就是[a, b)

// 生成[0, 2)区间整数,也就生成0或者1
void run3() {srand((unsigned)time(NULL));int count0 = 0, count1 = 0;for(int i=0; i<10000; i++) {int num = (rand() % (2 - 0)) + 0;if (num == 0) count0++;else if (num == 1) count1++;}cout<<"count0 is: "<<count0<<endl;cout<<"count1 is: "<<count1<<endl;
}

代码运行结果为

count0 is: 4996
count1 is: 5004

3.2 生成(a,b]左闭右开区间整数

公式为rand()%(a-b) + a +1

void run4() {srand((unsigned)time(NULL));int count1 = 0, count2 = 0;for(int i=0; i<10000; i++) {int num = (rand() % (2-0)) + 0 + 1;if (num == 1) count1++;else if (num == 2) count2++;}cout<<"count1 is: "<<count1<<endl;cout<<"count2 is: "<<count2<<endl;
}

3.3 生成[a,b]闭区间

公式为rand() % (b-a+1) + a

void run5() {srand((unsigned)time(NULL));int count0 = 0, count1 = 0, count2 = 0;for(int i=0; i<10000; i++) {int num = (rand() % (2-0+1)) + 0;if (num == 0) count0++;else if (num == 1) count1++;else if (num == 2) count2++;}cout<<"count0 is: "<<count0<<endl;cout<<"count1 is: "<<count1<<endl;cout<<"count2 is: "<<count2<<endl;
}

4.生成浮点数

平时还经常需要生成0-1之间的浮点数表示概率,可以直接使用公式
rand() / RAND_MAX
注意的是c++整数除法为取整,所以需要将其转成double类型。

void run6() {srand((unsigned)time(NULL));for(int i=0; i<10; i++) {cout<<(double)rand()/RAND_MAX<<endl;}
}
0.68945
0.578391
0.0133102
0.704486
0.291283
0.590195
0.398975
0.569631
0.794225
0.54148

c++生成随机数详解(包含可执行代码)相关推荐

  1. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  2. Random()类生成随机数详解

    Random类介绍 生成随机数的两种方法 是用Math类里的Random方法生成0到1内的随机数,返回是double 是用Random类方法生成随机数 Random()函数生成随机数介绍 在Java的 ...

  3. python中产生随机数模块_Python中random模块生成随机数详解

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  4. python中sn的意思_Python中random模块生成随机数详解

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  5. Random类生成随机数详解

    先看看Random的构造方法 public Random() {this(seedUniquifier() ^ System.nanoTime());}public Random(long seed) ...

  6. python中random模块中包含了随机数相关的功能函数_Python中random模块生成随机数详解...

    print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #pr ...

  7. Oracle代码块详解,Oracle可执行代码块

    declare --声明变量 v_menu_name varchar(50):='aaa管理'; --声明字符串变量必须带上长度 v_menu_url varchar(100):='/aaa.html ...

  8. maven 与intellij IDEA 下maven 为groovy 项目生成jar 详解

    2019独角兽企业重金招聘Python工程师标准>>> W7下安装 maven与intellij IDEA 下maven为groovy项目生成jar详解(适合新手) 第一步:下载ma ...

  9. C语言rand()函数产生随机数详解

    C语言rand函数产生随机数详解 1.rand函数的原型,功能和界限 2.用rand函数获取随机数 3.随机数生成原理 1.rand函数的原型,功能和界限 rand函数的原型: #include &l ...

最新文章

  1. Linux 服务器日志文件查找技巧精粹
  2. 推荐一个牛逼的 GitHub 项目+支付宝、微信支付项目实战!快来获取!
  3. C语言学习之试编程从键盘输入2*3的二维数组,将该数组行列交换输出。
  4. mysql基本架构_MySQL的基本架构
  5. 一段简单的代码告诉你什么叫内存溢出
  6. 如何设置的单位为m_如何将视频设置为网页背景
  7. jQuery/javascript实现全选全不选
  8. SQL语言的3种分类
  9. W25Q64内部结构
  10. (一)基于用户的协同过滤推荐算法原理和实现
  11. 955 互联网公司白名单来了!这些公司月薪20k,没有996!福利榜国内大厂只有这家!...
  12. Spark数据分析之第5课
  13. cool edit工具介绍及使用
  14. android 游戏降低画质6,怎么改善安卓游戏画面?
  15. 图形验证码-图片无法加载
  16. 商业银行金融IC卡国密改造安全建设方案
  17. 滴滴程序员被亲戚鄙视:年薪八十万还不如二本教书的...
  18. idea调整代码标签编辑器标签editor tabs的横排和竖排
  19. jQuery+Bootstrap美化弹出框
  20. 如何快速配置OA、CRM、ERP等管理软件

热门文章

  1. 2021年度深圳市企业技术中心认定条件申请指南
  2. c语言 m文件是什么,M文件扩展名 - 什么是.m以及如何打开? - ReviverSoft
  3. iOS开发 图片选择器、图片多选功能的实现
  4. rust哪个护甲高_《废土2》全部武器护甲资料及代码
  5. 示波器如何设置XY模式
  6. 高价NFT不利于流动性
  7. 实验4 用JavaBean实现简单计算器
  8. 玩玩群辉NAS-常用命令行
  9. 【嵌入式模块】常用扩展芯片及数据手册总结
  10. linux 中的rime 输入法 自定义 新世纪五笔输入法