✅作者简介:大家好,我是新小白2022,让我们一起学习,共同进步吧!🏆
📃个人主页:新小白2022的CSDN博客
🔥系列专栏:算法基础入门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
系列文章目录
算法学习打卡
前言
rand() 函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。参考优秀文章
一、C++ rand 与 srand 的用法
1、函数rand( )功能及用法
功能 : 随机数发生器
用法:
int rand(void)
头文件: stdlib.h
rand() 返回一随机数值的范围在 0 至 RAND_MAX 间。RAND_MAX 的范围最少是在 32767 之间(int)。用 unsigned int 双字节是 65535,四字节是 4294967295 的整数范围。0~RAND_MAX 每个数字被选中的机率是相同的。
用户未设定随机数种子时,系统默认的随机数种子为 1。
rand() 产生的是伪随机数字,每次执行时是相同的; 若要不同, 用函数 srand() 初始化它。
2、函数srand( )功能及用法
功能: 初始化随机数发生器
用法:
void srand(unsigned int seed)
头文件:stdlib.h
srand() 用来设置 rand() 产生随机数时的随机数种子。
参数 seed 必须是个整数,如果每次 seed 都设相同值,rand() 所产生的随机数值每次就会一样。
二、使用当前时钟作为随机数种子
rand() 产生的随机数在每次运行的时候都是与上一次相同的。
若要不同, 用函数 srand() 初始化它。可以利用 srand( (unsigned int) time(NULL) ) 的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
1、产生随机数的用法
- 1) 给srand()提供一个种子,它是一个unsigned int类型;
- 2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
- 3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
- 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步"随机化"rand( )的输出。
0~RAND_MAX 之间的随机数程序
#include<iostream>
#include<stdlib.h>
//#include<cmath>
#include<ctime>
//#include<time.h>
using namespace std;
int main()
{
//产生1~100的随机数
srand((unsigned int)time(NULL));
int num = rand()%100 + 1; //本来是从0~99,表达式+1后范围改变!
cout << num << endl;
system("pause");
return 0;
}
三、写在最后
产生一定范围随机数的通用表示公式(含指定位数)
要取得[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到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
若生成指定位数的随机数,比如生成3位随机数。可看作生成 [ 100 , 1000 ) 范围内
如果还想拓展学习----优秀博文
有介绍---随机数引擎类
随机数分布类----产生均匀分布的实数
产生正态分布的实数
生成二项分布的布尔值