当前位置:首页 » 《随便一记》 » 正文

『C语言从入门到进阶』第 ① 期 - 分支语句

14 人参与  2023年03月30日 10:17  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述
在这里插入图片描述

文章目录

?专栏导读?文章导读?什么是语句?什么是分支语句?if语句?语法结构?else if?悬空else ?switch语句?语法结构

?专栏导读

?作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。

?专栏简介:本文收录于 C语言初阶专栏,本专栏主要内容为C语言的初阶知识的全套讲解,包含初识C语言、函数、数组、分支与循环、操作符、指针初阶的讲解。

?相关专栏推荐:C语言进阶系列数据结构与算法

?文章导读

本篇文章主要内容为学习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");elseprintf("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");elseprintf("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语句,经常由switchcasebreakdefaul构成。

switch:switch后面的()中的内容为一个整型表达式case:case意为情况,case后面的值为整型表达式的可能取值;如果表达式的值为这个可能取值,则执行:后面的语句。break:当我们执行完一种情况,而不想在继续往下执行,我们就需要用break来跳出switch。default:意为否则,作用是,若上述的case不符合可能取值,则执行default的语句。

灵活的运用breakdefault可以应对很多不同的场景。例如:

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 标签可以出现的位置,不一定是末尾。

在这里插入图片描述
点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
*** ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓***


点击全文阅读


本文链接:http://zhangshiyu.com/post/57246.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1