跳转至

分支结构

分支结构,也称选择结构。根据条件,决定执行哪一部分代码。

if 语句

if (条件表达式) {
    // 条件成立时,执行这里
}

条件成立,就执行大括号里的语句;不成立,就跳过。

int x;
cin >> x;

if (x > 0) {
    cout << "正数";
}

输入正数,就输出“正数”;输入零或负数,这段代码就不输出。

else 语句

if (条件表达式) {
    // 条件成立,执行这里
}
else {
    // 条件不成立,执行这里
}

两条分支,只会执行其中一条。else 后面不用写条件。

判断 x 是否为完全平方数

这里先处理 0 <= x <= 1000000000 的整数。

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int x;
    cin >> x;

    int t = sqrt(x); // 开平方,再转成int,舍去小数部分
    if (t * t == x) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }

    return 0;
}

例如,x = 17,开平方约为 4.123,存进 int 后得到 4。

4 的平方是 16,不等于 17,所以 17 不是完全平方数。

判断 n 是否为闰年

四年一闰,百年不闰,四百年再闰。

也就是:能被 4 整除但不能被 100 整除,或者能被 400 整除。

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;

    if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
        cout << 'Y';
    }
    else {
        cout << 'N';
    }

    return 0;
}

&& 表示“并且”,|| 表示“或者”,后面会单独讲。

2000 年是闰年,1900 年不是,2024 年是。

else if 语句

if (条件表达式1) {
    // ...
}
else if (条件表达式2) {
    // ...
}
else if (条件表达式3) {
    // ...
}
else {
    // 最后漏到这里,接住
}

从上往下判断,遇到第一个成立的条件,就执行对应分支,后面的分支不再判断。

前面都不成立,才执行最后的 else。不需要兜底时,也可以不写 else。

判断正数、负数、零

int x;
cin >> x;

if (x > 0) {
    cout << "正数";
}
else if (x < 0) {
    cout << "负数";
}
else {
    cout << "零";
}

注意:几个独立的 if,会分别判断;连在一起的 if、else if、else,只执行其中一条分支。

分支嵌套

分支结构里面,还可以再放分支结构,叫作分支嵌套。

if (条件表达式1) {
    if (条件表达式2) {
        // ...
    }
    else {
        // ...
    }
}
else {
    // ...
}

先判断外层条件,进入对应分支后,再判断里面的条件。

注意缩进。

外面一层,里面一层,要能一眼看清楚。

常见错误

if 后面,不要随手加分号

if (x > 0); // 这里多了一个分号,if控制的就是一条空语句
{
    cout << x; // 这里不再受if控制
}

大括号放在同一行,也一样是错的:

if (x > 0); { // 错误:if控制的就是一条空语句
    cout << x; // 这里不再受if控制
}

大括号,不要随手省略

不写大括号,if 或 else 只控制紧接着的一条语句。

刚开始,统一把大括号写完整。

没有大括号分组时,else 与前面最近的、尚未配对的 if 配对,不能只看缩进。

else 后面,不写 ()

if (x > 0) {
    cout << "正数";
}
else () { // 错误:else后面不能写括号
    cout << "非正数";
}

else 表示前面的条件不成立,不需要再写条件。

如果还要判断条件,就写 else if (条件表达式)。

判断相等,用 ==

= 是赋值,== 才是判断相等,别写混了。