C++中生成随机数方法:rand()函数

C++中生成随机数方法:rand()函数

在C++中,可以使用 #include <·cstdlib·>头文件中的随机函数来生成随机数。
以下是几个常用的随机函数

一、随机函数的介绍

1.rand()函数

在C++标准库中rand()函数是生成0到RAND_MAX之间的随机整数,RAND_MAXs是定义一个宏定义,在库中定义为一个大于32767的整数。

但是rand()函数生成的随机数是一个伪随机数(每次代码运行都是相同的数字除非重启),需要设置随机数种子。

2.srand()函数

(1)srand函数的介绍

在C++标准库中srand()函数可以传递一个整数值作为种子,从而改变rand()的随机序列,一般可以使用time(NULL)作为时间种子,根据当前时间作为随机数种子。

(2)随机种子的介绍

时间种子

原理:使用系统时间作为随机数种子,根据时间改变随机数。
代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
    // 使用系统时钟作为硬件种子
    srand(time(0));
    for (int i = 0; i < 5; i++) {
        int randomNum = rand(); // 生成随机数
        std::cout << "Random number: " << randomNum << std::endl;
    }
    return 0;
}
进程ID种子

原理:使用进程ID作为随机数种子,每一个进程拥有各自的ID。
代码:

#include <iostream>
#include <cstdlib>
#include <unistd.h>  // 包含 getpid() 函数的头文件
using namespace std;
int main() {
    // 使用进程ID作为随机数种子
    srand(getpid());
    // 生成随机数
    for (int i = 0; i < 5; i++) {
        int randomNumber = rand();
        cout << "Random number: " << randomNumber << endl;
    } 
    return 0;
}
用户输入种子

原理:根据用户输入的值调动不同的种子,从而实现随机数。
代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
    srand(4); // 设置随机数种子为4
    for (int i = 0; i < 5; i++) {
        int randomNum = rand(); // 生成随机数
        std::cout << "Random number: " << randomNum << std::endl;
    }
    return 0;
}

二、具体实例

1.随机生成整数

代码:

#include<iostream>
#include <cstdlib>
using namespace std;
int main()
{
	srand(time(NULL));
	int b = rand();
	cout << b;
}

先设置随机数时间种子,在定义变量。

2.随机生成有范围的整数

代码:

#include<iostream>
#include <cstdlib>
using namespace std;
int main()
{
	srand(time(NULL));
	int max = 1000;
	int min = 10;
	int b = min+rand()%(max-min+1);
	cout << b;
}

int b = min+rand()%(max-min+1);

注释:
①rand()取得0~RAND_MAX的随机数【左闭右闭】
②取模运算使其范围缩小到0~991【左闭右开】
③加上min从而实现min~max+1【左闭右开】

3.随机生成浮点数

代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(NULL)); // 设置随机数种子为当前时间

    double randomFloat = rand() / static_cast<double>(RAND_MAX); // 生成一个范围在 0 到 1 之间的随机浮点数
    cout << "随机浮点数:" << randomFloat << endl;
    return 0;
}

注释
static_cast(RAND_MAX)代码表示将RAND_MAX转换double类型。
由于 rand() 的范围是0~RAND_MAX,所以最终的范围是0到1的浮点数。

补充
如果想取大于1的浮点数
代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(NULL)); // 设置随机数种子为当前时间

    double randomFloat = rand() / static_cast<double>(RAND_MAX)+rand(); 
    return 0;
}

在 rand() / static_cast(RAND_MAX)加上rand()即可。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只特立独行猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值