save code

This commit is contained in:
xsl
2026-05-16 11:09:02 +08:00
parent 478b3451a1
commit a169ceb263
45 changed files with 2226 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
# 第 5 课:稀有度与判断(`if` / `else`
**本课目标**:根据第 4 课得到的随机整数 **`r`**,用 **`if` / `else if` / `else`** 判断「抽到哪种稀有度」,并在屏幕上打印出来。这是抽卡游戏的 **核心逻辑**
**复习**:第 4 课 `rand` + `% 100` 得到 099 的 `r`。本课不问键盘,先专注 **分支判断**
---
## 1. 这一课要搞懂什么
- **`if (条件) { ... }`**:条件成立,就执行大括号里的语句。
- **`else if (条件) { ... }`**:前面都不成立,再试这一个条件。
- **`else { ... }`**:上面所有条件都不成立,就走这里(最后一档)。
- **比较运算符**(本课常用):`<` 小于、`>` 大于、`<=` 小于等于、`>=` 大于等于、`==` 等于、`!=` 不等于。
条件外面要加 **圆括号** `()`,语句块外面要加 **花括号** `{}`(本课先养成「每档都写 `{}`」的习惯)。
---
## 2. 稀有度怎么和数字对应?
下面用 **099**`r` 分成三档(概率只是举例,以后你可以改数字):
| `r` 的范围 | 约占比 | 结果 |
|------------|--------|------|
| 069 | 约 70% | 普通卡 |
| 7094 | 约 25% | 稀有卡 |
| 9599 | 约 5% | 超稀有卡 |
代码里写成:
- `r < 70` → 普通(069
- `r < 95` → 稀有(70~94)——注意:能进到这里时,`r < 70` 已经不成立了,所以实际是 70~94
- 剩下的 → 超稀有(9599
---
## 3. 完整示例程序
保存为 `lession5.cpp`
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
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`