顺序执行的程序毫无威力,真正厉害的程序会判断重复:成绩够不够及格、文件读没读完、任务要不要再来一次。本文带你掌握 C 的分支语句与三种循环,并用一个经典例子收尾。

1. if / else if / else 分支

if 语句根据条件真假选择执行路径,条件可以是任意能产生 0 或 1 的表达式:

#include <stdio.h>

int main(void) {
    int score = 85;
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    return 0;
}

注意:条件判断从前往后,命中一个分支后其余不再判断;如果只有一条语句,可以省略花括号,但建议永远写上,避免后来加语句时出错。

2. switch 多路分支

当判断的是"某个整数等于哪个值"时,switch 比一长串 if-else 更清晰:

#include <stdio.h>

int main(void) {
    int day = 3;
    switch (day) {
        case 1: printf("星期一\n"); break;
        case 2: printf("星期二\n"); break;
        case 3: printf("星期三\n"); break;
        default: printf("其他\n"); break;
    }
    return 0;
}

break 千万不能漏——漏掉后程序会"穿透"继续执行下一个 case,这是 switch 最大的坑。

3. while 与 do-while 循环

while 先判断后执行,可能一次都不执行;do-while 先执行一次再判断,至少执行一次:

#include <stdio.h>

int main(void) {
    int n = 1;
    while (n <= 5) {           // 先判断
        printf("%d ", n);
        n++;
    }
    printf("\n");

    int m = 1;
    do {                       // 先执行一次
        printf("%d ", m);
        m++;
    } while (m <= 5);
    printf("\n");
    return 0;
}

两者都能实现"直到满足条件才停"的逻辑,区别只在于第一轮是否无条件执行。

4. for 循环

需要"数数"的循环,for 最合适:初始化、条件、步进三部分写在一行,结构一目了然:

#include <stdio.h>

int main(void) {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    printf("1+2+...+100 = %d\n", sum);  // 5050
    return 0;
}

C99 起可以在 for 的初始化部分直接声明变量,作用域仅限于循环体内。

5. break 与 continue

break 立刻跳出整个循环;continue 跳过本次循环的剩余语句,直接进入下一轮。写一个"只打印偶数"的例子:

#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 != 0) {
            continue;   // 奇数直接跳过
        }
        printf("%d ", i);
    }
    printf("\n");

    for (int i = 1; i <= 10; i++) {
        if (i == 6) {
            break;      // 到 6 就停
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

6. 嵌套循环实战:九九乘法表

外层循环控制行,内层循环控制列,两个循环嵌套即可打印乘法表——这是检验循环理解力的经典题目:

#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d*%d=%-2d ", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}

%-2d 表示左对齐、占 2 个字符宽,让表格整齐。试着把内层条件改成 j <= 9,看看会发生什么。

💡 学习建议:循环是 C 的高频考点。建议手写三个程序:猜数字游戏、判断素数、打印菱形图案,每个都用 while 和 for 各写一遍。