Files
chouka/old/第04课-运气来了.md
2026-05-16 11:09:02 +08:00

3.9 KiB
Raw Permalink Blame History

第 4 课:运气来了(随机数)

本课目标:让程序每次运行(或每次「抽一下」)得到 不一样的整数,为后面的「抽到普通 / 稀有卡」做准备。学会使用 randsrand% 取余

复习:第 3 课用 cin 读入数据;本课的数据来自 程序内部的随机,不靠键盘。


1. 这一课要搞懂什么

  • std::rand():返回一个很大的随机整数(每次调用会变)。
  • 「种子」std::srand(...):告诉电脑「从哪一串运气开始乱」。种子一般在 main 里、第一次 rand 之前只设一次
  • 常用种子:用当前时间 std::time(nullptr),这样每次运行程序,种子不同,随机序列也不同。
  • %(取余):把很大的数 缩到你想要的范围。例如 % 100 得到 099

需要多两个头文件:

  • #include <cstdlib> —— randsrand
  • #include <ctime> —— time

2. 第一个随机数程序

保存为 lesson4.cpp(或 lession4.cpp,和编译命令一致即可):

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    std::srand(std::time(nullptr));
    int r = std::rand() % 100;
    std::cout << "随机数:" << r << "\n";
    return 0;
}

多运行几次 ./程序名,观察:数字会变


3. srand 为什么要写?(先有个印象)

如果 不写 std::srand(...),有些环境下每次运行程序,rand() 出来的顺序可能 一模一样。加了用时间当种子,更像「每次开游戏运气不同」。

本课记住:main 开头写一次 std::srand(std::time(nullptr)); 就对了。


4. % 怎么帮你「限定范围」

写法 结果范围(整数)
std::rand() % 100 099
std::rand() % 10 09
std::rand() % 6 05(像六面骰的 05 版)

以后要 1100 可以以后再学「加偏移」:% 100 再加 1 等;本课先掌握 0 起头 即可。


5. 和抽卡游戏的关系

下一课会把随机数放进 if 判断:数字落在不同区间 → 普通 / 稀有 / 超稀有。本课只练:能生成一个 099 的 r 并打印


6. 怎么编译和运行

clang++ -std=c++17 -o lession4 lession4.cpp
./lession4

(若你的源文件叫 lesson4.cpp,把命令里的名字一起改掉,保持 源文件名、 -o 名字、./ 名字 一致。)


7. 本课课堂小练习

  1. % 100 改成 % 10,看多运行几次是不是都落在 09。
  2. 连续输出 3 个 随机数(调用三次 std::rand() % 100,分三行 cout),看三次是不是一般互不相同。

示例结构(数字和换行可自己调整):

std::srand(std::time(nullptr));
int a = std::rand() % 100;
int b = std::rand() % 100;
int c = std::rand() % 100;
std::cout << a << " " << b << " " << c << "\n";

8. 本课课后作业(选做)

  • 注释掉 std::srand(std::time(nullptr)); 这一行,多运行几次程序,观察随机数是否还容易变化(记下现象即可)。
  • 问家长:nullptr 是什么可以以后再学,本课先当「固定写法配合 time 用」。

9. 常见小问题

  • 忘了 #include <cstdlib><ctime>:可能报 rand / time 未声明。
  • srand 写了很多次:一般只在开头写一次;循环里反复 srand 可能让随机性变差,本课先别在循环里设种子。
  • 想要小数:本课都是整数随机;小数以后用 double 等再扩展。

10. 下一课预告

第 5 课学 if / else if / else:根据 r 落在哪个区间,打印「普通 / 稀有 / 超稀有」——抽卡的核心逻辑就来了。


学完请家长在 学习进度与状态.md 里更新第 4 课的状态与作业完成情况。

下一课文档第05课-稀有度与判断.md