当前位置:首页 » 《资源分享》 » 正文

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

7 人参与  2024年04月23日 12:51  分类 : 《资源分享》  评论

点击全文阅读


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

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

文章目录

C++中生成随机数方法:rand()函数一、随机函数的介绍1.rand()函数2.srand()函数(1)srand函数的介绍(2)随机种子的介绍时间种子进程ID种子用户输入种子 二、具体实例1.随机生成整数2.随机生成有范围的整数3.随机生成浮点数

一、随机函数的介绍

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()即可。


点击全文阅读


本文链接:http://zhangshiyu.com/post/99054.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1