目录
if语句的核心思想if语句的三种形式if语句if-else语句if-else if-else语句
if语句的嵌套- 使用
if语句的注意事项- 条件表达式
- 代码块与复合语句
- 避免常见的错误
- 综合示例
if 语句的核心思想
if 语句是一种控制流语句,它允许程序根据某个条件的真假来决定执行哪些代码。

可以把它想象成一个生活中的“十字路口”:
- 条件:你看到红灯还是绿灯?
- 决策:
- 如果是红灯(条件为真),你就停下(执行代码块 A)。
- 如果是绿灯(条件为假),你就通过(执行代码块 B)。
在 C 语言中,这个“条件”通常是一个表达式,其结果要么为“真”(非零),要么为“假”(0)。
if 语句的三种形式
if 语句有三种基本形式,可以应对不同的决策场景。
if 语句(单分支)
这是最简单的形式,当条件为真时,执行一段代码;如果条件为假,则直接跳过。

语法结构:
if (条件表达式) {
// 当条件表达式为真时,这里面的代码才会被执行
// 一条或多条语句
}
工作原理:
- 程序首先计算
条件表达式的值。 - 如果表达式的值为真(非零),则执行 中的代码。
- 如果表达式的值为假(0),则跳过 中的代码,继续执行
if语句后面的其他代码。
示例:判断一个数是否为正数
#include <stdio.h>
int main() {
int number = 10;
if (number > 0) { // 条件:number 是否大于 0
printf("这个数是正数,\n"); // 因为 number=10 > 0,条件为真,所以这句会执行
}
printf("程序结束,\n"); // 无论条件真假,这句都会执行
return 0;
}
输出:

