if-else 语句是 C 语言中最基础、最核心的条件判断语句,它允许程序根据不同的条件执行不同的代码块。
基本格式
if-else 语句主要有三种格式:
if语句(单分支)if-else语句(双分支)if-else if-else语句(多分支)
if 语句(单分支)
当条件满足时执行一段代码,如果条件不满足,则什么都不做。
格式
if (表达式) {
// 如果表达式为真,则执行这里的代码
statement1;
statement2;
// ...
}
工作原理
- 程序首先计算
表达式的值。 - 如果表达式的值为非零(在 C 语言中,非零即代表“真”
true),则执行if代码块(花括号 )中的语句。 - 如果表达式的值为零(在 C 语言中,零即代表“假”
false),则直接跳过if代码块,执行if语句后面的其他代码。
示例
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) {
printf("你已经成年了,\n");
}
printf("程序结束,\n");
return 0;
}
输出:
你已经成年了。
程序结束。
age 被赋值为 16,if 代码块内的 printf 语句就不会被执行,程序只会输出 "程序结束。"。
if-else 语句(双分支)
当条件满足时执行一段代码,否则执行另一段代码,这提供了两个互斥的分支。
格式
if (表达式) {
// 如果表达式为真,则执行这里的代码
statement1;
} else {
// 如果表达式为假,则执行这里的代码
statement2;
}
工作原理
- 程序计算
表达式的值。 - 如果为真(非零),执行
if代码块。 - 如果为假(零),执行
else代码块。 - 注意:
if和else的代码块只会执行其中一个。
示例
#include <stdio.h>
int main() {
int score = 85;
if (score >= 60) {
printf("恭喜你,及格了!\n");
} else {
printf("很遗憾,你需要补考,\n");
}
return 0;
}
输出:
恭喜你,及格了!
score 被赋值为 50,那么输出将是:
很遗憾,你需要补考。
if-else if-else 语句(多分支)
用于处理多个互斥的条件,程序会从上到下依次判断,直到第一个满足条件的分支被执行,然后跳过所有后续的 else if 和 else 分支。
格式
if (表达式1) {
// 如果表达式1为真,则执行这里的代码
statement1;
} else if (表达式2) {
// 如果表达式1为假,且表达式2为真,则执行这里的代码
statement2;
} else if (表达式3) {
// 如果表达式1和2都为假,且表达式3为真,则执行这里的代码
statement3;
} else {
// 如果所有上面的表达式都为假,则执行这里的代码
statementN;
}
工作原理
- 程序从
if (表达式1)开始判断。 表达式1为真,执行statement1,然后整个if-else if-else结构执行完毕。表达式1为假,继续判断else if (表达式2)。表达式2为真,执行statement2,然后整个结构执行完毕。- ... 以此类推。
- 如果所有
if和else if的表达式都为假,则执行最后的else代码块。
示例
#include <stdio.h>
int main() {
int score = 75;
if (score >= 90) {
printf("成绩优秀!\n");
} else if (score >= 80) {
printf("成绩良好!\n");
} else if (score >= 60) {
printf("成绩及格,\n");
} else {
printf("成绩不及格,\n");
}
return 0;
}
输出:
成绩及格。
程序检查 score >= 90 (假),score >= 80 (假),score >= 60 (真),所以执行了第三个分支的代码。
重要注意事项
-
表达式必须放在括号 中
if和else if后面的条件必须用一对圆括号括起来,这是语法要求。if (x > 10) // 正确 // if x > 10 // 错误!
-
代码块(花括号 )的使用
- 推荐始终使用花括号 ,即使代码块内只有一条语句,这可以增强代码的可读性,并防止在后续添加新语句时出现逻辑错误(著名的 "dangling else" 问题)。
- 如果代码块内只有一条语句,可以省略花括号,但不推荐。
// 推荐写法(清晰、安全) if (age >= 18) { printf("成年\n"); } // 不推荐但可接受的写法 if (age >= 18) printf("成年\n"); // 危险的写法! if (age >= 18) printf("成年\n"); printf("可以投票\n"); // 这行代码无论条件真假都会执行! -
if与else的配对规则else总是与其最近的、尚未配对的if语句配对。if (x > 10) if (y > 20) printf("A\n"); else // 这个 else 属于哪个 if?是内层的 if (y > 20) printf("B\n");x是 15,y是 10,程序会输出 "B",这通常不是我们想要的结果,为了清晰,应该使用花括号:if (x > 10) { if (y > 20) { printf("A\n"); } else { printf("B\n"); } } -
表达式的值为 0 或非零 在 C 语言中,任何表达式都可以作为条件,整数、浮点数、指针都可以。
- 0 代表假。
- 任何非零值(包括负数、1、2.5、非空指针)都代表真。
int a = 0; if (a) { // 条件为假,不执行 printf("a is true\n"); } int b = -5; if (b) { // 条件为真,执行 printf("b is true\n"); // 会输出 } int *p = NULL; if (p) { // 条件为假,不执行 printf("p is true\n"); } -
else if的数量没有限制 你可以根据需要编写任意数量的else if分支来处理各种情况。
| 格式 | 描述 | 示例 |
|---|---|---|
if |
单分支,条件为真时执行 | if (age > 18) { ... } |
if-else |
双分支,条件为真执行 if,否则执行 else |
if (score >= 60) { ... } else { ... } |
if-else if-else |
多分支,从上到下判断,执行第一个为真的分支 | if (x > 0) { ... } else if (x < 0) { ... } else { ... } |
掌握 if-else 语句是编写逻辑清晰、功能完善的 C 语言程序的基础,记住多用花括号和注意配对规则,可以避免很多常见的错误。
