代码示例: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; }