这个数是正数。
程序结束。
if-else 语句(双分支)
当需要在“条件为真”和“条件为假”两种情况下执行不同的代码时,使用 if-else 语句。
语法结构:
if (条件表达式) {
// 当条件表达式为真时,执行这里的代码
} else {
// 当条件表达式为假时,执行这里的代码
}
工作原理:
- 程序计算
条件表达式的值。 - 如果值为真,执行
if分支的代码块,然后跳过else分支。 - 如果值为假,跳过
if分支,直接执行else分支的代码块。 if和else两个分支只有一个会被执行。
示例:判断一个数是奇数还是偶数
#include <stdio.h>
int main() {
int num = 7;
if (num % 2 == 0) { // 条件:num 除以 2 的余数是否为 0
printf("%d 是偶数,\n", num);
} else {
printf("%d 是奇数,\n", num); // 因为 7 % 2 = 1,条件为假,所以执行 else 分支
}
return 0;
}
输出:
7 是奇数。
if-else if-else 语句(多分支)
当需要判断多个条件,并根据不同的条件执行不同的代码时,使用这种形式,它像一个层层筛选的过程。
语法结构:
if (条件表达式1) {
// 当条件表达式1为真时,执行这里的代码
} else if (条件表达式2) {
// 当条件表达式1为假,且条件表达式2为真时,执行这里的代码
} else if (条件表达式3) {
// 当条件表达式1和2都为假,且条件表达式3为真时,执行这里的代码
} else {
// 当上面所有条件都为假时,执行这里的代码(可选)
}
工作原理:
程序从上到下依次检查每个 if 和 else if 的条件,一旦某个条件为真,就执行其对应的代码块,然后立即跳出整个 if-else if-else 结构,不再检查后续的条件,如果所有条件都为假,则执行 else 分支(如果存在)。
示例:根据分数评定等级
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("成绩等级: A\n");
} else if (score >= 80) { // 只有 score < 90 时才会检查这个条件
printf("成绩等级: B\n"); // score=85 满足这个条件,执行后跳出
} else if (score >= 60) {
printf("成绩等级: C\n");
} else {
printf("成绩等级: D\n");
}
return 0;
}
输出:
成绩等级: B
if 语句的嵌套
你可以在一个 if 语句的内部(无论是 if 分支还是 else 分支)再放入另一个 if 语句,这就是 if 语句的嵌套,它用于处理更复杂的逻辑判断。
示例:判断一个年份是否为闰年 闰年的规则:
- 能被4整除,但不能被100整除。
- 或者,能被400整除。
#include <stdio.h>
int main() {
int year = 2025;
if (year % 4 == 0) { // 先判断是否能被4整除
if (year % 100 == 0) { // 如果能被4整除,再判断是否能被100整除
if (year % 400 == 0) { // 如果能被100整除,最后判断是否能被400整除
printf("%d 是闰年,\n", year); // 能被400整除,是闰年
} else {
printf("%d 不是闰年,\n", year); // 能被100但不能被400整除,不是闰年
}
} else {
printf("%d 是闰年,\n", year); // 能被4但不能被100整除,是闰年
}
} else {
printf("%d 不是闰年,\n", year); // 不能被4整除,不是闰年
}
return 0;
}
输出:
2025 是闰年。
虽然嵌套 if 可以解决问题,但过多的嵌套会让代码难以阅读,对于复杂的逻辑,可以考虑使用 else if 或提前使用逻辑运算符(&&, )来简化,例如上面的闰年判断也可以写成:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
printf("%d 是闰年,\n", year);
} else {
printf("%d 不是闰年,\n", year);
}
这个版本的可读性可能更高。
使用 if 语句的注意事项
条件表达式
- 任何表达式都可以作为条件,只要它的值是 0(假)或非 0(真)。
- 常见错误:混淆赋值运算符 和关系运算符 。
if (x = 5):这是赋值,将 5 赋给x,表达式的值是 5(非零),所以条件永远为真,这是一个非常常见的逻辑错误。if (x == 5):这是比较,判断x的值是否等于 5,这才是正确的写法。
代码块与复合语句
- 当
if或else分支需要执行多条语句时,必须用 将这些语句括起来,形成一个代码块(或称复合语句)。 - 如果只有一条语句,可以省略 ,但这是一种不好的编程习惯,因为它容易出错,尤其是在添加新代码时。
错误示例(容易出错的写法):
if (score > 60)
printf("及格了!\n");
printf("恭喜你!\n"); // 这句无论是否及格都会执行,因为它不在 if 代码块内
正确示例(推荐写法):
if (score > 60) {
printf("及格了!\n");
printf("恭喜你!\n"); // 只有及格了才会执行
}
养成无论代码多少都加上 的好习惯,可以避免很多潜在的错误。
避免常见的错误
- 忘记在
if后面的括号里写条件:if { ... }是错误的。 - 在
else if后面不加条件:else if { ... }是错误的,必须是else if (条件) { ... }。 - 在分号上出错:
if (condition); { ... }这个分号会结束if语句,导致 里的代码块总是被执行,与条件无关。
综合示例
下面是一个结合了用户输入和多种 if 形式的完整示例。
#include <stdio.h>
int main() {
int age;
char hasTicket;
// 1. 获取用户输入
printf("请输入您的年龄: ");
scanf("%d", &age);
printf("您有票吗? (y/n): ");
scanf(" %c", &hasTicket); // 注意这里的空格,用于跳过之前输入留下的换行符
// 2. 使用嵌套的 if-else 进行判断
if (age < 12) {
printf("儿童免费入场,\n");
} else {
// 对于12岁及以上的人,需要检查是否有票
if (hasTicket == 'y' || hasTicket == 'Y') {
printf("欢迎光临,请入场,\n");
} else {
printf("对不起,您没有票,不能入场,\n");
}
}
return 0;
}
运行情况1:
请输入您的年龄: 10
您有票吗? (y/n): n
儿童免费入场。
运行情况2:
请输入您的年龄: 25
您有票吗? (y/n): y
欢迎光临,请入场。
运行情况3:
请输入您的年龄: 30
您有票吗? (y/n): n
对不起,您没有票,不能入场。
if 语句是编程逻辑的核心,掌握它的三种形式、嵌套用法以及注意事项,是写出健壮、清晰代码的关键,记住多加练习,从简单的判断开始,逐步构建更复杂的逻辑。
