C++ 竞赛入门

7-控制结构

控制结构

本节学会什么

  • 根据条件选择执行不同的代码
  • 使用 ifif ... elseelse if
  • {} 写清每个分支包含的语句

为什么需要它

前面的程序总是从上到下执行同样的步骤,但题目常常会说“如果满足某个条件,就这样做;否则那样做”。判断成绩是否及格、比较两个数的大小、按年龄收费,都需要程序作出选择。

最小可运行示例

读入一个成绩,输出是否及格:

#include <iostream>

int main() {
    int score;
    std::cin >> score;

    if (score >= 60) {
        std::cout << "PASS\n";
    } else {
        std::cout << "FAIL\n";
    }
    return 0;
}

输入 75 时输出 PASS;输入 59 时输出 FAILscore >= 60 的结果只有真或假:真时执行第一个代码块,假时执行 else 后的代码块。

流程图:读入 score 后判断是否大于等于 60,是则输出 PASS,否则输出 FAIL

关键过程与易错点

  • 条件要放在 () 中。比较相等使用 ==,单个 = 是赋值。
  • if 只控制紧跟着的一条语句。即使目前只有一条语句,也建议写 {},以后增加代码不会改变原来的判断范围。
  • 多个互斥等级可从严格到宽松写成 else if
if (score >= 90) {
    std::cout << "excellent\n";
} else if (score >= 60) {
    std::cout << "pass\n";
} else {
    std::cout << "fail\n";
}

一旦某个分支执行,整条 if ... else if ... else 就结束了。因此范围重叠时,顺序很重要:上面的 score >= 90 必须写在 score >= 60 前面。

动手检查

读入一个整数 n。若它是偶数,输出 even,否则输出 odd。提示:偶数除以 2 的余数是 0,判断应写成 n % 2 == 0

再把程序改成判断一个年份是否能被 4 整除,先只处理这一条规则,分别测试 20242025

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5710:数的性质 题解 用多个条件表达式完成分类判断。
巩固 洛谷 P5711:闰年判断 题解 组合整除条件,注意 && 与 `
挑战 洛谷 P5713:洛谷团队系统 题解 比较两个方案的代价,并处理相等时的分支。