← C 语言 学习路线(共 8 章)

第 3 章 运算符与流程控制

red wenzi · 2026-09-15 · 编程语言 · C 语言 · 📖 预计阅读 7 分钟 · 共 2 道练习
🎯 本章你会学到:if / switch / 三种循环,以及 C 里最容易踩的运算符坑。建议边读边敲,每节练习先自己做,再展开答案对照。

流程控制本身不难,难的是运算符细节:整数除法、===、短路求值的副作用。这一章把两块一起过。

if 与逻辑运算

判断闰年
#include <stdbool.h>
#include <stdio.h>

static bool is_leap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
}

int main(void) {
    int y = 0;
    if (scanf("%d", &y) != 1) {
        return 1;
    }
    printf("%d is %s\n", y, is_leap(y) ? "leap" : "common");
    return 0;
}
输入
2000
运行结果
2000 is leap

输入 2000 输出 2000 is leap&&|| 是短路求值:左边已能决定结果时右边不执行。这既省时间,也意味着别把副作用(++、函数调用)塞进条件里。

for 与 while

for 与 while
#include <stdio.h>

int main(void) {
    int n = 0;
    if (scanf("%d", &n) != 1) {
        return 1;
    }

    long long sum = 0;
    for (int i = 1; i <= n; ++i) {
        sum += i;
    }
    printf("sum=%lld\n", sum);

    int i = 0;
    while (i < 3) {
        printf("loop %d\n", i);
        ++i;
    }
    return 0;
}
输入
100
运行结果
sum=5050
loop 0
loop 1
loop 2

输入 100 会先输出 sum=5050,再输出三行 loop 0..2。次数明确用 for,条件明确用 while,至少要执行一次用 do-while

⚠️ 易错点 if (x = 5) 永远为真:把 == 写成 = 是 C 系语言第一坑。开了 -Wall 编译器会警告,见到就必须改。
⚠️ 易错点 switch 的每个 case 末尾要 break,否则会贯穿执行下一个分支;在 case 里定义变量用花括号圈出作用域。

✍️ 本节练习

3.1必做奇偶判断

读入一个整数 n,偶数输出 even,奇数输出 odd

输入 一个整数 n。

输出 evenodd

样例输入
7
样例输出
odd

💡 提示 n % 2 == 0 判断偶数。

✅ 查看参考答案与解析
#include <stdio.h>

int main(void) {
    int n = 0;
    if (scanf("%d", &n) != 1) {
        return 1;
    }
    if (n % 2 == 0) {
        printf("even\n");
    } else {
        printf("odd\n");
    }
    return 0;
}

解析 负数同样适用:-7 % 2 得 -1,不等于 0,所以判为奇数。

3.2挑战偶数求和

读入 n,输出 2..n 之间所有偶数的和(n 最大 10^9)。

输入 一个整数 n(1 ≤ n ≤ 10^9)。

输出 一行 sum=结果

样例输入
10
样例输出
sum=30

💡 提示 循环步长写 2;也可以直接用等差数列公式。

✅ 查看参考答案与解析
#include <stdio.h>

int main(void) {
    long long n = 0;
    if (scanf("%lld", &n) != 1) {
        return 1;
    }
    long long k = n / 2;                 /* 2, 4, ..., 2k */
    long long sum = k * (k + 1);         /* 等差数列求和 */
    printf("sum=%lld\n", sum);
    return 0;
}

解析 用公式而不是循环:n 到 10^9 时循环要跑 5 亿次,公式一步算完。这是复杂度意识的第一课。

📚 本文概念都在知识大全:

C 语言 · GCC 编译器 · 指针 · 动态内存 malloc/free · C 字符串 · 结构体 · 预处理 · 编译与链接