跳到主要内容

分支结构

本课目标

掌握逻辑条件表达式的用法,学会用分支结构实现程序的“决策功能”。

一、引言

小明的妈妈对小明爸爸说:

你去买 10 个馒头,如果有包子卖就买 两个,如果看见西瓜就买 1 个。

那么小明的爸爸可能会买几个馒头、几个包子、几个西瓜?

二、逻辑条件表达式:程序的“判断标准”

逻辑条件表达式会计算出一个布尔值bool),只有两种结果:true(真)或false(假)。

1. 布尔类型(bool

  • true:代表“成立”(如“5 > 3”是真的);
  • false:代表“不成立”(如“5 < 3”是假的)。

2. 比较运算符(用于比较大小/相等)

运算符含义示例结果
==等于5 == 3false
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
< =小于等于5 < = 3false

示例:

int a = 5, b = 3;

a > b // true (真)
a == b // false (假)
a != b // true (真)
a <= 5 // true (真)

3. 逻辑运算符(用于组合多个条件)

运算符名称规则示例结果
&&逻辑与两边都为true,结果才true(5>3) && (10 < 20)true
``逻辑或只要有一边为true,结果就true
!逻辑非取反(truefalse,反之亦然)!(5>3)false

真值表:

ABA && BA || B!A

示例:

#include  <bits/stdc++.h>
using namespace std;

int main() {
int score = 85;
bool isPass = (score >= 60); // true
cout<<isPass<<endl;

int age = 16;
bool canVote = (age >= 18); // false
cout<<canVote<<endl;

// 组合条件
bool isExcellent = (score >= 90) && (age < 18); // false
bool isTeenager = (age >= 13) && (age <= 19); // true

cout<<isExcellent<<endl;
cout<<isTeenager<<endl;

return 0;
}

三、分支结构:程序的“决策流程”

分支结构根据条件的真假,选择执行不同的代码块。C++中最常用的分支语句是**if语句**。

1. 最简单的if语句(单分支)

当条件满足时,执行指定代码;否则,跳过。
语法

if (条件表达式) {
// 条件为true时执行的代码
}

示例:判断一个数是否为正数

#include  <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num; // 输入一个数

if (num > 0) { // 如果num大于0
cout << "这是一个正数" << endl;
}

return 0;
}

2. 带elseif语句(双分支)

当条件不满足时,执行另一段代码。
语法

if (条件表达式) {
// 条件为true时执行的代码
} else {
// 条件为false时执行的代码
}

示例:判断奇偶数

#include  <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num;

if (num % 2 == 0) { // 能被2整除(余数为0)
cout << "这是一个偶数" << endl;
} else {
cout << "这是一个奇数" << endl;
}

return 0;
}

3. 多分支else if语句

处理多个条件的分支(如成绩分级)。
语法

if (条件1) {
// 条件1为true时执行的代码
} else if (条件2) {
// 条件1为false,条件2为true时执行的代码
} else {
// 所有条件都不满足时执行的代码
}

####示例####:

1、根据成绩划分等级

#include  <bits/stdc++.h>
using namespace std;
int main() {
double score;
cin >> score;

if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 80) {
cout << "良好" << endl;
} else if (score >= 70) {
cout << "中等" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}

return 0;
}

4. 嵌套if语句(复杂条件)

ifelse内部再使用if语句,处理更复杂的逻辑。

####示例

  1. 判断一个数是否在1~100之间
#include  <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num;

if (num > 0) { // 先判断是否为正数
if (num < 100) { // 再判断是否小于100
cout << "这个数在1到99之间" << endl;
} else {
cout << "这个数大于等于100" << endl;
}
} else {
cout << "这个数小于等于0" << endl;
}

return 0;
}
  1. 判断闰年的代码
#include <bits/stdc++.h>
using namespace std;

int main() {
int year;
cin >> year;

if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
cout << year << "是闰年" << endl;
} else {
cout << year << "不是闰年" << endl;
}
} else {
cout << year << "是闰年" << endl;
}
} else {
cout << year << "不是闰年" << endl;
}

return 0;
}

四、实战练习

练习1:三角形类型判断

思考:

有三条线段,长度分别为a、b、c。请判断它们是否能构成三角形,并给出三角形的类型。

(三角形的类型有:普通三角形、等腰三角形、等边三角形、直角三角形)。

练习2:简单计算器

#include <bits/stdc++.h>
using namespace std;

int main() {
char op;
double num1, num2;

cin >> num1 >> op >> num2;

if (op == '+') {
cout << num1 + num2 << endl;
} else if (op == '-') {
cout << num1 - num2 << endl;
} else if (op == '*') {
cout << num1 * num2 << endl;
} else if (op == '/') {
if (num2 != 0) {
cout << num1 / num2 << endl;
} else {
cout << "错误:除数不能为0" << endl;
}
} else {
cout << "无效的操作符" << endl;
}

return 0;
}

五、常见错误与注意事项

  1. 混淆=和===是赋值,==是比较

    // 错误
    if (a = 5) { ... } //a 被赋值为5,条件表达式始终为true

    // 正确
    if (a == 5) { ... }
  2. 忘记花括号:如果代码块有多条语句,必须使用花括号

    // 错误 - 只有cout语句受if控制
    if (score >= 60)
    cout << "及格" << endl;
    cout << "恭喜!" << endl;

    // 正确
    if (score >= 60) {
    cout << "及格" << endl;
    cout << "恭喜!" << endl;
    }
  3. 逻辑运算符优先级! > && > ||

    // 建议使用括号明确优先级
    if ((a > 0 && b > 0) || c > 0)
  4. 缩进很重要
    C++中缩进不影响程序运行,但良好的缩进能让代码更易读(建议用Tab或空格缩进)。

  5. 覆盖所有分支
    else ifelse确保所有可能的情况都被处理(避免“意外情况”)。

六、思考与练习(动手试一试!)

  1. 输入一个整数,判断它是否为3的倍数(提示:用%运算符,即num % 3 == 0)。
  2. 输入三个整数,找出其中最大的数(提示:用多个if语句比较)。
  3. 输入一个年份,判断是否为闰年(闰年规则:能被4整除但不能被100整除,或能被400整除)。

六、分支结构练习题

  1. 【深基2.习6】Apples Prologue / 苹果和虫子
  2. 【深基3.例2】数的性质
  3. 【深基3.例3】闰年判断
  4. 【深基3.例4】Apples
  5. 【深基3.例7】肥胖问题
  6. 【深基3.例8】三位数排序
  7. 【深基3.例9】月份天数
  8. [NOIP 2004 普及组] 不高兴的津津
  9. 【深基3.习8】三角形分类
  10. 小玉家的电费
  11. [NOIP 2016 普及组] 买铅笔

*学习笔记

暂没有学习笔记,快来抢first blood !