C语言(超详细版)——分支语句
C语言的分支语句
- 一、什么是分支语句
- 二、if语句
- 三、switch语句
- 四、if语句和switch语句的对比
一、什么是分支语句
分支语句是指程序根据条件的不同,选择执行不同代码路径的语句。在 C 语言中,常见的分支语句有 if 语句和 switch 语句。
二、if语句
2.1 if
定义:
表达式为真(成立),则语句执行;表达式为假(不成立),则语句不执行
if (条件)
{
语句;
}
注意:在C语⾔中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
示例: 判断一个数是否为奇数
#include
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
{
printf("奇数
");
}
return 0;
}
2.2 if…else.
定义:
条件成立执行 if,不成立执行 else
if (条件)
{
语句1;
}
else
{
语句2;
}
示例:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数
", num);
else
printf("%d 是偶数
", num);
return 0;
}
注意:

2.3 分支中包含多条语句
默认在 if 和 else 语句中默认都只控制⼀条语句,比如:


上面的代码,你会发现输⼊的值不管是>=18 还是小于18,“可以交女朋友了” 都会打印在屏幕上。
这是因为 if 语句只能控制⼀条语句,就是 printf(“成年了
”); ,if语句为真,则打印成年了,
if语句为假,则不打印,对于 printf(“可以谈恋爱了
”); 是独立存在的,不管if语句的条件的真
假,都会被执行。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使用 {} 将代码括起来,else 后也可以跟上大括号。如下:
#include
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了
");
printf("可以交⼥朋友了
");
}
return 0;
}
更完善的代码,如下:
#include
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了
");
printf("可以交⼥朋友了
");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年
");
printf("不可以早恋哦
");
}
return 0;
}
2.4 if … else if … else(多分支)
定义:
多个条件,从上往下判断,满足一个就停止
if (条件1)
{
...
}
else if (条件2)
{
...
}
else
{
...
}
示例:
输入⼀个人的年龄,如果年龄<18岁,打印"少年";如果年龄在18岁至44岁打印"青年";如果年龄在45岁至59岁打印"中老年";如果年龄在60岁至89岁打印"老年";如果90岁以上打印“老寿星”
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("少年
");
else if (age <= 44)//>=18
printf("青年
");
else if (age <= 59)//>=45
printf("中老年
");
else if (age <= 89)//>=60
printf("老年
");
else
printf("老寿星
");
return 0;
}
⚠️ 顺序很重要!
一定要从“大范围 → 小范围”写
2.5 悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们⾸先从下⾯代码开始:
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe
");
else
printf("haha
");
}
return 0;
}
程序运⾏的结果是啥?
很多初学者,上来以判断 a 是 0,不等于 1 ,那就执行 else 子句,打印 haha
但是当你去运行代码,输出的结果是:啥都不输出。

为什么呢?
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近
的 if 匹配。
上面的代码排版,让 else 和第⼀个 if 语句对齐,让我们以为 else 是和第⼀个if匹配的,当 if
语句不成立的时候,自然想到的就是执行else 子句,打印 haha ,但实际上 else 是和第⼆个 if
进行匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不
成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了:
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe
");
else
printf("haha
");
}
return 0;
}
所以,只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。
三、switch语句
除了 if 语句外,C语言还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重
的 else if 改成更易用、可读性更好的形式。
定义:
代码中,根据表达式 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行 default 分支。
switch (表达式)
{
case 常量1:
语句;
break;
case 常量2:
语句;
break;
default:
语句;
}
注意:
-
switch 后的表达式必须是整型表达式;
case 后的值,必须是整形常量表达式 -
⚠️ break 很重要, 不写会“贯穿执行”(初学者常踩坑);
但也不是是每个 case 语句都得有,这就得根据实际情况来看了。 -
case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实
际需求的就可以。不过我们通常是把 default 子句放在最后处理的。
四、if语句和switch语句的对比











