GESP 一级 第 07 讲:分支结构

本讲定位程序从这一讲开始会”做选择”。前六讲写的程序都是一条道走到黑,从这一讲起,程序能根据条件走不同的路。官方大纲把 ifif-elseswitch 全部点名,真题里分支是编程题的标配——一级两道编程题,至少有一道要用 if。本讲有三个必考陷阱:if 后面多写分号else 的配对规则switch 漏写 break,三个都是”不报错但结果全错”的类型。

对应官方大纲:一级知识块 3「结构化程序设计」中的分支结构;知识块 4「程序的基本语句」中的 if 语句、switch 语句、复合语句。

前置知识:一级第 06 讲(关系与逻辑运算——if 括号里写什么全靠它)、第 02 讲(复合语句 { })。

代码说明:本讲所有代码均已用 g++ 11.5(-std=c++11)编译运行验证,输出结果即为文中标注结果。


1. 先看一道”看起来对、实际全错”的题

int x = 3;
if (x > 5);
    cout << "big" << endl;

问:屏幕上会输出什么?

学生几乎都答”什么也不输出”,因为 3 不大于 5。

正确答案:输出 big

罪魁祸首是 if (x > 5) 后面那个分号。 那个分号本身就构成了一条空语句if 管住的是那条空语句;而 cout 那行根本不在 if 里面,属于顺序执行的下一条语句,所以无论如何都会执行。

这是一级分支题的头号陷阱,本讲第 2 节就会讲清楚它的原理。


2. if:单分支

2.1 语法

if (条件) 语句;

条件成立就执行那条语句,不成立就跳过。

#include<iostream>
using namespace std;

int main() {
    int score = 85;
    if (score >= 60) cout << "pass" << endl;
    cout << "end" << endl;
    return 0;
}

输出:

pass
end

2.2 管多条语句:用花括号(复合语句登场)

if 后面只能管住一条语句。 想让它管住多条,必须用 { } 打包成复合语句——这就是一级第 02 讲埋下的伏笔。