第五章:流程控制结构
5.1 顺序结构
程序默认按代码的书写顺序逐行执行,没有跳转或分支。
示例:
#include <stdio.h>
int main() {
int a = 5; // 步骤1:声明并初始化变量
a = a + 3; // 步骤2:修改变量值
printf("%d", a);// 步骤3:输出结果(8)
return 0;
}
5.2 分支结构
根据条件选择执行不同的代码块。
5.2.1 if-else
语句
语法:
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件2为真时执行
} else {
// 所有条件均为假时执行
}
规则:
else if
和 else
可选。
- 条件表达式必须返回整型值(非零为真,零为假)。
示例:判断成绩等级
int score = 85;
if (score >= 90) {
printf("A");
} else if (score >= 80) {
printf("B"); // 输出:B
} else {
printf("C");
}
注意事项:
• 避免“悬空 else
”问题(else
匹配最近的未匹配 if
)。
• 多条件用 &&
或 ||
组合。
5.2.2 switch-case
结构
语法:
switch (表达式) {
case 常量1:
代码块1;
break; // 可选
case 常量2:
代码块2;
break;
default:
默认代码块; // 可选
}
规则:
表达式
必须是整型或字符型。
case
后的常量必须唯一且为编译时常量。
break
用于退出 switch
,否则会“穿透”执行后续代码。
示例:根据输入字符输出结果
char ch = 'B';
switch (ch) {
case 'A':
printf("优秀");
break;
case 'B':
printf("良好"); // 输出:良好
break;
default:
printf("未知");
}
注意事项:
• 合理利用“穿透”特性(如多个 case
共享同一代码块)。
• default
可放在任意位置。
5.3 循环结构
5.3.1 for
循环
语法:
for (初始化; 循环条件; 迭代操作) {
// 循环体
}
特点:
• 适用于已知循环次数的场景。
• 循环条件为假时终止。
示例:计算1到10的和
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i; // sum = 55
}
变体:
• 可省略部分表达式:for (;;) { ... }
为无限循环。
5.3.2 while
与 do-while
循环
循环类型 | 语法 | 执行顺序 | 适用场景 |
while | while (条件) { ... } | 先判断后执行 | 条件可能不满足时 |
do-while | do { ... } while (条件); | 先执行后判断 | 至少执行一次循环体 |
示例:while
循环
int i = 0;
while (i < 5) {
printf("%d ", i); // 输出:0 1 2 3 4
i++;
}
示例:do-while
循环
int x = 10;
do {
printf("%d ", x); // 输出:10
x--;
} while (x > 10); // 即使条件不满足,循环体仍执行一次
5.3.3 break
与 continue
关键字
关键字 | 作用 | 适用场景 |
break | 立即退出当前循环 | 提前终止循环或 switch |
continue | 跳过当前循环剩余代码 | 进入下一次循环迭代 |
示例:
// break:找到第一个3的倍数后退出
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
printf("%d", i); // 输出:3
break;
}
}
// continue:跳过奇数
for (int i = 1; i <= 5; i++) {
if (i % 2 != 0) {
continue; // 跳过后续代码
}
printf("%d ", i); // 输出:2 4
}
5.4 嵌套控制结构实例
示例1:打印九九乘法表
for (int i = 1; i <= 9; i++) { // 外层循环控制行数
for (int j = 1; j <= i; j++) { // 内层循环控制列数
printf("%d*%d=%-2d ", j, i, i*j);
}
printf("\n");
}
示例2:判断质数
int num = 17;
int is_prime = 1; // 假设是质数
if (num <= 1) {
is_prime = 0;
} else {
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
is_prime = 0;
break; // 发现因子,立即退出循环
}
}
}
printf(is_prime ? "质数" : "非质数"); // 输出:质数
示例3:猜数字游戏逻辑
int target = 42, guess;
do {
printf("输入猜测的数字:");
scanf("%d", &guess);
if (guess > target) {
printf("太大了!\n");
} else if (guess < target) {
printf("太小了!\n");
}
} while (guess != target);
printf("猜对了!\n");
总结
- 分支结构:
• if-else
灵活处理多条件,switch-case
适合离散值匹配。
- 循环结构:
• for
适用于已知次数,while
和 do-while
处理条件循环。
• break
和 continue
增强循环控制能力。
- 嵌套结构:
• 合理缩进和注释提升可读性,避免过度嵌套(一般不超过3层)。
掌握流程控制是编写高效、可维护代码的核心基础!