当前位置:首页 > 谈天说地 > 正文内容

c生成随机数代码(const类型变量)

34资源网2022年01月14日 14:22366

Matlab内置了五种随机函数:

  • rand:生成在(0, 1)之间均匀分布的随机数
  • randn:生成均值为0,方差为1的标准正态分布的随机数
  • randi(imax):生成在[1, imax] 均匀分布的伪随机整数
  • randsrc(m, n, [alphabet; prob]):生成一个m-by-n的矩阵,矩阵的元素从alphabet里抽取,alphabet每个元素被抽中的概率由prob指定。
  • randperm(n):生成一个1到n的随机顺序。

而C++中要生成随机数,通常需要使用rand()和srand()两个函数。

对于C++ 11之前的随机数生成,只需rand/srand这两函数即可,C++11之后提供了更多的选择和东西,这里暂且不表。

1、rand函数
int rand(void);

rand()函数返回一个 0 ~ RAND_MAX 之间的整数。RAND_MAX 是一个定义在 <cstdlib> 的常数。

该函数返回的数字实际上是用算法生成的,实际上并不是随机的。它是根据种子生成的,根据不同的种子产生不同的随机序列。系统默认的种子是1,所以说每次使用的随机序列都是固定的。

比如下面这段代码:

#include <iostream>
using namespace std;

int main()
{
    cout << "RAND_MAD: " << RAND_MAX << endl;
    int x = rand();
    cout << "x: " << x << endl;
  
    return 0;
}

运行结果如下图所示,可以看出,每次运行的结果,x 的值都是固定的。

2、srand函数

要想使每次运行时变量 x 的值都不同,就必须使它的种子随机,这时就需要用到srand函数。

void srand(unsigned int seed);

srand()函数就是用来设置rand()函数的种子的。根据不同的输入参数可以产生不同的种子。通常使用time函数作为srand函数的输入参数。

time(NULL);

time函数会返回1970年1月1日至今所经历的时间(以秒为单位)。

在使用 rand() 函数之前,srand() 函数要先被调用,并且在整个程序中只需被调用一次。代码如下:

#include <iostream>
using namespace std;

int main()
{
    srand(time(0));
    int x = rand();
    cout << "x: " << x << endl;
  
    return 0;
}

运行结果如下:

注意:time函数会返回的是1970年1月1日至今所经历的时间(以秒为单位),若你手速足够快,在1s内能够执行多次,即time函数返回的值相同,x 的值也会相同。

3、指定随机数的范围

在实际应用中,通常需要要将随机数的范围限制在 1 到某个值 max 之间,则可以使用以下公式:

int var = rand() % max + 1;

求余数运算符(%)可以获得整除之后的余数。如当 max 为 6 时,余数将是 0 〜 5,给余数加 1 即可转换为 1 ~ 6。

#include <iostream>
using namespace std;

int main()
{
    srand(time(0));
    int x = rand() % 6 + 1;
    cout << "x: " << x << endl;
  
    return 0;
}

运行结果如下:

PS:计算机是一个可预测的系统,因此不可能通过算法来产生真正的随机数。在计算机中,所谓的随机数通常都是伪随机数,即通过随机算法计算出来的,可以被近似看作随机数的数值。

常见的随机数算法有线性同余法(Linear Congruential Generator)、梅森旋转法(Mersenne twister)等。

看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

支付宝红包二维码

除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

看下图所示是好多参与这次活动领取红包的朋友:

支付宝红包

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/5476.html

分享给朋友:

相关文章

疫情好可怕,据说白宫又有4名工作人员被确诊新冠肺炎
疫情好可怕,据说白宫又有4名工作人员被确诊新冠肺炎

最近看了下国内的疫情,大致还算稳定,每天增长不多,如下图所示是最新国内疫情情况:疫情数据能保持控制这么稳定,看来在党中央的领导有方,也感谢在前线工作的白衣天使们。不过相比海外疫情情况就不那么乐观了,如下图所示是海外疫情:据说【白宫又有4名工...

用不言谢造句17句分享
用不言谢造句17句分享

1、大恩不言谢,以后有什么用得上我的,尽管说!2、人们都说大恩不言谢,又说滴水之恩当涌泉相报,谢还是不谢?好为难!那今儿就不谢天不谢地,只谢朋友,谢谢你风雨一路的陪伴。感恩节快乐!3、大恩不言谢,我就是结草衔环,也不足为报。4、大恩不言谢,...

工具人是什么意思,工具人是什么梗?
工具人是什么意思,工具人是什么梗?

最近网络上面出现比较多的一个词语就是“工具人”,那么,什么样的人会将他形容成是工具呢?这个是让网友们觉得比较的好奇的,主要是指的什么?在微博上面经常看到有网络语工具人这样的表达,所以引起了很多网友的关注,想要了解这个词语,那么工具人是什么意...

令人受益的三种说话方式了解一下
令人受益的三种说话方式了解一下

有人说:人与人之间最累的关系就是感觉话不投机,说得越多越费劲,最后只能无话可说其实,想让别人喜欢听你说话,要先掌握正确的表达方式。你对别人说话的样子,决定了你在别人眼中的样子。一是,多说你喜欢的,而不要总说你讨厌的。你可能碰到过这样的人,他...

koko卡卡拖地机器人家用全自动擦地机推荐
koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡智能拖地机是东莞市宝联电子科技有限公司旗下产品,隶属于香港概念数码科技有限公司,其主要研发机器人吸尘器等高科技领域家居产品,想知道卡卡智能拖地机好用吗,看看下面是网友使用koko卡卡智能拖地机的相关介绍,希望对大家有所帮助。1、...

抹去了怎么造句,分享26句用抹去了造句
抹去了怎么造句,分享26句用抹去了造句

(1) 夜色抹去了最后一缕残阳,夜幕就像剧场里的绒幕,慢慢落下来了。(2) 回忆与现实的区别就是,回忆只留下了静静的画面,而抹去了喧闹的声音。李宫俊 (3) 你的回归喻示着团圆,你的回归代表着喜庆,你的回归抹去了屈辱,你的回归载满...