火龙信奥
  • 分享
  • 课程
  • 题库
  • CSES HARD
    • GESP
    • CSP
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • e课堂
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

第 8 课《分支结构》

作者: 作者的头像   huolong , 时间:2026-09-07 14:04:18 , 所有人可见, 阅读  2

第 8 课:分支结构

本课学习目标: 1. 掌握 if 语句的基本语法,理解条件成立时执行、不成立时跳过。 2. 掌握 if-else 二选一结构及多分支 else if 的阶梯判断顺序。 3. 明确大括号 {} 在控制多条语句时的关键作用(没有大括号时,if 只管紧跟的第一条语句)。 4. 了解 switch 分支语句及 break 缺失导致的“程序贯穿”现象。 5. 认识简单三目运算(条件 ? 表达式1 : 表达式2)。


一、 什么是分支结构?

生活中的逻辑:“如果下雨,就带伞;否则,不带伞。” 在 C++ 中,这种根据不同条件选择不同执行路径的机制就叫做分支结构。


二、 if 与 if-else 语句

1. 单分支 if 语句

  • 基本格式: cpp if (条件) { // 条件成立时执行的代码块 }
  • 特点:条件成立就执行大括号里的代码;如果条件不成立,整个 if 块直接被跳过,什么都不做。

2. 双分支 if-else 语句(二选一)

  • 基本格式: cpp if (条件) { // 条件成立时执行 } else { // 条件不成立时执行 }
  • 经典应用(判断奇偶数): cpp int n; cin >> n; if (n % 2 == 0) { cout << "even"; // 偶数分支 } else { cout << "odd"; // 奇数分支 }

    💡 if-else 的两个分支绝对不会同时执行,必定二选一。


三、 多分支 else if(多路选择)

当情况不止两种(比如判断正数、负数、零),我们需要使用 else if。

int n;
cin >> n;
if (n > 0) {
    cout << "positive";
} else if (n < 0) {
    cout << "negative";
} else {
    cout << "zero";
}

⚠️ 多分支核心考点:顺序至关重要! * 程序会从上到下依次判断。 * 一旦某个分支成立并执行了,后面的 else if 和 else 会被直接跳过,再也不看了! * 避坑指南:写分数段判断(如优秀 >=90,及格 >=60)时,必须把更严格、更高的标准写在最前面。如果写成 if (score >= 60) cout<<"及格"; else if (score >= 90) ...,那么考 95 分的人在第一关 >=60 就会被截胡,错判成“及格”。


四、 🚨 避坑指南:大括号 {} 的生死作用

在 C++ 中,如果没有写大括号 {},if 或 else 默认只控制紧跟在它后面的【唯一的一条语句】!

错误示范:

int n = -5;
if (n > 0)
    cout << "A";
    cout << "B"; // ⚠️ 这行代码不受 if 控管!无论 n 是否大于 0,它都会无条件执行!
  • 如果输入 -5,屏幕上依然会打印出 B。
  • 规范建议:不论分支里面有几条语句,养成习惯强制加放大括号 {},能避免 80% 的粗心大意失分。

五、 switch 语句与 break 的“贯穿”现象

除了 if,C++ 还提供了 switch 用于多分支整数/字符匹配。

int d;
cin >> d;
switch (d) {
    case 0:
        cout << "星期日";
        break; // 必须有 break!
    case 1:
        cout << "星期一";
        break;
    default:
        cout << "其他";
        break;
}

⚠️ 核心考点:没有写 break 会怎么样? 如果某个 case 匹配成功,但后面忘记写 break;,程序不会停下来,而是会继续顺流而下,执行后面所有 case 的代码!这种现象在专业上叫“程序贯穿(Fall-through)”。


六、 GESP 一级真题与例题精讲

练一练 1:多分支执行顺序

【题目】 下面程序输入 21 后,输出是( )。

int N;
cin >> N;
if (N % 3 == 0)
    cout << "能被3整除";
else if (N % 7 == 0)
    cout << "能被7整除";
else
    cout << "不能被3和7整除";

A. 能被3整除
B. 能被7整除
C. 不能被3和7整除
D. 没有输出

正确答案:A 名师解析: 输入 21。先看第一个条件 21 % 3 == 0,成立! 于是程序打印出“能被3整除”。因为这是 else if 阶梯分支,第一个满足后,后面的 N % 7 == 0 直接被忽略不看了。


练一练 2:没有大括号的控制范围

【题目】 下面程序输入 -5 后,输出是( )。

int n;
cin >> n;
if (n > 0)
    cout << "A";
cout << "B";

A. A
B. B
C. AB
D. 无输出

正确答案:B 名师解析: 因为 if 后面没有加大括号 {},它生且只生控管紧跟它的第一条语句 cout << "A";。第二条语句 cout << "B"; 是独立于 if 之外的。输入 -5 时,n > 0 不成立,跳过 A,但紧接着无条件执行并输出 B。


练一练 3:switch 语句贯穿陷阱

【题目】 下面程序输入 1 后,输出是( )。

int x;
cin >> x;
switch (x) {
    case 1:
        cout << "A";
    case 2:
        cout << "B";
        break;
    default:
        cout << "C";
        break;
}

A. A
B. AB
C. ABC
D. B

正确答案:B 名师解析: 输入 x = 1,精准匹配到 case 1:,打印出 A。但是!仔细看 case 1 后面没有写 break!程序发生“贯穿”,继续向下执行 case 2 的内容,打印出 B,直到遇到 case 2 的 break 才停下。所以最终输出 AB。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

关于火龙

  • 关于我们
  • 学员获奖
  • 预约试听
  • ACM课程
  • CSP课程
  • 学习指南

帮助中心

  • 用户协议
  • 打字练习 HOT
  • 在线画图
  • DevC++下载
  • CSP报名
  • GESP官网

推荐课程

  • C++零基础入门(可试看)
  • C++进阶提升
  • GESP考级辅导
  • GESP打卡
  • CSP-J/S打卡

公众号

火龙信奥公众号二维码

© 2017-2026 义乌市睿码科技有限公司版权所有 浙ICP备2021013995号

火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码