Initial commit: C++ courseware
This commit is contained in:
commit
4a4ee7c287
1789 files changed
+373489
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,105 @@
|
||||
### **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` 语句块**永远**都会被执行!
|
||||
Binary file not shown.
@@ -0,0 +1,182 @@
|
||||
### **C++ `if` 条件分支实战演练 讲义**
|
||||
|
||||
#### **一、 引言**
|
||||
|
||||
##### **问题引入:条件判断问题**
|
||||
|
||||
在编写程序时,经常会出现根据条件不同,所做的事情也不同的情况,例如:
|
||||
* **如果** 天在下雨,你**就**会带上雨伞
|
||||
* **否则**(也就是天没下雨),你**就**不带伞。
|
||||
|
||||
这个“如果...就...否则...”的过程,就是我们无时无刻不在进行的**决策**。我们会根据不同的**条件**(是否下雨),选择执行不同的**动作**(带伞或不带伞)。
|
||||
|
||||
程序可以通过 `if` 条件分支结构 来拥有这种在分岔点做选择的能力,使我们能够:
|
||||
|
||||
* **判断用户输入**:判断用户输入的数字是否在某个范围内、输入的是奇数还是偶数。
|
||||
* **做出决策**:根据不同的条件,执行完全不同的代码路径。
|
||||
* **响应变化**:例如根据游戏角色的血量,决定是继续攻击还是播放阵亡动画。
|
||||
|
||||
---
|
||||
|
||||
#### **二、 核心思想:如何解决条件判断问题**
|
||||
|
||||
对于一个需要条件判断的问题,我们有如下的解题模板(**==这是本讲义重要的部分,请务必理解!==**):
|
||||
|
||||
1. **【第一步:找到分岔点】**
|
||||
* 仔细阅读题目,找出决定程序走向的**所有关键条件**。这些就是程序需要做出选择的分岔点。
|
||||
* 例如:“判断奇偶性”的分岔点是“能否被2整除”;“判断成年人”的分岔点是“年龄是否大于等于18”。
|
||||
2. **【第二步:写出判断分岔点的条件语句】**
|
||||
* 将这些用自然语言描述的分岔点,翻译成 C++ **条件表达式**。
|
||||
* 例如:需要判断分数在70到80之间 -> `score >= 70 && score <= 80`。
|
||||
3. **【第三步:根据分岔点的数量和关系选择合适的`if`分支语句】**
|
||||
* **二选一**(是/否):用 `if-else` 结构。(例如:判断一个数是 奇数/偶数)
|
||||
* **只关心一种情况**:只用一个 `if` 结构。(例如:只有及格了才发奖状,不及格什么都不做)
|
||||
* **多选关系**:根据题意使用多个`if` 语句进行处理。(例如:学生考试评级为A、B、C 时分别要做不同的事情,那么就需要三个 `if` 语句, `if(score == 'A'){} if(score == 'B'){}; if(score == 'C'){};` 来分别处理每一种情况,其中 `score` 是储存考试评级的 `char` 变量)
|
||||
4. **【第四步:实现各分支的逻辑代码】**
|
||||
* 在搭建好 `if`、`else if` 与 `else` 的结构框架后,需要在其对应的 `{}` 代码块中,**实现**当该分支条件被满足时,程序所需执行的**具体逻辑**。包括但不限于:执行数学运算、对变量进行赋值,或者调用 `cout` 将计算结果等输出。
|
||||
|
||||
---
|
||||
|
||||
#### **三、 实战演练**
|
||||
|
||||
接下来,我们列出几个上课中所讲解的案例,来深化`if` 语句的使用。
|
||||
|
||||
##### **案例一:奇偶判断 (二选一)**
|
||||
|
||||
1. **分岔点**:一个数是“偶数”还是“奇数”。本质条件是“能否被2整除”。
|
||||
2. **写出判断分岔的条件语句**:`num % 2 == 0`。如果为`true`,说明是偶数。
|
||||
3. **分岔结构**:这是一个“是/否”二选一问题,使用 `if-else`。
|
||||
4. **程序代码**:
|
||||
|
||||
```cpp
|
||||
int main() {
|
||||
int num;
|
||||
cin >> num;
|
||||
if (num % 2 == 0) { // 如果“写出判断分岔的条件语句”为真
|
||||
cout << "偶数"; // 走“偶数”这条路
|
||||
} else {
|
||||
cout << "奇数"; // 否则,走“奇数”这条路
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
##### **案例二:景点门票 **
|
||||
|
||||
1. **分岔点**:票价是“半价”还是“全价”。条件是“年龄小于等于6” **或者** “年龄大于等于60”。
|
||||
2. **写出判断分岔的条件语句**:这里的连接词是“或者”,翻译成 C++ 就是 `||`。写出条件语句为:`age <= 6 || age >= 60`。
|
||||
3. **分岔结构**:二选一问题,使用 `if-else`。
|
||||
4. **程序代码**:
|
||||
```cpp
|
||||
if (age <= 6 || age >= 60) {
|
||||
cout << 25; // 半价
|
||||
} else {
|
||||
cout << 50; // 全价
|
||||
}
|
||||
```
|
||||
|
||||
##### **案例三:计算器 (多分支判断)**
|
||||
|
||||
**题目描述**:设计一个计算器。让用户输入**num1+num2**、**num1-num2**、**num1\*num2**、**num1/num2** 形式的计算式。
|
||||
|
||||
我们的计算器便能够自动识别此时是要进行加法运算、减法运算、乘法运算,还是除法运算。最终输出计算结果。
|
||||
|
||||
1. **分岔点**:用户想进行哪种运算?取决于输入的运算符是 `+`、`-`、`*` 还是 `/`。这是四个不同的岔路。
|
||||
2. **写出判断分岔的条件语句**:`ch == '+'`、`ch == '-'`、`ch == '*'`、`ch == '/'`。
|
||||
3. **分岔结构**:这里有多个独立的条件,每个条件都要做不同的事情,我们可以用一连串的 `if` 语句来分别检查。
|
||||
4. **程序代码**:
|
||||
```cpp
|
||||
int num1, num2;
|
||||
char ch;
|
||||
cin >> num1 >> ch >> num2;
|
||||
|
||||
if (ch == '+') {
|
||||
cout << num1 + num2;
|
||||
}
|
||||
if (ch == '-') {
|
||||
cout << num1 - num2;
|
||||
}
|
||||
if (ch == '*') {
|
||||
cout << num1 * num2;
|
||||
}
|
||||
if (ch == '/') {
|
||||
cout << (double)num1 / num2;
|
||||
}
|
||||
```
|
||||
|
||||
##### **案例四:闰年判断**
|
||||
|
||||
**题目描述:**请输入一个年份,判断该年是不是闰年。是的话输入该年份,不是的话输出"No"。其中能被4整除 **并且** 不能被100整除 **或者** 能被400整除 的是闰年。(这个判断条件稍显复杂,但是只要能写出判断分岔的条件语句,根据前面的条件判断问题解题模板,也能轻松解决。)
|
||||
|
||||
1. **分岔点**:这一年是“闰年”还是“平年”。
|
||||
2. **写出判断分岔的所有条件语句**
|
||||
|
||||
* 规则:(能被4整除 **并且** 不能被100整除) **或者** (能被400整除)。
|
||||
* 条件A(能被4整除):`year % 4 == 0`
|
||||
* 条件B(不能被100整除):`year % 100 != 0`
|
||||
* 条件C(能被400整除):`year % 400 == 0`
|
||||
* 将条件A, B, C组合起来,注意括号代表优先级:`(A && B) || C`
|
||||
* 最终写出判断分岔的条件语句:`((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)`
|
||||
3. **分岔结构**:二选一,用 `if-else`。
|
||||
4. **程序代码**:
|
||||
|
||||
```cpp
|
||||
int year;
|
||||
cin >> year;
|
||||
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
|
||||
cout << year; // 是闰年,输出年份
|
||||
} else {
|
||||
cout << "No"; // 不是闰年
|
||||
}
|
||||
```
|
||||
|
||||
##### **案例五:鸡兔同笼 **
|
||||
|
||||
**题目描述**:已知鸡和兔的总数量为n,总腿数为 m。输入 n 和 m ,依次输出鸡的数目和兔的数目。如果无解,则输出No answer。
|
||||
|
||||
本问题将编程与数学的结合起来了。我们需要根据程序计算出来的结果去**验证计算结果的合理性**。我们可以列出两个方程:
|
||||
|
||||
**$$ 鸡数量 + 兔数量 = n \ ①$$**
|
||||
|
||||
**$$ 2 * 鸡数量 + 4 * 兔数量 = m \ ②$$**
|
||||
|
||||
1. **分岔点**:根据给定的头和腿的数量,算出来的鸡兔数量来判断是“有解”还是“无解”。
|
||||
2. **写出判断分岔的条件语句**:列出方程后,进行变换后可以得到: `鸡 = (4*n-m)/2` 和 `兔 = n-鸡` 中,于是我们能推断出**无解**的条件:
|
||||
|
||||
* `4*n-m` 必须是偶数,否则鸡的数量是小数。 -> `(4*n-m) % 2 != 0`
|
||||
* 算出来的鸡的数量不能是负数。 -> `鸡 < 0`
|
||||
* 算出来的兔的数量不能是负数。 -> `兔 < 0`
|
||||
* 这三个**无解**的条件,**只要满足任意一个**,就说明无解。所以用 `||` 连接。
|
||||
* 最终写出判断分岔的条件语句:`( (4*n-m) % 2 != 0 || 鸡 < 0 || 兔 < 0 )`
|
||||
3. **分岔结构**:二选一,`if-else`。
|
||||
4. **程序代码**:
|
||||
|
||||
```cpp
|
||||
int n, m, chicken, rabbit;
|
||||
cin >> n >> m;
|
||||
|
||||
// 先用数学公式计算,对应方程 鸡 = (4*n-m)/2 和 兔 = n-鸡
|
||||
chicken = (4 * n - m) / 2;
|
||||
rabbit = n - chicken;
|
||||
|
||||
// 再用if进行合理性验证
|
||||
if ((4 * n - m) % 2 != 0 || chicken < 0 || rabbit < 0) {
|
||||
cout << "No answer";
|
||||
} else {
|
||||
cout << chicken << " " << rabbit;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### **四、 总结**
|
||||
|
||||
* **掌握四步解题模板**:
|
||||
遇到条件判断问题。请遵循“**识别分岔点 -> 写出分岔点的条件表达式 -> 选择分支结构 -> 通过代码实现分支逻辑**”的流程,能确保你的思路清晰。
|
||||
|
||||
* **翻译条件表达式**:
|
||||
将自然语言条件翻译为代码的条件表达式要求熟练掌握,需要通过持续练习来巩固。
|
||||
|
||||
* **多使用括号**:
|
||||
在构建复杂的逻辑表达式时,使用 `()` 来指定运算优先级。能确保逻辑正确,也能让你的代码更加易于阅读。
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
### C++ if 条件分支 课后习题 - **答案**
|
||||
|
||||
#### **一、 填空题**
|
||||
|
||||
1. 顺序结构
|
||||
2. 分支结构
|
||||
3. 条件 (或 条件表达式)
|
||||
4. `true` (真),`false` (假)
|
||||
5. 有且仅有
|
||||
6. `==`,`=`
|
||||
|
||||
#### **二、 单项选择题**
|
||||
|
||||
1. C 2. A 3. B 4. D 5. A 6. B 7. B 8. C 9. A 10. C
|
||||
|
||||
#### **三、 判断题**
|
||||
|
||||
1. √
|
||||
2. √
|
||||
3. √
|
||||
4. × (两者是互斥的,只能执行一个)
|
||||
5. × (判断相等必须用 `==`)
|
||||
6. √
|
||||
7. √
|
||||
8. × (这个是单向判断,用 `if` 就足够了)
|
||||
9. √
|
||||
10. √
|
||||
@@ -0,0 +1,83 @@
|
||||
### C++ if 条件分支 课后习题
|
||||
|
||||
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_
|
||||
|
||||
#### **一、 填空题**
|
||||
|
||||
1. 程序从上到下、一条一条依次执行的结构,叫做\_\_\_\_\_\_\_\_\_\_\_\_\_结构。
|
||||
2. 能够根据不同的情况做出不同反应的程序结构,叫做\_\_\_\_\_\_\_\_\_\_\_\_\_结构。
|
||||
3. `if` 语句它会根据括号中的\_\_\_\_\_\_\_\_\_\_\_\_\_,来决定接下来该走哪条路。
|
||||
4. `if (条件表达式)` 中,`条件表达式`的最终计算结果必须是一个布尔值,即\_\_\_\_\_\_\_\_\_\_\_\_\_或\_\_\_\_\_\_\_\_\_\_\_\_\_。
|
||||
5. `if-else` 结构是“有你没我”的互斥关系,程序在一次判断中,\_\_\_\_\_\_\_\_\_\_\_\_\_(填写 **可能** 或 **有且仅有**)会有一个代码块被执行。
|
||||
6. 在C++中,用来**判断**两个值是否相等的运算符是\_\_\_\_\_\_\_\_\_\_\_\_\_,用来**赋值**的运算符是\_\_\_\_\_\_\_\_\_\_\_\_\_。
|
||||
|
||||
#### **二、 单项选择题**
|
||||
|
||||
( ) 1. 如果说顺序结构是一条单行道,那么分支结构就像是程序中的什么?
|
||||
A. 停车场 B. 收费站 C. 十字路口 D. 加油站
|
||||
|
||||
( ) 2. 观察下面的代码,当输入的 `score` 为 95 时,会输出什么?
|
||||
```cpp
|
||||
if (score >= 90) {
|
||||
cout << "优秀";
|
||||
}
|
||||
```
|
||||
A. 优秀 B. 良好 C. 95 D. 什么都不输出
|
||||
|
||||
( ) 3. 观察下面的代码,当输入的 `score` 为 85 时,会输出什么?
|
||||
```cpp
|
||||
if (score >= 90) {
|
||||
cout << "优秀";
|
||||
} else {
|
||||
cout << "继续努力";
|
||||
}
|
||||
```
|
||||
A. 优秀 B. 继续努力 C. 85 D. 什么都不输出
|
||||
|
||||
( ) 4. 要判断一个数 `n` 是不是偶数,`if` 括号中的条件表达式应该怎么写?
|
||||
A. `n % 2 == 1` B. `n % 2 = 0` C. `n / 2 == 0` D. `n % 2 == 0`
|
||||
|
||||
( ) 5. 在C++中,`if` 括号里的条件如果是 `if (100)`,计算机会把它当作什么来处理?
|
||||
A. `true` (真) B. `false` (假) C. 语法错误 D. 0
|
||||
|
||||
( ) 6. 在书本P37页 例3-5 洛谷团队系统的案例中,本地配置 `n` 道题的总时间是?
|
||||
A. `11 + 3 * n` B. `5 * n` C. `3 * n` D. `11 + 5 * n`
|
||||
|
||||
( ) 7. `if` 语句和 `if-else` 语句的主要区别是什么?
|
||||
A. `if` 只能判断一次,`if-else` 可以判断多次
|
||||
B. `if` 只管条件成立做什么,`if-else` 还管条件不成立做什么
|
||||
C. `if` 比 `if-else` 运行速度快
|
||||
D. `if` 后面必须有大括号,`if-else` 不用
|
||||
|
||||
( ) 8. 下面的代码存在一个错误,它会导致什么后果?
|
||||
```cpp
|
||||
int password = 123;
|
||||
if (password = 456) {
|
||||
cout << "登录成功";
|
||||
}
|
||||
```
|
||||
A. 程序无法编译 B. 条件判断永远为假 (false)
|
||||
C. 条件判断永远为真 (true) D. 程序会崩溃
|
||||
|
||||
( ) 9. 在 `if-else` 结构中,如果 `if` 后面的条件为 `true`,程序会怎么执行?
|
||||
A. 只执行 `if` 的代码块
|
||||
B. 只执行 `else` 的代码块
|
||||
C. `if` 和 `else` 的代码块都执行
|
||||
D. `if` 和 `else` 的代码块都不执行
|
||||
|
||||
( ) 10. “如果明天下雨,我就待在家里,否则我就去公园。” 这句话最适合用哪种程序结构来描述?
|
||||
A. 顺序结构 B. `if` 语句
|
||||
C. `if-else` 语句 D. 循环结构
|
||||
|
||||
#### **三、 判断题 (对的打“√”,错的打“×”)**
|
||||
( ) 1. 我们之前写的从上到下依次执行的代码,都属于顺序结构。
|
||||
( ) 2. `if` 语句可以在 C++ 中实现分支结构。
|
||||
( ) 3. `if (score >= 60)` 这个括号里的 `score >= 60` 是一个关系表达式。
|
||||
( ) 4. 在 `if-else` 结构中,`if` 部分和 `else` 部分的代码可能会同时被执行。
|
||||
( ) 5. 在判断一个数 `x` 是否等于10时,应该写成 `if (x = 10)`。
|
||||
( ) 6. 在C++中,任何非零的整数在 `if` 的条件中都会被当作 `true`。
|
||||
( ) 7. `if (a != b)` 这个条件是用来判断变量 `a` 和 `b` 的值是否不相等。
|
||||
( ) 8. “如果我的零花钱超过20元,我就去买一个冰淇淋。” 这个逻辑只能用 `if-else` 实现。
|
||||
( ) 9. 在“判断奇偶数”的案例中,如果一个数不是偶数,那么它一定是奇数。
|
||||
( ) 10. `if` 语句可以让我们的程序变得更智能,能够根据不同情况做出反应。
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
### C++ if 条件分支实战演练 课后习题 - **答案**
|
||||
|
||||
#### **一、 填空题**
|
||||
|
||||
1. 分岔点 条件语句 数量 关系 逻辑代码
|
||||
2. `&&`
|
||||
3. `if-else`
|
||||
4. `||`
|
||||
5. 字符 (`char`)
|
||||
6. `ch - '0'`
|
||||
7. `(year % 4 == 0 && year % 100 != 0) || year % 400 == 0`
|
||||
|
||||
#### **二、 单项选择题**
|
||||
|
||||
1. A 2. C 3. C 4. B 5. B 6. C 7. C 8. C(还没讲if-else if -else) 9. B 10. C
|
||||
|
||||
#### **三、 判断题**
|
||||
|
||||
1. √
|
||||
2. × (错误的,`<= 80` 前缺少了 `score`)
|
||||
3. √ (例如计算器案例中,`+ - * /` 就是四种独立的情况)
|
||||
4. × (正好相反,先用数学公式计算,再用`if`来验证结果是否合理)
|
||||
5. √
|
||||
6. √ (这是良好的代码风格)
|
||||
7. × (因为使用的是多个独立的 `if`,程序会依次检查每一个 `if` 条件)
|
||||
8. √
|
||||
9. √
|
||||
10. √
|
||||
@@ -0,0 +1,66 @@
|
||||
### C++ if 条件分支实战演练 课后习题
|
||||
|
||||
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_
|
||||
|
||||
#### **一、 填空题**
|
||||
|
||||
1. **解决条件判断问题的模板**的第一步是:找到需要程序做出选择的\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。第二步是:写出判断分岔点的\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。第三步是:根据分岔点的\_\_\_\_\_\_\_\_\_\_\_\_\_和\_\_\_\_\_\_\_\_\_\_\_\_\_选择合适的 `if` 分支语句。第四步是:实现各分支的\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。
|
||||
2. 在C++中,要表达“`score`在70到80之间(含边界)”这个条件,正确的代码是 `score >= 70` \_\_\_\_\_\_\_\_\_\_\_\_\_ `score <= 80`。
|
||||
3. 要判断一个数是“奇数”还是“偶数”,这是一个“二选一”问题,应该使用\_\_\_\_\_\_\_\_\_\_\_\_\_结构。
|
||||
4. 在“景点门票”案例中,半价的条件是“年龄小于等于6”**或者**“年龄大于等于60”,这里的“或者”应该用逻辑运算符\_\_\_\_\_\_\_\_\_\_\_\_\_来表示。
|
||||
5. 在“简单计算器”案例中,需要输入例如 `5+3` 这种格式的数据,那么 `cin >> num1 >> ch >> num2;` 这行代码可以依次读入一个整数、一个\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_(填一种数据类型)和一个整数。
|
||||
6. 在判断字符 `ch` 是否为数字时,我们可以通过表达式\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_将数字字符(如`'5'`)转换为它对应的整数数字(如`5`)。
|
||||
7. 闰年的判断规则是:`year` 能被4整除**并且**不能被100整除,**或者**能被400整除。请写出它的条件表达式:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
|
||||
|
||||
#### **二、 单项选择题**
|
||||
|
||||
( ) 1. “如果一个数是3的倍数,就输出‘Yes’,否则什么也不做。”这个逻辑最适合用哪种结构?
|
||||
A. 一个 `if` 语句结构 B. `if-else` 结构 C. 多个 `if` 结构 D. 顺序结构
|
||||
|
||||
( ) 2. 判断一个字符 `ch` 是否为小写英文字母,正确的条件表达式是?
|
||||
A. `ch >= 'a' || ch <= 'z'` B. `ch > 'a' && ch < 'z'`
|
||||
C. `ch >= 'a' && ch <= 'z'` D. `ch == 'a'`
|
||||
|
||||
( ) 3. 在“简单计算器”案例中,如果想判断用户是否想做减法运算,`if` 的条件应该写成(`ch` 是字符类型变量,储存了运算符,例如`+-*/`)?
|
||||
A. `ch = '-'` B. `ch == "-"` C. `ch == '-'` D. `ch != '-'`
|
||||
|
||||
( ) 4. 在数学中 `70 <= score <= 80` 是正确的,但在C++中这种写法是错误的,因为它会先计算什么?
|
||||
A. `score <= 80` B. `70 <= score` C. `70 <= 80` D. 整个表达式一起计算
|
||||
|
||||
( ) 5. 在“鸡兔同笼”问题中,我们推断出无解的三个条件是“鸡的数量为小数”、“鸡的数量为负数”、“兔的数量为负数”。我们需要判断结果是否无解,那么这三个条件之间应该用什么逻辑运算符连接?
|
||||
A. `&&` (并且) B. `||` (或者) C. `!` (非) D. `==` (等于)
|
||||
|
||||
( ) 6. 在“景点门票”的例子中,景点的票价为50元/人,一个6岁的孩子和一个60岁的老人去买票,根据条件 `age <= 6 || age >= 60`,他们的票价分别是多少?
|
||||
A. 25元 和 50元 B. 50元 和 25元 C. 25元 和 25元 D. 50元 和 50元
|
||||
|
||||
( ) 7. 要判断“一个数 `x` 同时是3和5的倍数”,正确的表达式是?
|
||||
A. `x % 3 == 0 || x % 5 == 0`
|
||||
B. `x % 3 && x % 5 == 0`
|
||||
C. `x % 3 == 0 && x % 5 == 0`
|
||||
D. `x % 15 != 0`
|
||||
|
||||
( ) 8. “输入一个整数,如果是正数,输出‘Positive’;如果是负数,输出‘Negative’;如果是0,输出‘Zero’。” 这个问题最好用什么结构来解决?
|
||||
A. 一个 `if` B. 一个 `if-else` C. 多个独立的 `if` D. `if-else if-else` 结构
|
||||
|
||||
( ) 9. 给出三角形的三条边长 L1、L2、L3 输出判断能否构成三角形。如果三条边长分别是 `L1=3, L2=4, L3=8`,程序判断的结果应该是?
|
||||
A. 可以构成三角形,因为三条边都是正数
|
||||
B. 不可以构成三角形,因为 `L1 + L2` 不大于 `L3`
|
||||
C. 可以构成三角形,因为 `L1 + L3` 大于 `L2`
|
||||
D. 不可以构成三角形,因为三条边不一样长
|
||||
|
||||
( ) 10. 在构建复杂的逻辑表达式时,如果搞不清楚 `&&` 和 `||` 的优先级,最好的习惯是什么?
|
||||
A. 把 `&&` 写在前面 B. 把 `||` 写在前面
|
||||
C. 使用括号 `()` 来明确指定运算顺序 D. 查阅C++手册
|
||||
|
||||
#### **三、 判断题 (对的打“√”,错的打“×”)**
|
||||
|
||||
( ) 1. 解决条件判断问题,可以套用四步解题模板。
|
||||
( ) 2. `if(score >= 70 && <= 80)` 是一个合法的C++判断语句。
|
||||
( ) 3. 多个独立的 `if` 语句可适用于处理几种互不相关的条件。
|
||||
( ) 4. 在“鸡兔同笼”问题中,`if` 语句主要用来进行数学计算,而不是合理性验证。
|
||||
( ) 5. 判断“一个数 `x` 是奇数”的条件是 `x % 2 != 0`。
|
||||
( ) 6. 为了让代码更清晰易读,`if` 和 `else` 后面大括号里的语句应该向内缩进。
|
||||
( ) 7. 在“简单计算器”的例子中,如果输入的是 `5+3`,程序在执行完加法的 `if` 语句后,就不会再去判断后面的减法、乘法、除法的 `if` 语句了。
|
||||
( ) 8. 构成三角形的条件是“任意两边之和大于第三边”,所以三个“大于”条件必须同时满足,应该用 `&&` 连接。
|
||||
( ) 9. 解决条件判断问题的步骤之一是将生活中的语言翻译成计算机能懂的条件表达式。
|
||||
( ) 10. “判断一个英文字符是元音还是辅音”是一个“二选一”问题,适合用 `if-else` 结构。
|
||||
Binary file not shown.
Reference in new issue
Block a user