目录
1.什么是分支语句(选择语句)?🛻
如果你学习了C语言,之后可以选择Java方向深造,亦可选择C++方向深造。
这就是分支,也叫选择语句。
1.1 if语句🚓
首先我们来看看if语句的基本结构
if(表达式1)
语句1;
//多分支
if(表达式1) //如果表达式1为真,执行语句1
语句1;
else if(表达式2) // 如果表达式1为假,表达式2为真,执行语句2
语句2;
else //如果表达式1,2都为假,执行语句3
语句3;
例1.
可以看到,我们最后的结果输入了ture,说明执行了第一条printf语句。
例2.
可以看到,不同的选择,出现了不同的输出。
例3.
来看看这个例子,为什么输出了ture呢?
if语句里也没有判断啊?
其实是因为,在C语言中规定
非0即为真
例3中,a+b的结果是3,不为0,所以if语句判断为真,执行第一个printf语句。
1.1.1悬空else🏎️
什么是悬空else呢?先看代码
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("66666\n");
else
printf("99999\n");
return 0;
}
先试着想象会输出什么
你猜到了吗?这里什么都没有输出。
探究:
从第一个if语句开始,a等于1吗?答案是不等于
那么现在我们有三个选择。A.看到了else,输出99999。B.继续执行if语句b是否等于2,答案是的,输出666666。C.程序结束,什么都不输出。
好,现在我们来一一分析,A选择,我们首先要明白if else语句的匹配原则,当多个if 存在时,else匹配最近的一个if语句,我称其为就近原则,我这里故意把else对其第一个if语句,相信有很多人上当了吧。所以,这里的else是匹配第二个if语句的。自然不会输出99999.
B选择,我们来这样看看代码
这下理解了吗,外层的if语句都为假了,内部还怎么执行。自然就不会输出66666。
所以,我们写代码时,一定要注意代码格式!不要偷懒少些括号,这些都是致命错误!
1.2 switch语句 🦼
与if语句一样,是选择语句。
来看看switch语句的结构
switch(整型表达式)
{
case 整形常量表达式:
语句;
}
Switch的表达式为day,day=1,所以输出星期一。
1.2.1 break语句 🛵
如果我们要存在很多个选项,我们就要用break语句去终止。
先来看看不使用break语句的后果吧
结果输出了星期一,星期二,但我们想要的结果只是输出星期一。
所以我们要添加break语句,让break来终止。而break语句 的实际效果是把语句列表划分为不同的分支部分。
所以我们尽量在每次case语句后都加上break语句,养成好习惯。
1.2.2 default子句🛺
如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个 case 标签可以出现的位置。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。和if语句的else语句是不是有点相似呢?
最后,来试试这道题吧。
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
你是否做对了呢?
本节分支语句就到这里结束啦!