# 第 5 课:稀有度与判断(`if` / `else`) **本课目标**:根据第 4 课得到的随机整数 **`r`**,用 **`if` / `else if` / `else`** 判断「抽到哪种稀有度」,并在屏幕上打印出来。这是抽卡游戏的 **核心逻辑**。 **复习**:第 4 课 `rand` + `% 100` 得到 0~99 的 `r`。本课不问键盘,先专注 **分支判断**。 --- ## 1. 这一课要搞懂什么 - **`if (条件) { ... }`**:条件成立,就执行大括号里的语句。 - **`else if (条件) { ... }`**:前面都不成立,再试这一个条件。 - **`else { ... }`**:上面所有条件都不成立,就走这里(最后一档)。 - **比较运算符**(本课常用):`<` 小于、`>` 大于、`<=` 小于等于、`>=` 大于等于、`==` 等于、`!=` 不等于。 条件外面要加 **圆括号** `()`,语句块外面要加 **花括号** `{}`(本课先养成「每档都写 `{}`」的习惯)。 --- ## 2. 稀有度怎么和数字对应? 下面用 **0~99** 的 `r` 分成三档(概率只是举例,以后你可以改数字): | `r` 的范围 | 约占比 | 结果 | |------------|--------|------| | 0~69 | 约 70% | 普通卡 | | 70~94 | 约 25% | 稀有卡 | | 95~99 | 约 5% | 超稀有卡 | 代码里写成: - `r < 70` → 普通(0~69) - `r < 95` → 稀有(70~94)——注意:能进到这里时,`r < 70` 已经不成立了,所以实际是 70~94 - 剩下的 → 超稀有(95~99) --- ## 3. 完整示例程序 保存为 `lession5.cpp`: ```cpp #include #include #include int main() { std::srand(std::time(nullptr)); int r = std::rand() % 100; std::cout << "你抽到了:"; if (r < 70) { std::cout << "普通卡\n"; } else if (r < 95) { std::cout << "稀有卡\n"; } else { std::cout << "超稀有卡!!\n"; } return 0; } ``` 多运行几次,观察三种结果都会出现(超稀有会较少,属正常)。 --- ## 4. 调试小技巧:先看 `r` 是多少 不确定区间对不对时,可以先打印随机数: ```cpp std::cout << "本次点数 r = " << r << "\n"; ``` 加在 `if` 之前,方便对照「数字落在哪一档」。 --- ## 5. 和抽卡游戏的关系 | 本课学会 | 以后可以 | |----------|----------| | 分档判断 | 普通 / 稀有 / 传说 | | 改数字 | 调概率(更难或更容易出稀有) | | 加 `else if` | 多加一档「史诗」等 | 第 6 课会加 **循环**,按次数连续抽;第 7 课用 **数组** 给每档起卡名。 --- ## 6. 怎么编译和运行 ```bash clang++ -std=c++17 -o lession5 lession5.cpp ./lession5 ``` --- ## 7. 本课课堂小练习 1. 在 `if` 前增加一行,输出本次的 `r`(或「点数」),再运行多次,对照上一节的表格看是否合理。 2. 把「超稀有」条件改严一点:例如只有 `r >= 98` 才是超稀有(想想 `else` 里要对应哪一段 `r`)。 --- ## 8. 本课课后作业(选做) - 把三档概率改成你自己喜欢的比例(例如更容易出稀有),记录你改的 `<` 旁边的数字。 - 问家长:**为什么要先写 `r < 70` 再写 `r < 95`**,而不能把两个条件反过来?(提示:判断顺序像从上往下筛。) --- ## 9. 常见小问题 - **`if (r < 70);`** 后面多写了分号:可能导致大括号里的内容**总是**执行或逻辑错乱,本课每档用 `{ }` 包住最清晰。 - **用 `=` 代替 `==`**:`if (r = 70)` 是赋值不是比较,容易出 bug;比较数字是否相等要用 `==`。 - **想判断「是否等于 100」**:本课 `r` 最大是 99,若要 1~100 的范围要改 `rand` 那一行,以后可以再扩展。 --- ## 10. 下一课预告 第 6 课学 **循环**(`for`):按玩家输入的次数,连续抽很多次,不用复制粘贴很多遍 `if`。 --- *学完请家长在 `学习进度与状态.md` 里更新第 5 课的状态与作业完成情况。* **下一课文档**:`第06课-循环与多抽.md`