20260227 085102 Cpp 入门第三课

20260227_085102_CPP_入门第三课.md

第三章:让程序学会判断——分支结构

你好!欢迎来到第三章!在前两章,我们学会了让计算机输入、输出和计算。但程序只会按顺序执行,就像一条直线。如果想让程序根据不同情况做出不同反应,就需要用到分支结构。这一章我们会学习如何让程序“动脑筋”,根据条件决定做什么。就像你在生活中,如果下雨就带伞,如果晴天就去公园,程序也可以这样!


3.1 if语句

3.1.1 if语句程序范例

最简单的判断就是:如果……就……。看看这个程序,它判断你的年龄是否满18岁。

#include <iostream>
using namespace std;

int main() {
    int age;
    cout << "请输入你的年龄:";
    cin >> age;

    if (age >= 18) {
        cout << "你已经成年了!" << endl;
    }

    cout << "程序结束。" << endl;
    return 0;
}

运行结果示例1(输入20):

请输入你的年龄:20
你已经成年了!
程序结束。

运行结果示例2(输入15):

请输入你的年龄:15
程序结束。

3.1.2 if语句的用法

if 语句的格式:

if (条件) {
    // 条件为真时执行的语句
}
  • 条件:通常是一个比较表达式,比如 age >= 18score == 100。条件的结果要么是(true),要么是(false)。
  • 如果条件为真,就执行大括号 {} 里的代码;如果为假,就跳过这些代码,继续执行后面的语句。
  • 如果大括号里只有一条语句,可以省略大括号,但初学者建议都加上,避免出错。
比较运算符
运算符 含义 例子
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

注意:判断是否相等要用两个等号 ==,一个等号 = 是赋值,千万不能搞混!

3.1.3 编程实例讲解

实例1:判断奇偶数

题目:输入一个整数,如果它是偶数,就输出“偶数”。

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;

    if (num % 2 == 0) {   // 能被2整除就是偶数
        cout << num << " 是偶数" << endl;
    }

    return 0;
}
实例2:判断是否及格

题目:输入一门课的成绩(0-100),如果大于等于60,输出“及格”。

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入成绩:";
    cin >> score;

    if (score >= 60) {
        cout << "恭喜,及格了!" << endl;
    }

    return 0;
}

3.1.4 阶段性编程练习

  1. 练习1:输入一个整数,如果它是负数,输出“这是一个负数”。
  2. 练习2:输入一个整数,如果它能被5整除,输出“能被5整除”。
  3. 练习3:输入一个字符,如果它是大写字母(’A’到’Z’),输出“大写字母”。(提示:字符比较可以用 ch >= 'A' && ch <= 'Z',但逻辑运算符还没学,可以先不练,或者用后面知识。)
  4. 练习4:输入两个整数,如果第一个数大于第二个数,输出“第一个数更大”。

3.2 if…else语句

3.2.1 if…else程序范例

if 只能处理条件为真的情况,但如果条件为假也想做点什么,就需要 if...else,就像“如果……就……否则……”。

#include <iostream>
using namespace std;

int main() {
    int age;
    cout << "请输入你的年龄:";
    cin >> age;

    if (age >= 18) {
        cout << "你已经成年了,可以看电影!" << endl;
    } else {
        cout << "你还未成年,需要家长陪同。" << endl;
    }

    return 0;
}

运行示例(输入15):

请输入你的年龄:15
你还未成年,需要家长陪同。

3.2.2 if…else语句的用法

格式:

if (条件) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
  • ifelse 是成对出现的。
  • 条件为真,执行 if 后面的代码块;条件为假,执行 else 后面的代码块。
  • 两者只会执行其中一个。

3.2.3 编程实例讲解

实例3:判断奇偶,输出不同信息
#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;

    if (num % 2 == 0) {
        cout << num << " 是偶数" << endl;
    } else {
        cout << num << " 是奇数" << endl;
    }

    return 0;
}
实例4:判断是否通过考试
#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入成绩:";
    cin >> score;

    if (score >= 60) {
        cout << "通过考试!" << endl;
    } else {
        cout << "未通过,继续努力!" << endl;
    }

    return 0;
}

