c++<cstdlib>文件中的函数产生随机数
C++中没有自带的random函数,要生成随机数就需要用c文件"stdlib.h"里的函数rand()和srand(),不过,由于rand()的内部实现是用线性同余法做的,
所以生成的并不是真正的随机数,而是在一定范围内可看为随机的伪随机数,下面分别介绍一下各自的用法
1. int rand(void);它是无参函数,返回int型数据,并且返回值范围是 0~RAND_MAX(32767),RAND_MAX定义在头文件 <cstdlib>中,是一个8位数;
rand()的作用是用来产生随机数序列的,它产生的随机数是根据种子生成的,不同的种子产生的随机序列也是不同的;而系统默认的种子是1,如果
你没有设置种子的话,那每次使用rand()产生的随机序列都是固定的,它会产生相同的随机序列,所以这不是真正的随机,而是伪随机数,要做到真正
的随机,就要使种子随机。下面先说一下rand()的用法,后面再说怎么设置随机种子,上代码
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
cout<<"第一次产生的随机序列:";
for(int i=;i<=;i++)
cout<<rand()<<" ";
cout<<"\n";
return ;
}
我运行了两次程序,分别产生了两个随机序列,如图


你会发现两次所生成的随机序列是相同的,这是为啥 ?上面说过系统默认的种子是1,而你又没有设置随机种子,所以每次产生的随机序列都是一样的,是伪随机。
如何解决这个伪随机的问题呢,这就引出了srand()。
2. void srand(unsigned int seed);srand()就是用来设置rand()函数的种子的,若srand()每次设置的种子不同,那么rand()就会产生不同的随机序列。一般用时间来
做种子,因为时间一直在变,这样种子就会不同,从而可以产生真正的随机数。方法为将函数time(0)作为srand()的参数(因为time会有返回值,实际上是让这个返回值做参数),
另外srand(time(0))只需要执行一次就行了。具体操作还是看代码吧
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
srand((int)time()); //用时间做种子
cout<<"第2次产生的随机序列:";
for(int i=;i<=;i++)
cout<<rand()<<" ";
cout<<"\n";
return ;
}
还是运行了两次程序,分别产生了两个随机序列,结果如下图

那你会发现这两次产生的两个随机序列是不一样的,因为用了时间做种子。下面还有一个小问题,就是如果要产生某个范围内的随机数要怎么实现呢,比如
要产生[0,100)这个范围内的随机数,或者[0,10000)这个范围内的随机数,就要用rand()%n来产生[0,n)这个范围内的随机数了。用rand()%(b-a)+a 来产生[a,b)
这一范围内的随机数,下面用程序分别模拟一下这三种情况:
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
srand((int)time()); //用时间做种子
cout<<"产生[0,100)内的随机数:";
for(int i=;i<=;i++)
cout<<rand()%<<" ";
cout<<"\n";
cout<<"产生[0,10000)内的随机数:";
for(int i=;i<=;i++)
cout<<rand()%<<" ";
cout<<"\n";
cout<<"产生[100000,1000000)内的随机数:";
for(int i=;i<=;i++)
cout<<rand()%(-)+<<" ";
return ;
}
结果如下图:

通过上面的操作就可以产生指定范围内的随机数了。
产生一定范围内的随机数的公式是:
要产生 [0,n) 内的随机数,用 rand()%n
要产生 [a,b) 内的随机数,用 rand()%(b-a)+a
要产生 [a,b] 内的随机数,用 rand()%(b-a+1)+a
要产生 (a,b] 内的随机数,用 rand()%(b-a)+a+1
通用公式为:a + rand() % n;其中的a是起始值,n是整数的范围,就是a~n之间的随机数。
参考:https://www.cnblogs.com/VVingerfly/p/5990714.html
https://www.cnblogs.com/xiaokang01/p/9786751.html#_label0_2
c++<cstdlib>文件中的函数产生随机数的更多相关文章
- 在.bashrc文件中定义函数
在命令行上直接定义shell函数的明显缺点是当退出shell时,函数就消失了,对于复杂的函数来说,这可能会是个问题. 一个简单的方法就是每次启动新shell的时候都会自动加载所需要的函数. 最好的办法 ...
- VS2013 VC++的.cpp文件调用CUDA的.cu文件中的函数
CUDA 8.0在函数的调用中方便的让人感动.以下是从网上学到的VC++的.cpp文件调用CUDA的.cu文件中的函数方法,和一般的VC++函数调用的方法基本没差别. 使用的CUDA版本为CUDA 8 ...
- Python 调用JS文件中的函数
Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...
- shell 从函数文件中调用函数的方法
你可以把所有的函数存储在一个函数文件中 你可以把所有的文件函数加载到当前脚本或命令行 加载函数文件中所有函数的方法: source xxx.sh
- nm 命令能够显示目标文件中重载函数的名字改变(C++)
#include <stdio.h> #include <iostream> using std::cout; using std::endl; //这里的两个不同的add函数 ...
- C++学习——在C文件中调用C++文件中的函数
1.CPP文件中的内容 #include "mytest.h" #include <iostream> using namespace std; int add(con ...
- [C 语言基础] 如何调用不同文件中的函数
很多时候需要将实现不同功能的函数或者与某个模块有关的函数写在一个文件里.这样有两个好处: 1. 方便以后调用:以后需要用到这个模块,或者这类函数,直接将相关文件复制过去,再稍微修改一下就能应用于不同场 ...
- Pycharm:如果想验证一个文件中的函数
在该文件的函数后写上两句 def test(): pass if __name__='__main__': test() 这样就可以执行该函数 如果只是在其他文件中导入了该函数,则不会执行最后两段话, ...
- nodejs中引用其他js文件中的函数
基本语句 require('js文件路径'); 使用方法 举个例子,在同一个目录下,有app.fun1.fun2三个js文件. 1. app.js var fun1 = require('./fun1 ...
随机推荐
- Jmeter 注册用户获取登录token值
1. 打开jemeter,新建一个测试计划,>线程组 >新建一个 登录的 Http 请求. 2.填上相应的值 3.新建一个消息头管理器> content-Type applicat ...
- PyCharm3.0 快捷键
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完 ...
- Functor、Applicative 和 Monad
Functor.Applicative 和 Monad 是函数式编程语言中三个非常重要的概念,尤其是 Monad. 说明:本文中的主要代码为 Haskell 语言,它是一门纯函数式的编程语言. 一.结 ...
- sql 数据库操作语句 不带select
MySQL数据操作语句 1.总纲 DDL -数据定义语句** create/drop/alter ** create: 创建 drop:删除 alter:修改 DML -数据操作语句 ** inser ...
- 图解JVM类加载机制和双亲委派模型
我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件.JVM 通过类加载器来加载字节码文件,然后再执行程序. 什么时候加载一个类 那么,什么时候类加载 ...
- Android 数据库框架 DBFlow 的使用
原文首发于微信公众号:jzman-blog,欢迎关注交流! DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处 ...
- HTML特殊转义字符——特殊符号
干货,见下图: 后期我会陆续更一些JavaScript的文章,大家可以一起学习交流.
- A 拜访奶牛
时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms 问题描述 经过了几周的辛苦工作,贝茜终于迎来了一个假期.作为奶牛群中最会社交的牛,她希望去拜访N(1< ...
- 跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现
提到MySQL的事务,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关. 而事务的ACID(即原子性Atomicity.一致性Consiste ...
- js中相关的windows方法的使用和location的先关方法的使用
下面是关于windows的相关方法的简单介绍. setInterval():它有一个返回值,主要是提供给clearInterval使用. setTimeout():它有一个返回值,主要是提供给clea ...