跳到主要内容
🔍

代码示例:1.2.4 控制结构

全部示例均标注编译命令、适用环境与实测状态;完整验证记录见《03.5-代码编译运行验证记录》。

  • examples/ex1-grade.c · 成绩分层(if / else if / else 与边界值)

    /* ex1-grade.c —— 成绩分层:if / else if / else(1.2.4)
     * 适用环境:Linux / Windows(MinGW) 标准:C11
     * 编译:gcc ex1-grade.c -o ex1 -std=c11 -Wall -Wextra -Wpedantic
     * 运行:Linux: ./ex1  Windows: ex1.exe
     * 要点:else if 从上到下依次判断,命中即停止;把 85 改成 59/60/90 观察边界(60 是及格线、90 是优秀线)
     */
    #include <stdio.h>
     
    int main(void)
    {
        int score = 85;
     
        if (score >= 90) {
            printf("%d 分:优秀\n", score);
        } else if (score >= 80) {
            printf("%d 分:良好\n", score);
        } else if (score >= 60) {
            printf("%d 分:及格\n", score);
        } else {
            printf("%d 分:不及格\n", score);
        }
        return 0;
    }
     
  • examples/ex2-multiplication-table.c · 九九乘法表(嵌套 for 与循环边界)

    /* ex2-multiplication-table.c —— 九九乘法表:嵌套 for + 边界条件(1.2.4)
     * 适用环境:Linux / Windows(MinGW) 标准:C11
     * 编译:gcc ex2-multiplication-table.c -o ex2 -std=c11 -Wall -Wextra -Wpedantic
     * 运行:Linux: ./ex2  Windows: ex2.exe
     * 要点:外层 i 控制行、内层 j 控制列;内层循环条件 j <= i 让每行"上三角"逐行变长——
     *       把 j <= i 改成 j <= 9 会得到完整矩形,体会循环边界的含义
     */
    #include <stdio.h>
     
    int main(void)
    {
        int i, j;
     
        for (i = 1; i <= 9; i++) {
            for (j = 1; j <= i; j++) {
                printf("%dx%d=%-3d", j, i, i * j);
            }
            printf("\n");
        }
        return 0;
    }
     
  • examples/ex3-prime.c · 质数判断(for + break + 试除边界 i*i<=n)

    /* ex3-prime.c —— 质数判断:for + break + 试除边界(1.2.4)
     * 适用环境:Linux / Windows(MinGW) 标准:C11
     * 编译:gcc ex3-prime.c -o ex3 -std=c11 -Wall -Wextra -Wpedantic
     * 运行:Linux: ./ex3  Windows: ex3.exe
     * 要点:① 试除只需到 sqrt(n)(写成 i*i <= n 避免浮点);② 找到因子立即 break,不再浪费循环;
     *       ③ 边界:n < 2 直接判为非质数。把 n 改成 9 观察"找到因子"分支。
     */
    #include <stdio.h>
     
    int main(void)
    {
        int n = 29;
        int is_prime = 1;
        int i = 2;
     
        if (n < 2) {
            is_prime = 0;
        } else {
            for (; i * i <= n; i++) {
                if (n % i == 0) {
                    is_prime = 0;
                    break;
                }
            }
        }
     
        if (is_prime) {
            printf("%d 是质数(试除 2..%d 均不能整除)\n", n, i - 1);
        } else {
            printf("%d 不是质数(找到因子 %d\n", n, n < 2 ? 1 : i);
        }
        return 0;
    }
     
  • examples/ex4-calculator.c · 简易计算器(switch + do-while 菜单循环 + 除零边界)

    /* ex4-calculator.c —— 简易计算器:switch + do-while 菜单循环(1.2.4)
     * 适用环境:Linux / Windows(MinGW) 标准:C11
     * 编译:gcc ex4-calculator.c -o ex4 -std=c11 -Wall -Wextra -Wpedantic
     * 运行(示例输入序列 1 2 3 4 5 0):
     *   Windows: echo 1 2 3 4 5 0 | ex4.exe
     *   Linux:   printf '1 2 3 4 5 0\n' | ./ex4
     * 要点:① do-while 保证菜单至少显示一次;② 每个 case 以 break 结束,漏写 break 会"穿透"到下一个
     *       case(正文 ⑦ 演示);③ default 兜住非法输入;④ 除数 0 在 case 内做边界判断。
     */
    #include <stdio.h>
     
    int main(void)
    {
        int choice;
        double a = 12.0, b = 5.0;
     
        do {
            printf("菜单: 1=加 2=减 3=乘 4=除 0=退出\n");
            printf("请选择: ");
            if (scanf("%d", &choice) != 1) {
                break; /* 输入流结束或非法输入,退出循环 */
            }
            switch (choice) {
            case 1:
                printf("%g + %g = %g\n", a, b, a + b);
                break;
            case 2:
                printf("%g - %g = %g\n", a, b, a - b);
                break;
            case 3:
                printf("%g * %g = %g\n", a, b, a * b);
                break;
            case 4:
                if (b != 0.0) {
                    printf("%g / %g = %g\n", a, b, a / b);
                } else {
                    printf("除数不能为 0\n");
                }
                break;
            case 0:
                printf("退出\n");
                break;
            default:
                printf("无效选项 %d\n", choice);
                break;
            }
        } while (choice != 0);
     
        return 0;
    }