3.2.4 阶段性编程练习

  1. 练习1:输入一个整数,判断它是否大于0,输出“正数”或“非正数”(包括0和负数)。
  2. 练习2:输入一个年份,判断它是否是闰年。闰年条件:能被4整除但不能被100整除,或者能被400整除。(提示:条件较复杂,可以先留到学了逻辑运算再做,或者直接给出条件。)
  3. 练习3:输入一个整数,判断它是否是7的倍数,输出相应信息。
  4. 练习4:输入两个整数,输出较大的那个数。

3.3 分支的嵌套

3.3.1 分支嵌套程序范例

有时候,我们需要在一个判断里面再做判断,就像“如果下雨,就带伞;如果雨很大,就穿雨衣”。这就是分支嵌套

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入你的成绩:";
    cin >> score;

    if (score >= 60) {
        cout << "及格了!";
        if (score >= 90) {
            cout << "而且成绩优秀!" << endl;
        } else {
            cout << "继续加油!" << endl;
        }
    } else {
        cout << "不及格,要努力了!" << endl;
    }

    return 0;
}

运行示例(输入95):

及格了!而且成绩优秀!

3.3.2 分支嵌套的用法

  • ifelse 的代码块里,可以再放其他的 if...else 语句。
  • 嵌套的层数不要太多,否则代码会变得难读。一般两层就够用了。

注意else 总是和它上面最近的 if 配对。为了避免混乱,一定要用好大括号 {}

3.3.3 编程实例讲解

实例5:根据分数评定等级

题目:输入成绩(0-100),输出等级:
- 90-100:优秀
- 80-89:良好
- 70-79:中等
- 60-69:及格
- 0-59:不及格

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入成绩:";
    cin >> score;

    if (score >= 60) {
        if (score >= 90) {
            cout << "优秀" << endl;
        } else if (score >= 80) {   // 这里用了else if,是多重选择,但也可以嵌套
            cout << "良好" << endl;
        } else if (score >= 70) {
            cout << "中等" << endl;
        } else {
            cout << "及格" << endl;
        }
    } else {
        cout << "不及格" << endl;
    }

    return 0;
}

这个例子其实混合了嵌套和 else if,我们会在下一节正式学习多重选择。

实例6:判断三个数中的最大值
#include <iostream>
using namespace std;

int main() {
    int a, b, c;
    cout << "请输入三个整数:";
    cin >> a >> b >> c;

    if (a >= b) {
        if (a >= c) {
            cout << "最大值是:" << a << endl;
        } else {
            cout << "最大值是:" << c << endl;
        }
    } else {
        if (b >= c) {
            cout << "最大值是:" << b << endl;
        } else {
            cout << "最大值是:" << c << endl;
        }
    }

    return 0;
}

3.3.4 阶段性编程练习

  1. 练习1:输入三个整数,输出最小值。(参考上面的最大值)
  2. 练习2:输入一个年份,判断它是否是闰年,并输出对应的信息。如果是闰年,再判断它是否是世纪闰年(能被400整除)。
  3. 练习3:输入一个整数x,求分段函数的值:
    - 当 x > 0 时,y = 2x + 1
    - 当 x = 0 时,y = 0
    - 当 x < 0 时,y = x - 1
    输出y的值。
  4. 练习4:模拟自动售货机:输入金额(整数),如果金额大于等于商品价格(比如5元),则输出“购买成功”,并找零;否则输出“金额不足”。(可以嵌套判断,比如金额足够时再判断是否恰好等值)

3.4 多重选择分支

3.4.1 多重选择分支程序范例

当有多个条件需要依次判断时,可以用 if...else if...else 结构。就像成绩分等级一样。

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入成绩:";
    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;
}

3.4.2 多重选择分支的用法

格式:

if (条件1) {
    // 条件1为真执行
} else if (条件2) {
    // 条件1为假且条件2为真执行
} else if (条件3) {
    // 条件1、2为假且条件3为真执行
} else {
    // 所有条件都为假执行
}
  • 程序从上往下判断,遇到第一个为真的条件,就执行对应的代码块,然后跳出整个 if...else if...else 结构。
  • 最后的 else 是可选的,表示所有条件都不满足时做什么。

3.4.3 编程实例讲解

实例7:根据月份判断季节

题目:输入月份(1-12),输出对应的季节:
- 3-5月:春季
- 6-8月:夏季
- 9-11月:秋季
- 12,1,2月:冬季

#include <iostream>
using namespace std;

