文章目录
思维导图
前言
一、分支语句:if和else语句
1、语法结构
2、分支中包含多条语句
3、嵌套if语句
3. 1嵌套于if语句中
3. 2嵌套于else语句中
二、分支语句:switch语句
1、switch语句中的break
2、switch语句中case的合并
3、switch语句中的default
总结
上一篇文章我们主要了解了C语言的三种结构(顺序结构、选择结构、循环结构),并且学习了关系操作符、条件操作符、逻辑运算符一类重要的操作符。
关系操作符是用于比较的操作符;条件操作符是需要接受三个操作数的三目操作符;逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。
复习了上一篇内容,本篇文章将带领大家了解如何使用if, switch语句来实现选择(分支)结构
(如果对其相关概念还不了解的同学,可以先行阅读上一篇文章,本篇文章将会用到上一篇讲过的知识)
“if”一词在英语中表示“如果”,与其对应的是表示“否则”的“else”。在“如果”后面我们通常会进行一个简单的判断。例如,“如果我期末绩点高,妈妈会给我加压岁钱,否则压岁钱会被没收”,这里我们可以看见一个简单的语法结构:
if (表达式:“期末绩点超过4.0”)
语句1:“加压岁钱”
else
语句2:“压岁钱不变”
很明显,“期末绩点超过4.0”这个表达式可以构成一个判断语句,用于判断“期末绩点是否超过4.0”,如果超过,返回值为1,则执行语句1:“加压岁钱”;如果未超过,返回值为0,则执行语句2:“压岁钱不变”。
大致了解语法结构后,我们可以将上述例子改写为一段C语言代码:
#include
int main()
{
float GPA = 0;
scanf("%f", &GPA);
if (GPA >= 4.0)
printf("加压岁钱");
else
printf("压岁钱不变");
return 0;
}
值得一提的是,我们也可以将判断语句直接替换为返回值,如果返回值为非0数则执行if语句,否则执行else语句。
C语言默认在 if 和 else 语句中默认都只控制⼀条语句,这条万年不变的法则也给很多小萌新(包括作者在内)挖了坑。
话不多说,举个栗子
#include
int main()
{
float GPA = 0;
scanf("%f", &GPA);
if (GPA >= 4.0)
printf("加压岁钱");
printf("简直泰裤啦!");
return 0;
}
运行代码后你会发现,无论输入大于还是小于4.0,就算输入2.0,也会打印结果“简直泰裤啦!”,但这样做显然会挨板子。
于是,为了避免掉入陷阱(也为了避免挨板子),我们就要让if和else控制多条语句。怎么办呢?很简单,我们只需要在if或者else后面加上{}将需要控制的语句包含进来。
#include
int main()
{
float GPA = 0;
scanf("%f", &GPA);
if (GPA >= 4.0)
{
printf("加压岁钱");
printf("简直泰裤啦!");
}
return 0;
}
这样子当我们输入小于4.0的数字时就不会打印任何信息,有效避免了一场大战。所以建议读者无论if或else是否需要控制多条语句,都将被控制语句用{}包含进去,让逻辑更清晰
当然在我们实际应用中遇到情况显然比简单的两种情况复杂得多。例如,如果我的绩点小于2.0的话,压岁钱显然不会不变,还有可能减少。因此,下面将为大家介绍两种嵌套if语句的方法:
#include
int main()
{
float GPA = 0;
scanf("%f", &GPA);
if (GPA <= 4.0)
{
if (GPA <= 2.0)
printf("减压岁钱");
else
printf("压岁钱不变");
}
else
printf("加压岁钱");
return 0;
}
当我们输入2.0时,会首先进入判断表达式“GPA<=4.0”是否成立,判断成立后进入第一个if控制的大括号内,接着判断表达式“GPA<=2.0”是否成立,判断成立后就会打印“减压岁钱”,运行结果如下:
虽然这样的嵌套方式很容易理解,但是当嵌套次数增多时便不利于阅读,于是我们通常采用将if语句嵌套于else语句中
如果将if语句嵌套在else语句中,我们便可以舍弃大括号,并且让代码逻辑更易理解
我们发现代码中阴影部分其实和3.1中嵌套的if语句完全相同,但代码更容易阅读和理解,所以作者推荐采取将if语句嵌套于else语句中。
当然,发明分支语句的前辈们发现在表达式返回值情况较多的情况下,与其让计算机不断地做像“if…else…”这样的判断题,不如让计算机自己选择执行对应返回值下的语句。于是,switch语句便诞生了。
“switch”一词在英语中表示“开关”,可以理解为当返回值有对应语句时,我就打开它的开关,开始执行这条语句。
举个栗子:
“break”一词在英语中表示“休息,中断”,在switch语句中不可或缺!为什么这样说呢?请看下面这个错误栗子:
我们可以发现,打印结果显然与我们预想的不同,为什么呢?原因是只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某一个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
因此只有当我们在switch中加上break才能够实现真正的分支。
一些情况下,某些case对应的执行语句相同,此时我们可以将其合并
于是我们可以将上述代码改写如下:
此时返回值为1、2、3时对应的都是打印“它不是4的倍数”,并且代码也更加简洁。
“default”一词在英语中表示“缺省值,缺席”的意思。在C语言中,我们会遇到switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入 default 子句。
如果返回值无法在case中找到对应情况,则执行default语句。
举个栗子:
#include
int main()
{
int num = 0;
scanf("%d", &num);
switch (num % 4)
{
case 0:
printf("太棒了!我找到了4的倍数\n");
break;
case 1:
printf("它减1是4的倍数");
break;
default:
printf("它本身和它减1都不是4的倍数\n");
break;
}
return 0;
}
当然default子句的位置不一定必放在case后。甚至,放在case中间或者在所有case前都不会影响代码运行结果。不过我们通常是把 default 子句放在最后处理的。
本篇文章我们主要讲了两种分支语句:if语句和switch语句。他们的对应语法和逻辑结构也略有不同。
if语句的重点在于嵌套方式的理解,合理的嵌套方式可以帮助我们更方便地阅读代码和提升效率。
switch语句的重点在于对它表述逻辑的理解,用break实现分支,合并case简化代码,引入default语句对应case中所不包含的情况。
然而,计算机在遇到分支语句时会输出不同的结果,但人遇到不同的人生选择时就会走上不同的道路。所以,希望读者在遇上人生分支语句之前,珍惜当下还在一起的人。因为尽管在代码中分支语句可有可无,但在人生中学会分别却是一门必修课。
下一篇内容我们将深入讲解使用while循环、for循环和do-while循环来实现循环结构。
由于作者时间有限,每篇内容也需花费较多时间撰写,后续内容将不定期更新,记得关注哦~
如果发现文章中表述存在错误或有疑问,欢迎私信作者或者在评论区留言~