目录
什么是语句
什么是分支语句
if语句
语法结构
else if
悬空else
switch语句
语法结构
文章导读
本篇文章主要内容为学习C语言中的分支语句——if语句与switch语句。介绍了什么是语句、if语句的语法结构、悬空else、switch的语法结构等。
正文
什么是语句
C语言中,一条指令、一行代码都可以称为语句,每条语句是以分号;来进行分隔的。
语句可分为以下五类:
表达式语句
函数调用语句
控制语句
复合语句
空语句
本章将要学习的分支语句属于控制语句的一种。控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句,可分成以下三类:
条件判断语句也叫分支语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句。
什么是分支语句
分支源于选择。正因为有多种不同的选择,才会产生不同选择所造成的结果。
如果你好好学习,毕业年薪百万,走上人生巅峰;如果你不学习,毕业等于失业,回家卖红薯。
是否好好学习就是选择,年薪百万与回家卖红薯就是不同的分支。
C语言中,我们经常使用if语句与switch语句实现选择与分支。
if语句
语法结构
//语法结构: if(表达式) 语句; if(表达式) 语句1; else 语句2; //多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
- if后面的
()
中的表达式为条件判断的表达式
,若表达式为真,则执行语句;若表达式为假则不执行; - C语言中,
0表示假
,非0表示真
。
用法示例
int main() { int a = 1; if (a == 1) { printf("YES"); } else { printf("NO"); } return 0; }
else if
如果我们需要实现很多选择的情况,可以利用else if
来实现,意为否则。
int main() { int a = 1; if (a == 1) { printf("a=1"); } else if(a>1) { printf("a>1"); } else//对应a<1的情况 { printf("a<1"); } return 0; }
悬空else
初学者经常会犯的错误就是悬空else
,也是学校测试喜欢考察的内容,例如,这就是一道非常经典的悬空else
的题目。
问题: 这段代码的运行结果是什么?
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("hehe\n"); else printf("haha\n"); return 0; }
解答: 运行结果为没有输出内容
。
为什么会这样呢?因为语法规定else
与和它相距最近
的if
相匹配。第一个if
的条件为假,就不会执行任何语句。
这段代码实际的执行逻辑是这样的:
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) printf("hehe\n"); else printf("haha\n"); } return 0; }
当我们不注重代码的书写规范
时,我们难免会出现这样的bug,而且这种bug往往是最难发现的,编译器并不知道我们的代码想要表达的意思,它只要觉得代码符合语法规范就不会报错。而且就算是我们肉眼寻找也极难发现,当然我们也有很好的办法来避免它,那就是,不要偷懒,多使用{}
。
switch语句
switch语句
同样也是一种分支语句,它能应对比if语句更复杂的场景。
语法结构
直接来看示例:
int main() { int a = 1; switch (a) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; default: printf("周末\n"); break; } return 0; }
如上所示,switch语句,经常由switch、case、break、defaul构成。
switch:switch后面的()中的内容为一个整型表达式;
case:case意为情况,case后面的值为整型表达式的可能取值;如果表达式的值为这个可能取值,则执行:后面的语句。
break:当我们执行完一种情况,而不想在继续往下执行,我们就需要用break来跳出switch。
default:意为否则,作用是,若上述的case都不符合可能取值,则执行default的语句。
灵活的运用break
与default
可以应对很多不同的场景。例如:
int main() { int a = 1; switch (a) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; default: printf("周末\n"); break; } return 0; }
注意
- 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
- 每个 switch 语句中
只能出现一条default子句
。 - 可以写在任何一个 case 标签可以出现的位置,不一定是末尾。