int main() {
    int month;
    cout << "请输入月份:";
    cin >> month;

    if (month >= 3 && month <= 5) {
        cout << "春季" << endl;
    } else if (month >= 6 && month <= 8) {
        cout << "夏季" << endl;
    } else if (month >= 9 && month <= 11) {
        cout << "秋季" << endl;
    } else if (month == 12 || month == 1 || month == 2) {
        cout << "冬季" << endl;
    } else {
        cout << "月份输入错误" << endl;
    }

    return 0;
}
实例8:简单的计算器(加减乘除)
#include <iostream>
using namespace std;

int main() {
    double a, b;
    char op;   // 运算符
    cout << "请输入表达式(如 3 + 5):";
    cin >> a >> op >> b;

    if (op == '+') {
        cout << a + b << endl;
    } else if (op == '-') {
        cout << a - b << endl;
    } else if (op == '*') {
        cout << a * b << endl;
    } else if (op == '/') {
        if (b != 0) {
            cout << a / b << endl;
        } else {
            cout << "除数不能为0" << endl;
        }
    } else {
        cout << "不支持的运算符" << endl;
    }

    return 0;
}

3.4.4 阶段性编程练习

  1. 练习1:输入一个整数,判断它是正数、负数还是零。
  2. 练习2:输入一个0-6的数字,输出对应的星期几(0代表星期日,1代表星期一,以此类推)。
  3. 练习3:输入一个年份和月份,输出该月的天数(考虑闰年2月)。
  4. 练习4:编写一个程序,根据用户输入的消费金额,计算折扣后的应付金额:
    - 满100元打9折
    - 满200元打8折
    - 满300元打7折
    - 其他情况无折扣

3.5 switch语句

3.5.1 switch语句程序范例

当判断的条件是整型字符型固定值时,用 switch 语句更清晰。比如根据数字输出星期几。

#include <iostream>
using namespace std;

int main() {
    int day;
    cout << "请输入星期几(1-7):";
    cin >> day;

    switch (day) {
        case 1:
            cout << "星期一" << endl;
            break;
        case 2:
            cout << "星期二" << endl;
            break;
        case 3:
            cout << "星期三" << endl;
            break;
        case 4:
            cout << "星期四" << endl;
            break;
        case 5:
            cout << "星期五" << endl;
            break;
        case 6:
            cout << "星期六" << endl;
            break;
        case 7:
            cout << "星期日" << endl;
            break;
        default:
            cout << "输入错误,请输入1-7之间的数字" << endl;
    }

    return 0;
}

3.5.2 switch语句的用法

格式:

switch (表达式) {
    case 常量1:
        语句;
        break;
    case 常量2:
        语句;
        break;
    ...
    default:
        语句;
}
  • 表达式的结果必须是整型(int、char等),不能是浮点型或字符串。
  • case 常量:常量必须是固定的值,不能是变量。
  • 程序会找到与表达式值相等的 case,然后从那里开始执行,直到遇到 breakswitch 结束。
  • break 用来跳出 switch,如果不写 break,会继续执行下一个 case 的代码(这叫做“穿透”)。
  • default 是可选的,当所有 case 都不匹配时执行。

3.5.3 编程实例讲解

实例9:根据成绩等级给出评语
#include <iostream>
using namespace std;

int main() {
    char grade;
    cout << "请输入成绩等级(A、B、C、D):";
    cin >> grade;

    switch (grade) {
        case 'A':
            cout << "优秀,继续努力!" << endl;
            break;
        case 'B':
            cout << "良好,再接再厉!" << endl;
            break;
        case 'C':
            cout << "中等,要加油!" << endl;
            break;
        case 'D':
            cout << "及格边缘,需加强!" << endl;
            break;
        default:
            cout << "无效等级" << endl;
    }

    return 0;
}
实例10:简易四则运算(用switch)
#include <iostream>
using namespace std;

int main() {
    double a, b;
    char op;
    cout << "请输入表达式(如 3+5):";
    cin >> a >> op >> b;

    switch (op) {
        case '+':
            cout << a + b << endl;
            break;
        case '-':
            cout << a - b << endl;
            break;
        case '*':
            cout << a * b << endl;
            break;
        case '/':
            if (b != 0)
                cout << a / b << endl;
            else
                cout << "除数不能为0" << endl;
            break;
        default:
            cout << "不支持的运算符" << endl;
    }

    return 0;
}

