Files

105 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### **C++ `if` 条件分支 讲义**
#### **1. 引言 **
* **顺序结构的局限**
* 在之前的课程中,我们学习了 C++ 的:变量(我们的数据容器)、运算符(进行计算和比较的工具)以及输入输出。我们写的代码,就像一条的单行道,从 `main` 函数的第一行开始,按照顺序,一句话一句话地执行下去,直到终点。
但是,现实世界要复杂许多。我们每天都要做无数个决定:
* **如果**我饿了,**就**去吃饭。
* **如果**考试分数大于等于90分,**就**是优秀;**否则如果**大于等于80分,**就是**良好...
* 我们之前所写的代码都遵循一种**顺序结构**。就像下图的流程一样,程序从起点出发,一条路走到黑,中间没有任何改变方向的机会。
`int k = 1;` -> `k += 10;` -> `k++;` -> `++k;` -> `k %= 10;` -> `k += 6;`
无论运行多少次,只要初始值不变,结果永远是固定的。这种结构对于简单的计算是足够的,但它无法应对任何需要随机应变的场景。
如果想让我们的程序变得“智能”,能够模拟现实世界的逻辑,能够根据不同的情况做出不同的反应,那么我们就必须教会它如何**做选择**。
* **问题引入:让程序学会思考**
要让程序变得有用,它必须能够响应变化。比如:
* **网站登录**:**如果**用户输入的密码**等于**正确的密码,**就**跳转到主页;**否则**,就提示“密码错误”。
* **游戏逻辑**:**如果**玩家的生命值**小于或等于**0,**就**显示“游戏结束”。
* **自动售货机**:**如果**投入的金额**大于或等于**商品价格,**就**出货并找零。
这些场景的核心,都在于一个词——**如果 (if)**。
---
#### **2. 核心思想 (什么是 `if`?)**
* **思路铺垫**
如果说顺序结构是一条单行道,那么**分支结构就像是在程序中设置了一个个十字路口。**当程序执行到这个路口时,它会根据一个特定的条件,来决定接下来该怎么走。
而 `if` 语句,就是我们在 C++ 中设置这个十字路口的工具。
* **`if` 语句的形态**
##### **形态一:`if` (单选 - 如果...就...)**
这是最简单的一个形态,它只关心**“如果条件满足,该做什么**。
* **语法结构**:
```cpp
if (条件表达式) {
// 如果 '条件表达式' 的结果为 true,
// 就执行这里的代码。
}
// 如果为 false,则直接跳过花括号内的所有代码。
```
* **`条件表达式`**:这里的条件,通常是一个**关系运算**(如 `age > 18`)或**逻辑运算**(如 `score >= 60 && is_ok == false`)。它的最终计算结果必须是一个**布尔值**:`true` (真) 或 `false` (假)。
* **`{ ... }`**:花括号内的部分,就是满足条件时要执行的代码。
##### **形态二:`if-else` (二选一 - 如果...就...否则...)**
很多时候,我们不仅关心条件满足时做什么,也关心条件**不满足**时做什么。
* **语法结构**:
```cpp
if (条件表达式) {
// 条件为 true 时执行这里。
} else {
// 条件为 false 时执行这里。
}
```
* **互斥关系**:`if` 代码块和 `else` 代码块是“有你没我”的。程序在一次判断中,**有且仅有**一个代码块会被执行。
---
#### **3. 实例**
##### **案例:判断奇偶数 (演示 `if-else`)**
* **问题**:输入一个整数,判断它是奇数还是偶数。
* **逻辑**:一个数如果是偶数,那么它被2整除的余数必然是0。
* **代码实现**:
```cpp
if (number % 2 == 0) { // 条件:number除以2的余数是否为0?
cout << "这是一个偶数。" << endl;
} else {
cout << "这是一个奇数。" << endl;
}
```
---
#### **4. 总结**
1. `if` 语句赋予了程序**决策能力**,是构建复杂逻辑的基础。
2. `if` 用于单向判断,`if-else` 用于二选一,`if-else if-else` 用于多选一。
3. `if` 括号中的条件必须是一个最终能得出 `true` 或 `false` 的表达式。
4. `if - else if` 是**从上到下、依次判断、择一执行**的。
5. 注意区分一个等号(**赋值运算符**)和两个等号(**关系运算符**)的区别!**判断是否相等,一定要用两个等号 `==`!**
* 如果你写了这样的条件判断语句:`if (score = 100)` ,那么会先执行`= 100`的赋值语句,让左侧 `score` 变量的值变为 `100`。最终括号里还剩下`if(score)`,也就等价于`if(100)`,而在 C++ 中,任何非零的整数在 `if` 的条件中都会被当作 `true`。所以,`if(100)` 就等同于 `if(true)`,这个 `if` 语句块**永远**都会被执行!