条件语句(分支语句)
这类语句根据条件的真假,决定执行哪一段代码。
a) if 语句
这是最基本的条件语句,用于在某个条件为真时执行一段代码。
形式:
if (表达式) {
// 如果表达式为真,则执行这里的代码
}
示例:
if (score > 60) {
printf("及格了!\n");
}
b) if-else 语句
当 if 的条件为真时,执行 if 块的代码;否则,执行 else 块的代码。
形式:
if (表达式) {
// 如果表达式为真,执行这里
} else {
// 如果表达式为假,执行这里
}
示例:
if (score > 60) {
printf("及格了!\n");
} else {
printf("不及格,\n");
}
c) if-else if-else 语句(多分支语句)
用于处理多个互斥的条件,从上到下判断,一旦某个条件为真,就执行对应的代码块,并跳过后续的判断。
形式:
if (表达式1) {
// 如果表达式1为真,执行这里
} else if (表达式2) {
// 如果表达式1为假且表达式2为真,执行这里
} else {
// 如果所有表达式都为假,执行这里
}
示例:
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
d) switch 语句
switch 语句是一个多分支选择语句,它根据一个变量的值,跳转到对应的 case 标签处执行,它通常用于处理离散的、固定的选项。
形式:
switch (表达式) {
case 常量1:
// 如果表达式的值等于常量1,执行这里的代码
break; // 跳出switch语句,非常重要!
case 常量2:
// 如果表达式的值等于常量2,执行这里的代码
break;
default:
// 如果表达式的值不匹配任何一个case,执行这里的代码
break;
}
示例:
char grade = 'B';
switch (grade) {
case 'A':
printf("成绩优秀\n");
break;
case 'B':
printf("成绩良好\n");
break;
case 'C':
printf("成绩及格\n");
break;
default:
printf("成绩不及格\n");
break;
}
注意:
switch的表达式必须是整型(int)、字符型(char)或枚举类型,每个case后的break语句是必须的,否则会发生“case穿透”,即程序会继续执行下一个case的代码。
循环语句
这类语句用于重复执行某一段代码,直到循环条件不满足为止。
a) while 循环(当型循环)
先判断条件,如果条件为真,则进入循环体执行代码,条件可能从一开始就不为真,导致循环体一次也不执行。
形式:
while (表达式) {
// 只要表达式为真,就重复执行这里的代码
}
示例:
int i = 0;
while (i < 5) {
printf("i = %d\n", i);
i++; // 别忘了更新循环变量,否则会死循环
}
b) do-while 循环(直到型循环)
先执行一次循环体,然后再判断条件,如果条件为真,则继续循环。保证循环体至少执行一次。
形式:
do {
// 先执行这里的代码
} while (表达式); // 注意这里的分号不能少
示例:
int i = 0;
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
c) for 循环
for 循环是最常用、功能最强大的循环结构,它通常用于循环次数已知的情况,它将循环的初始化、条件和更新操作整合在一行。
形式:
for (初始化表达式; 循环条件表达式; 更新表达式) {
// 只要循环条件为真,就重复执行这里的代码
}
示例:
// 从0打印到4
for (int i = 0; i < 5; i++) {
printf("i = %d\n", i);
}
说明:
- 初始化表达式:只在循环开始前执行一次。
- 循环条件表达式:每次循环开始前都会被判断,如果为假,则循环结束。
- 更新表达式:每次循环体执行完毕后都会被执行。
跳转语句
这类语句用于无条件地改变程序的执行流程,使程序从当前位置跳转到其他位置。
a) break 语句
break 语句主要用于两个地方:
- 在
switch语句中:用于终止switch语句的执行,防止case穿透。 - 在循环语句中(
for,while,do-while):用于立即终止整个循环的执行,并跳转到循环体后面的第一条语句。
示例(在循环中):
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时,循环立即终止
}
printf("%d ", i);
}
// 输出: 0 1 2 3 4
b) continue 语句
continue 语句只能在循环语句(for, while, do-while)内部使用,它的作用是跳过本次循环的剩余部分,直接进入下一次循环的判断。
示例:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 如果i是偶数,跳过下面的printf,直接进入下一次i++
}
printf("%d ", i);
}
// 输出: 1 3 5 7 9
c) goto 语句
goto 是一个无条件跳转语句,它可以将程序的控制权直接跳转到由标记的语句。在结构化编程中,强烈建议避免使用 goto,因为它会使代码逻辑混乱,难以维护,但在某些特定场景(如从深层嵌套循环中跳出),它可能会显得简洁。
形式:
goto 标签; // ... 其他代码 ... 标签: // ... 跳转到这里执行 ...
示例:
#include <stdio.h>
int main() {
int i = 0;
loop_start:
printf("%d ", i);
i++;
if (i < 5) {
goto loop_start;
}
// 输出: 0 1 2 3 4
return 0;
}
注意:
goto不能跳转到另一个函数内部,也不能跳过变量的初始化语句。
总结表格
| 类别 | 语句名称 | 作用 | 主要特点 |
|---|---|---|---|
| 条件语句 | if, if-else, if-else if-else |
根据条件选择执行路径 | 处理逻辑分支,条件判断 |
switch |
根据变量的值选择执行路径 | 处理多分支离散选项,需配合 break |
|
| 循环语句 | while |
当条件为真时,重复执行 | 先判断,后执行,可能一次不执行 |
do-while |
重复执行,直到条件为假 | 先执行,后判断,至少执行一次 | |
for |
按指定次数重复执行 | 初始化、条件、更新整合在一行,最常用 | |
| 跳转语句 | break |
终止 switch 或循环 |
立即跳出当前结构 |
continue |
跳过本次循环剩余部分 | 立即进入下一次循环 | |
goto |
无条件跳转到标签处 | 强烈避免使用,破坏代码结构 |
C语言的控制语句总共是 9种,可以归为上述三大类,理解并熟练运用这些控制语句是编写C程序的基础。