3.5.4 阶段性编程练习

  1. 练习1:输入一个数字1-12,输出对应的月份英文名(January, February…)。
  2. 练习2:输入一个字符,判断它是元音字母(a, e, i, o, u,包括大小写)还是辅音字母。(提示:多个case可以共用一段代码,比如 case 'a': case 'e': ...
  3. 练习3:模拟一个简单的菜单:
    - 输入1:显示“开始游戏”
    - 输入2:显示“加载存档”
    - 输入3:显示“退出游戏”
    - 其他:显示“无效选项”
  4. 练习4:输入两个整数和一个运算符(+、-、*、/、%),用switch完成运算。

3.6 逻辑运算

3.6.1 逻辑运算程序范例

有时候一个条件需要多个判断组合,比如“成绩在80到90之间”需要同时满足大于等于80且小于等于90。这就需要逻辑运算符。

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入成绩:";
    cin >> score;

    if (score >= 80 && score <= 90) {   // 并且
        cout << "成绩良好" << endl;
    }

    if (score < 60 || score > 100) {    // 或者
        cout << "成绩异常" << endl;
    }

    if (!(score >= 60)) {                // 非
        cout << "不及格" << endl;
    }

    return 0;
}

3.6.2 逻辑运算的用法

运算符 名称 含义 例子
&& 两边都为真,结果才为真 a>0 && a<10
|| 两边至少一个为真,结果为真 a==0 || b==0
! 取反,真变假,假变真 !(a>b)

优先级! 最高,然后是 &&,最后是 ||。可以用括号改变顺序。

真值表(简单理解)
  • true && truetrue
  • true && falsefalse
  • false && truefalse
  • false && falsefalse
  • true || truetrue
  • true || falsetrue
  • false || truetrue
  • false || falsefalse
  • !truefalse
  • !falsetrue

3.6.3 编程实例讲解

实例11:判断闰年(用逻辑运算)
#include <iostream>
using namespace std;

int main() {
    int year;
    cout << "请输入年份:";
    cin >> year;

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

    return 0;
}
实例12:判断三角形类型

题目:输入三条边长,判断是否能构成三角形,如果能,是等边、等腰还是普通三角形。

#include <iostream>
using namespace std;

int main() {
    double a, b, c;
    cout << "请输入三条边长:";
    cin >> a >> b >> c;

    // 三角形条件:任意两边之和大于第三边
    if (a + b > c && a + c > b && b + c > a) {
        if (a == b && b == c) {
            cout << "等边三角形" << endl;
        } else if (a == b || a == c || b == c) {
            cout << "等腰三角形" << endl;
        } else {
            cout << "普通三角形" << endl;
        }
    } else {
        cout << "不能构成三角形" << endl;
    }

    return 0;
}

3.6.4 阶段性编程练习

  1. 练习1:输入一个整数,判断它是否同时满足:能被3整除,且能被5整除。
  2. 练习2:输入三个整数,判断它们是否都相等。
  3. 练习3:输入一个字符,判断它是否是大写字母或小写字母。
  4. 练习4:输入一个年份和月份,判断该月有多少天(使用逻辑运算处理闰年2月)。

3.7 第3章编程作业

恭喜你学完了分支结构!来挑战几个综合题目吧。

作业1:简单的猜拳游戏

编写程序,让用户输入剪刀(0)、石头(1)、布(2),电脑随机出拳(用 rand() % 3),判断胜负并输出结果。提示:需要随机数种子 srand(time(0))

作业2:个人所得税计算器

输入月收入(整数),计算应缴个人所得税。假设税率如下:
- 不超过3000元的部分,税率3%
- 超过3000至12000元的部分,税率10%
- 超过12000至25000元的部分,税率20%
- 超过25000元的部分,税率25%

输出应缴税额(保留两位小数)。比如月收入10000,计算方法是:30003% + (10000-3000)10% = 90 + 700 = 790元。

作业3:日期合法性判断

输入年、月、日,判断这个日期是否合法(考虑闰年2月天数)。

作业4:求解一元二次方程

输入一元二次方程的系数 a, b, c(a≠0),计算判别式 Δ = b² - 4ac,根据Δ的情况输出根:

  • Δ > 0:两个不同的实根
  • Δ = 0:两个相等的实根
  • Δ < 0:无实根

输出根的值(如果有),保留两位小数。


好了,第三章的内容就到这里!你已经学会了让程序做判断。加油!