首页 > 编程语言 >C++(rand()、srand())

C++(rand()、srand())

时间:2024-08-20 13:38:43浏览次数:7  
标签:rand int srand C++ 种子 随机数 include

目录



rand()srand() 是 C++ 中用于生成随机数的函数。它们定义在 <cstdlib> 头文件中,并且在 C 语言中也有相同的用法。



1. rand() 函数

  • 功能: rand() 函数用于生成一个范围在 0RAND_MAX 之间的随机整数,其中 RAND_MAX 是一个常量,通常定义为 32767(但这个值可能因系统不同而有所变化)。
  • 用法: int rand();
  • 返回值: rand() 返回一个伪随机整数。

示例:

#include <iostream>
#include <cstdlib>  // 包含 rand 和 srand 函数
using namespace std;

int main() {
    for (int i = 0; i < 5; ++i) {
        cout << rand() << endl;
    }
    return 0;
}

上面的代码会输出 5 个随机整数。



2. srand() 函数

  • 功能: srand() 函数用于为 rand() 函数设定一个种子值。这个种子值决定了 rand() 函数生成的随机数序列。
  • 用法: void srand(unsigned int seed);
  • 参数: seed 是一个无符号整数,用作随机数生成器的种子。
  • 注意事项: 如果你不调用 srand() 来设置种子,那么 rand() 每次运行时都会生成相同的随机数序列,因为默认的种子是固定的。如果想要每次运行程序时生成不同的随机数,可以将 srand() 的参数设置为 time(0),这是当前时间的秒数。

示例:

#include <iostream>
#include <cstdlib>
#include <ctime>  // 包含 time 函数
using namespace std;

int main() {
    srand(time(0));  // 使用当前时间作为随机数生成的种子

    for (int i = 0; i < 5; ++i) {
        cout << rand() << endl;
    }
    return 0;
}

这段代码将生成每次运行都不同的随机数。



3. rand()srand() 的配合使用

  • 通常在程序开始时调用 srand() 来设置种子,然后在需要随机数的地方调用 rand()
  • 若多次调用 srand(),每次种子值相同,则产生的随机数序列也相同。

示例:

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

int main() {
    srand(12345);  // 设置固定的种子
    cout << "固定种子:" << endl;
    for (int i = 0; i < 5; ++i) {
        cout << rand() << endl;
    }

    srand(time(0));  // 使用当前时间作为种子
    cout << "时间种子:" << endl;
    for (int i = 0; i < 5; ++i) {
        cout << rand() << endl;
    }

    return 0;
}

这段代码首先会输出一组固定的随机数(因为 srand(12345)),然后输出一组不同的随机数(因为 srand(time(0)) 使用了当前时间作为种子)。



4. 小结

  • rand() 用于生成伪随机数。
  • srand() 用于设置生成伪随机数的种子。
  • 若不调用 srand() 或使用相同的种子,rand() 每次生成的随机数序列相同。
  • 通常通过 srand(time(0)) 来生成不同的随机数序列。

这就是 rand()srand() 在 C++ 中的基本用法及其配合使用的详细解析。

标签:rand,int,srand,C++,种子,随机数,include
From: https://www.cnblogs.com/keye/p/18369304

相关文章

  • c++的时间复杂度
    前言Hello,大家好我是文宇.最近没怎么写文章了,写个教程吧.正文C++是一种高级编程语言,用于开发各种类型的应用程序,包括计算机科学中的算法和数据结构。在编写代码时,了解算法和数据结构的时间复杂度非常重要,因为它可以帮助我们估计程序的执行效率和资源利用情况。在本文中,我......
  • 【NOI】C++数据结构入门之一维数组(二)数组找数
    文章目录前言一、概念1.导入2.数组找数二、例题讲解问题类型——查找特定值问题:1154.数组元素的查找问题:1815.最后一次出现该数的位置问题类型——查找最值问题:1152.求n个数的最大值和最小值问题:1168.歌唱比赛评分问题类型——统计出现次数问题:1810.最贵商品和最......
  • Acrobat DC安装报错1603,Microsoft Visual C++2013(x64)失败
    之前顺利安装过AcrobatDC,但可能因为自动更新了,导致让我重新登录才能使用,无法再次破解。于是我卸载后重新安装,发现提示MicrosoftVisualC++2013(x64)运行安装失败。我也在网上找了教程,在Adobe官网上下载了MicrosoftVisualC++2013(x64)进行自安装,安装后也可以在设置——应......
  • 学懂C++(三十九):网络编程——深入详解 TCP 和 UDP 的区别和应用场景
    目录一、TCP的特点及应用场景1.可靠性2.流控制和拥塞控制3.有序传输4.应用场景二、UDP的特点及应用场景1.无连接2.不可靠性3.轻量级4.支持广播和多播5.应用场景三、TCP和UDP的区别四、TCP和UDP的工作原理1.TCP的工作原理三次握手数据传输......
  • 学懂C++(四十):网络编程——深入详解 HTTP、HTTPS 及基于 Windows 系统的 C++ 实现
    目录一、引言二、HTTP协议1.HTTP概述2.HTTP工作原理3.HTTP请求和响应格式HTTP请求格式4.HTTP状态码三、HTTPS协议1.HTTPS概述2.HTTPS工作原理四、基于Windows系统的C++实现1.准备工作2.HTTP客户端实现示例代码3.HTTPS客户端实现示例代......
  • 2024年全国青少年信息素养大赛国赛PYTHON组(C++做法)
    目录前提第一题第二题第三题第四题第五题:第六题前提鄙人是C++学生,所以将PYTHON题做为C++题,还请各位多多海涵!!!部分芝士来自度娘和其它网站温馨提示:题目顺序可能不同,请各位仔细浏览! 第一题题目描述蓝蓝最近学到了一些单词,比如orange(橘子),apple(苹果),pear(梨)。......
  • 【C++篇】迈入新世界的大门——初识C++(下篇)
    文章目录前言引用引用的概念和定义引用的特性引用的使用const引用指针和引用的关系inline#define定义宏inlinenullptr前言接上篇:【C++篇】迈入新世界的大门——初识C++(上篇)引用引用的概念和定义引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会......
  • C++类型推导
    C++11引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,还能简化书写,提高编码效率。1.auto类型推导1.1auto关键字的新意义在go语言中,在方法范围中声明的变量可以具有类型推导,例如:vari=10;//在go中自动类型推导变量i为int型而C++11......
  • C++第十一弹 -- STL之List的剖析与使用
    文章索引前言1.list的介绍2list的使用2.1list的构造函数2.2iterator的使用2.3listcapacity2.4listelementaccess2.5listmodifiers3.list的迭代器失效4.list与vector的对比总结前言本篇我们旨在探讨对于STL中list的使用,下一篇我们将会对list进行底层......
  • C++面试基础系列-volatile
    系列文章目录文章目录系列文章目录C++面试基础系列-volatile1.volatile核心规则2.C与C++中volatile区别2.1.C语言中的volatile2.2.C++中的volatile2.3.原子性和顺序2.4.易失性2.5.优化2.6.使用场景2.7.C++特有的特性2.8.C++20引入的变化(如果有)3.volatile常见面试问题4......