• C++
  • C++ 随机数生成教程示例

  • @ 2025-4-4 20:16:07

以下是一个完整的 C++ 随机数生成教程示例,每行代码都附有详细注释:

#include <iostream>   // 引入 iostream 头文件,用于输入输出
#include <cstdlib>    // 引入 cstdlib 头文件,包含 rand() 和 srand() 函数
#include <ctime>      // 引入 ctime 头文件,包含 time() 函数

int main() {
    // 使用当前时间作为随机数种子
    // time(nullptr) 返回从 1970 年 1 月 1 日至今的秒数
    std::srand(static_cast<unsigned int>(std::time(nullptr)));

    // 提示用户输入随机数范围的上限
    std::cout << "请输入随机数范围的上限:";
    int max;
    std::cin >> max;

    // 生成一个介于 0 到 (max - 1) 的随机数
    // rand() % max 将随机数限制在 [0, max-1] 范围内
    int random_number = std::rand() % max;

    // 输出生成的随机数
    std::cout << "生成的随机数是:" << random_number << std::endl;

    // 如果需要生成指定范围内的随机数(例如 [min, max]),可以如下实现
    std::cout << "请输入随机数范围的下限:";
    int min;
    std::cin >> min;

    // 计算范围大小
    int range_size = max - min + 1;

    // 生成一个介于 min 和 max 之间的随机数
    // rand() % range_size 生成 [0, range_size-1] 的随机数
    // 加上 min 后,范围变为 [min, max]
    int random_in_range = std::rand() % range_size + min;

    // 输出生成的随机数
    std::cout << "生成的随机数(范围 [" << min << ", " << max << "])是:" << random_in_range << std::endl;

    return 0;  // 程序正常结束
}

代码解析

1. 头文件部分

#include <iostream>   // 提供输入输出功能,如 std::cout 和 std::cin
#include <cstdlib>    // 包含 rand() 和 srand() 函数,用于生成随机数
#include <ctime>      // 包含 time() 函数,用于获取当前时间,作为随机数种子
  • iostream 是标准输入输出库。
  • cstdlib 提供了随机数相关的函数。
  • ctime 提供了时间相关的函数。

2. 设置随机数种子

std::srand(static_cast<unsigned int>(std::time(nullptr)));
  • std::srand() 设置随机数种子。
  • std::time(nullptr) 获取当前时间(以秒为单位)。
  • 使用当前时间作为种子,确保每次运行程序时生成不同的随机数序列。
  • static_cast<unsigned int>time_t 类型转换为无符号整数类型。

3. 生成随机数

int random_number = std::rand() % max;
  • std::rand() 生成一个伪随机数,默认范围是 [0, RAND_MAX]
  • % max 将随机数限制在 [0, max-1] 范围内。

4. 指定范围的随机数

int random_in_range = std::rand() % range_size + min;
  • range_size = max - min + 1 计算范围大小。
  • std::rand() % range_size 生成 [0, range_size-1] 的随机数。
  • 加上 min 后,范围变为 [min, max]

5. 输出结果

std::cout << "生成的随机数是:" << random_number << std::endl;
  • 使用 std::cout 输出生成的随机数。
  • std::endl 表示换行并刷新输出缓冲区。

运行示例

假设用户输入如下:

请输入随机数范围的上限:10
生成的随机数是:7
请输入随机数范围的下限:5
生成的随机数(范围 [5, 10])是:9

注意事项

  1. 随机数的质量
    • rand() 是伪随机数生成器,适合简单场景。如果需要高质量随机数,可以使用 <random> 库。
  2. 范围检查
    • 在生成范围随机数时,确保 min <= max,否则会导致逻辑错误。
  3. 线程安全
    • rand()srand() 不是线程安全的。在多线程环境中,建议使用 <random> 库。

希望这个示例能帮助你理解 C++ 中随机数的生成!

1 条评论

  • @ 2025-4-4 20:16:58

    以下是一些常见的C语言生成随机数的示例代码及注释:

    示例1:生成单个随机数

    #include <stdio.h>      // 标准输入输出头文件,用于使用printf等函数
    #include <stdlib.h>     // 包含rand和srand函数的声明
    #include <time.h>       // 包含time函数的声明,用于获取时间作为随机种子
     
    int main() {
        srand(time(NULL)); // 使用当前时间(从1970年1月1日00:00:00 UTC到现在的秒数 )作为随机数种子。NULL作为参数传递给time函数,让其返回当前时间。如果不设置不同种子,rand函数每次运行生成的随机数序列是一样的
        int random_number = rand(); // 调用rand函数生成一个伪随机数,范围在0到RAND_MAX(通常是32767 )之间
        printf("Random number: %d\n", random_number); // 输出生成的随机数
        return 0;
    }
    

    示例2:生成指定范围内的随机整数(如1 - 100 )

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main() {
        srand(time(NULL)); // 用当前时间设置随机数种子
        int lower = 1;      // 范围下限
        int upper = 100;    // 范围上限
        int random_number = (rand() % (upper - lower + 1)) + lower; 
        // rand() % (upper - lower + 1) 得到0到(上限-下限)之间的数,再加上下限,就得到了指定范围[lower, upper]内的随机数
        printf("Random number in range [1, 100]: %d\n", random_number);
        return 0;
    }
    

    示例3:生成多个随机数(生成10个1 - 100范围内的随机数 )

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main() {
        srand(time(NULL)); // 设置随机数种子
        int lower = 1;      // 范围下限
        int upper = 100;    // 范围上限
        int count = 10;     // 要生成的随机数数量
        printf("Random numbers in range [1, 100]: ");
        for (int i = 0; i < count; i++) {
            int random_number = (rand() % (upper - lower + 1)) + lower; 
            // 每次循环生成一个指定范围内的随机数
            printf("%d ", random_number);
        }
        printf("\n");
        return 0;
    }
    

    示例4:生成0 - 1之间的浮点随机数

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main() {
        srand(time(NULL)); // 用当前时间设置随机数种子
        float random_float = (float)rand() / RAND_MAX; 
        // 将rand生成的整数转换为浮点数,再除以RAND_MAX,得到0到1之间的浮点随机数
        printf("Random float number between 0 and 1: %f\n", random_float);
        return 0;
    }
    
    • 1