核心概念:if 语句
if 语句用于在某个条件为真(true)时执行特定的代码块。

(图片来源网络,侵删)
语法格式:
if (条件表达式)
{
// 如果条件表达式为真,则执行这里的代码
}
工作原理:
- 程序首先计算
条件表达式。 - 如果表达式的结果为非零(在 C 语言中,非零值被视为
true),则执行 中的代码块。 - 如果表达式的结果为零(被视为
false),则跳过 中的代码块,继续执行if语句之后的下一条语句。
示例:
#include <stdio.h>
int main() {
int age = 20;
if (age >= 18) {
printf("你已经成年了,\n");
}
printf("程序继续执行,\n");
return 0;
}
输出:

(图片来源网络,侵删)
你已经成年了。
程序继续执行。
处理两种情况:if...else 语句
当需要在条件为真和条件为假时执行不同的操作时,可以使用 if...else 语句。
语法格式:
if (条件表达式)
{
// 如果条件为真,执行这里的代码
}
else
{
// 如果条件为假,执行这里的代码
}
工作原理:
- 计算
条件表达式。 - 如果为真,执行第一个 中的代码块,然后跳过
else部分。 - 如果为假,跳过第一个 中的代码块,直接执行
else后面 中的代码块。
示例:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
int score = 75;
if (score >= 60) {
printf("考试通过!\n");
} else {
printf("考试未通过,\n");
}
return 0;
}
输出:
考试通过!
处理多种情况:if...else if...else 语句
当需要判断多个条件,并根据不同的条件执行不同的代码块时,可以使用 if...else if...else 结构,这是一种“阶梯式”的判断。
语法格式:
if (条件表达式1)
{
// 如果条件1为真,执行这里的代码
}
else if (条件表达式2)
{
// 如果条件1为假,且条件2为真,执行这里的代码
}
else if (条件表达式3)
{
// 如果条件1和2都为假,且条件3为真,执行这里的代码
}
...
else
{
// 如果以上所有条件都为假,执行这里的代码(可选)
}
工作原理:
程序会从上到下依次检查每个 else if 的条件。
- 一旦某个条件为真,就执行其对应的代码块,然后整个
if...else if...else结构就结束了,程序会跳过后续所有else if和else部分。 - 如果所有
if和else if的条件都为假,并且存在else部分,则执行else中的代码块。
示例:
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("成绩等级:A\n");
} else if (score >= 80) {
printf("成绩等级:B\n");
} else if (score >= 60) {
printf("成绩等级:C\n");
} else {
printf("成绩等级:D\n");
}
return 0;
}
输出:
成绩等级:B
解释:
score 是 85。
score >= 90为假,跳过。score >= 80为真,执行printf("成绩等级:B\n");,然后整个结构结束,不再检查后面的else if和else。
关键点与最佳实践
a. 代码块 的重要性
虽然当代码块只有一行时,可以省略 ,但这强烈不推荐,因为很容易导致逻辑错误。
错误示例:
int x = 10;
if (x > 5)
printf("x 大于 5\n"); // 这行属于 if
printf("这个判断很危险!\n"); // 这行不属于 if,无论条件真假都会执行!
正确的写法:
int x = 10;
if (x > 5) {
printf("x 大于 5\n");
printf("这个判断很安全!\n"); // 这两行都属于 if
}
b. else 总是与最近的 if 匹配
C 语言编译器会自动将 else 与它前面最近的、尚未匹配的 if 关联起来。
示例:
int a = 10, b = 20;
if (a == 10)
if (b == 20)
printf("a 是 10 b 是 20\n");
else // 这个 else 属于哪个 if?是内层的 if (b == 20)
printf("a 是 10 b 不是 20\n");
输出:
a 是 10 b 是 20
如果想让 else 属于外层的 if,必须使用 来明确范围:
int a = 10, b = 30;
if (a == 10) {
if (b == 20) {
printf("a 是 10 b 是 20\n");
}
} else { // 这个 else 现在明确属于外层的 if (a == 10)
printf("a 不是 10\n");
}
c. 嵌套 if 语句
if 语句内部可以再包含一个或多个 if 语句,这称为嵌套。if...else if...else 本质上就是一种特殊的嵌套。
示例:
#include <stdio.h>
int main() {
int num = 15;
if (num > 0) {
printf("数字是正数,\n");
if (num % 2 == 0) {
printf("并且是偶数,\n");
} else {
printf("并且是奇数,\n");
}
} else if (num < 0) {
printf("数字是负数,\n");
} else {
printf("数字是零,\n");
}
return 0;
}
输出:
数字是正数。
并且是奇数。
d. 使用 switch 作为替代方案
当需要根据一个变量的不同值进行分支判断时,switch 语句通常比一长串的 if...else if...else 更清晰、更高效。
if...else if 版本:
char grade = 'B';
if (grade == 'A') {
// ...
} else if (grade == 'B') {
// ...
} else if (grade == 'C') {
// ...
} else {
// ...
}
switch 版本:
char grade = 'B';
switch (grade) {
case 'A':
// ...
break;
case 'B':
// ...
break;
case 'C':
// ...
break;
default:
// ...
break;
}
| 结构 | 用途 | 示例 |
|---|---|---|
if |
处理单一条件为真的情况 | if (age >= 18) { ... } |
if...else |
处理两种互斥的情况 | if (score >= 60) { ... } else { ... } |
if...else if...else |
处理多种互斥的情况 | if (x > 0) { ... } else if (x < 0) { ... } else { ... } |
掌握 if、else if 和 else 是编写任何有逻辑判断能力的 C 程序的基础,记住要始终使用 来明确代码块的范围,这是写出健壮、可读代码的好习惯。
