本讲定位:程序从这一讲开始会”做选择”。前六讲写的程序都是一条道走到黑,从这一讲起,程序能根据条件走不同的路。官方大纲把
if、if-else、switch全部点名,真题里分支是编程题的标配——一级两道编程题,至少有一道要用if。本讲有三个必考陷阱:if后面多写分号、else的配对规则、switch漏写break,三个都是”不报错但结果全错”的类型。对应官方大纲:一级知识块 3「结构化程序设计」中的分支结构;知识块 4「程序的基本语句」中的
if语句、switch语句、复合语句。前置知识:一级第 06 讲(关系与逻辑运算——
if括号里写什么全靠它)、第 02 讲(复合语句{ })。代码说明:本讲所有代码均已用 g++ 11.5(
-std=c++11)编译运行验证,输出结果即为文中标注结果。
int x = 3;
if (x > 5);
cout << "big" << endl;
问:屏幕上会输出什么?
学生几乎都答”什么也不输出”,因为 3 不大于 5。
正确答案:输出
big。
罪魁祸首是 if (x > 5) 后面那个分号。 那个分号本身就构成了一条空语句,if 管住的是那条空语句;而 cout 那行根本不在 if 里面,属于顺序执行的下一条语句,所以无论如何都会执行。
这是一级分支题的头号陷阱,本讲第 2 节就会讲清楚它的原理。
if:单分支if (条件) 语句;
条件成立就执行那条语句,不成立就跳过。
#include<iostream>
using namespace std;
int main() {
int score = 85;
if (score >= 60) cout << "pass" << endl;
cout << "end" << endl;
return 0;
}
输出:
pass
end
if 后面只能管住一条语句。 想让它管住多条,必须用 { } 打包成复合语句——这就是一级第 02 讲埋下的伏笔。