(上) C语言中的语句分类及分支语句:if语句、switch语句介绍

目录

前言

一、语句的分类

1. 空语句

2. 表达式语句

3. 函数调用语句

4. 复合语句

5. 控制语句

二、分支语句

1. if语句

(1) if的使用

(2) else的使用

(3) 分支中包含多条语句

(4) 嵌套if

(5) 悬空else问题

2. switch语句

(1) if语句和switch语句的对比

(2) switch语句中的break

(3) switch语句中的default

(4) switch语句中的case和default的顺序问题

结语:


 

前言

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。

 

我们可以使用if 、switch实现分支结构,使用 for 、while 、do while实现循环结构。

一、语句的分类

C语言的代码是由一条一条的语句构成的,C语言中的语句可为以下五类:
空语句、表达式语句、函数调用语句、复合语句、控制语句。

1. 空语句

空语句是最简单的语句,一个分号就是一条语句,也就是空语句。
f745e00e43d141149534fd4ad3014e6d.png
空语句一般出现的地方:这里需要一条语句,但是这个语句不需要做任何事,就可以写一个空语句。

2. 表达式语句

表达式是由操作符和操作数组成的,可以进行运算和求值的一种数据结构。简单来说,表达式是将值和运算符组合起来表示计算过程的方式。

 

表达式语句就是在表达式的后边加上分号。如下所示:
b4b402c154424f939d9932449aab0815.png

3. 函数调用语句

printf是一个库函数,而add是我们自定义的一个函数,后面会讲关于自定义函数的知识。

 

函数调用的时候,加上分号,就是函数调用语句。
ede8763e153740ac83d3651045c60b30.png

4. 复合语句

复合语句是由多个语句组成的语句块。在大多数编程语言中,复合语句通常被定义在一对花括号{}中,其中的语句按顺序执行。

ff0e524fc93d46d797160428dbda1226.png

5. 控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
条件判断语句也叫分支语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句。
今天来讲解分支语句:if语句、switch语句。

二、分支语句

 

1. if语句

(1) if的使用

if 语句的语法形式如下:

7b6f5946bd2e40808c7f116705235b93.png

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
例子:输入一个整数,判断是否为偶数
20f5dfa4b05945a6896749297ab6123b.png
下面是例子的流程图:
c84c3be599514aa5bdc7863811492ac5.png

(2) else的使用

就上面的问题继续,如果一个数不是偶数,那肯定就是奇数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这时就需要 if...else... 语句了,语法形式如下:
f4b84bfcc08740aabf5aecabf28b0def.png
例子:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
b6733bca1beb416ca730b6c0cfe5821f.png

(3) 分支中包含多条语句

C语言中默认 if 和 else 语句都只控制一条语句,比如:
638393b258b54b30a0dd016908a5088d.png
上面的代码,你会发现输入的值不管是>=18 还是小于18,"可以谈恋爱了" 都会打印在屏幕上。
dc824b0639a2448abfc5bd3c66604b5f.png
3628c549c66549089c8fedb30423315a.png
这是因为 if 语句只能控制一条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了, if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独立存在的,不管if语句的条件的真 假,都会被执行。
那么如果我们想要if语句同时控制2条语句,怎么办呢?这就要使用 {} 将代码括起来了。
043dd0d45d4f4a66b4d4a107cbc576e2.png
63f5f777e59b4a0eb3056579a3383e29.png
fa732aeef6574bb8a1db94b108aa28b3.png
else 后也可以跟上大括号。如下:
0561c7a748c04ee3866f5751304c5f6b.png
d75e87845d2d49e1b14472781ca9c869.png
a10dcbfc1f0c4605a28c906d188d2788.png

(4) 嵌套if

在 if else 语句中, else 可以与另一个 if 语句连用,构成多重判断。
比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:
27a32ec3afc340389096ff83ffd611ec.png
上图中蓝色背景的代码就是嵌套在前面else子句中的,构成了嵌套的if语句。
再比如:
输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
10225d9e9bff4c07b9365047bd4238fc.png
上面的代码中蓝色背景的代码也是嵌套在 if 语句中的,构成了嵌套的 if 语句。
有了嵌套if语句,就可以完成更多复杂逻辑的判断。

(5) 悬空else问题

如果有多个 if 和 else ,可以记住这样一条规则, else 总是跟最接近的 if 匹配。
我们首先从下面代码开始
147d87e34d4c4c8399202172dee99cd2.png
程序运行的结果是啥?
很多初学者,上来以判断 a 是 0,不等于5 ,那就执行 else 子句,打印No
但是当你去运行代码,输出的结果是:啥都不输出。
901b6348b79b4271a228db9cd04285c7.png
为什么呢?
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样一条规则, else 总是跟最接近 的 if 匹配。
上面的代码排版,让 else 和第一个 if 语句对齐,让我们以为 else 是和第一个if匹配的,当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印No ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第一个 if 语句就不 成立,嵌套 if 和 else 就没机会执行了,最终什么都不打印。
如果代码改成下面这样就更加容易理解了
4be9e99a8ad2427f818de59449cfcca4.png
或者如果我们希望else确实和第一个if匹配,可以这样修改代码:
882bca336e1f476981f048fb3877ed71.png
0d9d83c114f24d819984d998caa027df.png
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。

2. switch语句

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。

 

switch 语句是一种特殊形式的if...else 结构,用于判断条件有多个结果的情况。它把多重的else if 改成更易用、可读性更好的形式。

4aea2a6f982240e78c7e8fb81a8d17aa.png

上面代码中,根据表达式expression不同的值,执行相应的 case 分支。如果找不到对应的值, 就执行 default 分支。

 

注:switch 后的expression必须是整型表达式,case 后的值,必须是整形常量表达式。

 

(1) if语句和switch语句的对比

练习:输入任意一个整数值,计算除3之后的余数,如果使用if语句完成,如下:

2e0831c497bc43e1bcaef947f3451c0e.png

如果使用switch语句改写,就可以是这样的:

3a29385ad292481795498f7235c8d9ba.png

上述的代码中,我们要注意的点有:

1. case 和后边的数字之间必须有空格

2. 每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。

 

(2) switch语句中的break

前面的代码中,如果我们去掉case语句中的break,会出现什么情况呢?

501ec2d573ec46aebaf73e943d5faad7.png用数字6测试,看一下结果: d45265824c71413683618dde20460d78.png我们发现,6除以3本来余数是0,但是程序运行的结果多了两行,分别是"余数是1"以及"余数是2"的打印。

 

这是为什么呢?原因是 switch 语句也是有分支效果的,只有在 switch 语句中使用 break 才能在跳出 switch 语句,如果某一个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。

 

就比如上面的代码就执行了 case 1 与 case 2 中的语句。 所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

 

(3) switch语句中的default

在使用 switch 语句的时候,我们经常可能遇到一种情况,比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default 子句。

4aea2a6f982240e78c7e8fb81a8d17aa.png

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default 子句。

(4) switch语句中的case和default的顺序问题

在 switch 语句中 case 子句和 default 子句有要求顺序吗? default 只能放在最后吗?

 

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。 不过我们通常是把 default 子句放在最后处理的。

结语:

关于if语句与switch语句就介绍到这里,如果文章有什么错误,希望各位可以在评论区斧正。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

触摸屏监控双速电动机-确定地址分配

I/O地址分配 当选择了PLC之后,首先需要确定的是系统中各I/O点的绝对地址。在某些PLC 中1/O绝对地址的分配方式共有固定地址型、自动分配型、用户定义型3种。实际所使用的方式取决于所采用的PLC的CPU型号、编程软件、软件版本、编程人员的选择等因素。 本任务输入信…

鸿蒙 HarmonyOS ArkTS ArkUI 动画 中心缩放、顶部缩放、纵向缩放

EntryComponentstruct Index {State widthA: number 200State heightA: number 200onPageShow():void{animateTo ( {duration: 2000,iterations: -1,curve:Curve.Linear}, () > {this.widthA 0this.heightA 0} )}build() {Column() {// 中心缩放Column(){}.width(this.wi…

QT+opencv源码编译

时间记录:2024/1/20 一、版本介绍 QT5.12.7cmake3.22.0opencv4.5.4 二、编译步骤 (1)下载opencv源码,然后安装,opencv的安装即对源码的解压过程,解压后的文件目录如下 (2)openc…

全开源多城市同城信息小程序源码(Laravel 框架),同城分类信息发布便民小程序系统【非DZ】

同城生活分类信息小程序,人才招聘、房产二手 多城市地区同城分类信息发布,商家入驻等功能 小程序前后端代码开源无加密,可进行二次开发 【源码运行要求】 1、需要已认证的微信小程序 2、已备案的域名及服务器空间 推荐使用宝塔面板LinuxPHP…

vue-项目打包、配置路由懒加载

1. 简介 在现代前端开发中,Vue.js因其简洁、灵活和高效的特点,已经成为许多开发者的首选框架。 在Vue项目中,打包部署和路由懒加载是两个非常重要的环节。 打包Vue项目是为了将源代码转换为浏览器可以解析的JavaScript文件,以便…

济公、新宿事件

活佛济公,下凡之前职位是降龙罗汉。看不惯神仙手握神通却不能全心全意为凡人服务,大闹天庭。 天庭一众公务员认为简直一派胡言,那么多天条就算有对有错,先不管,总有一条能治的了你! 观音救场,…

力扣2788-按分隔符拆分字符串

按分隔符拆分字符串 题目链接 解题思路: 1 .传参是一个字符串数组,我们需要对每一个字符串处理 2 .解题中e是字符串数组中的每一个字符串 3 .i是每个字符串的下标,n为每个字符串的大小 4 .遍历整个字符串 5 .start是要切割的位置 class Solu…

热血江湖服务端服务器架设教程

热血江湖服务端服务器架设教程 大家好,我是艾西今天简单的说下热血江湖架设需要哪些东西然后怎么操作,不管你是自己玩还是对外开放,这对于有兴趣的小伙伴总的都是一件好事。技多不压身就是这么个道理,当你需要用上时还希望能记起…

Addressables(1) 从安装到加载单个/多个资源

不想再配改那些狗屎路径,准备研究一下Adressable,据说可以用key加载指定的资源 刚安装下来,随便搞了个资源勾选了一下addressable的框框,多了好多东西啊 概念铺天盖地而来,ok 没事的 慢慢来! 前置知识 P…

C# 字符串(String)

文章目录 前言一、C#字符串(String)二、String 类的属性/方法总结 前言 C#基础学习入门系列- C# 字符串(String) 一、C#字符串(String) C#字符串(String)是一种不可变的序列字符。…

欧科云链与《警察技术》联合发布技术专题.pdf

欧科云链受《警察技术》邀请,于第201期期刊正式刊登“区块链生态安全与虚拟货币犯罪治理”技术专题。欧科云链作为该技术专题主要作者,直接参与本次期刊2篇文章撰写,同时为多篇文章提供欧科云链的最新数据和研究成果。 《警察技术》期刊创办于…

LeetCode——双指针

双指针 思想:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。 1. 两数之和Ⅱ-输入有序数组167中等 题意解读:从数组中找出满足相加之和等于目标数的两个数——本质是遍历数组。 存在前提假设: …

Python seaborn库的安装与图像的背景风格(Seaborn篇-01)

Python seaborn库的安装与图像的背景风格(Seaborn篇-01)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

RPC教程 2.支持并发与异步的客户端

1.客户端的使用例子 func main(){//1. 建立连接client, err : rpc.Dial("tcp", "localhost:1234")//2.调用调用指定的RPC方法var reply string //string有默认值err client.Call("HelloService.Hello", "hi", &reply) //即是…

使用docker配置semantic slam

一.Docker环境配置 1.拉取Docker镜像 sudo docker pull ubuntu:16.04拉取的为ununtu16版本镜像&#xff0c;环境十分干净&#xff0c;可以通过以下命令查看容器列表 sudo docker images 如果想删除多余的docker image&#xff0c;可以使用指令 sudo docker rmi -f <id&g…

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法&#xff0c;也是经常使用的命令&#xff0c; -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示&#xff0c;top命令可以看…

伊恩·斯图尔特《改变世界的17个方程》波动方程笔记

主要是课堂的补充&#xff08;yysy&#xff0c;我觉得课堂的教育模式真有够无聊的&#xff0c;PPT、写作业、考试&#xff0c;感受不到知识的魅力。 它告诉我们什么&#xff1f; 小提琴琴弦上某个小段的加速度&#xff0c;与相邻段相对于该段的平均位移成正比。 为什么重要&…

算子开发参考

神经网络框架自定义算子 https://www.tensorflow.org/lite/guide/ops_custom?hlzh-cn https://www.megengine.org.cn/doc/stable/zh/user-guide/tools/customop.html https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/custom_op/index_cn.html https://whu.obs.…

“GPC爬虫池有用吗?

作为光算科技的独有技术&#xff0c;在深入研究谷歌爬虫推出的一种吸引谷歌爬虫的手段 要知道GPC爬虫池是否有用&#xff0c;就要知道谷歌爬虫这一概念&#xff0c;谷歌作为一个搜索引擎&#xff0c;里面有成百上千亿个网站&#xff0c;对于里面的网站内容&#xff0c;自然不可…

TCP发送优化(ZeroWindow分析)

通信模型一&#xff1a; Client 创建一个 TCP 的 socket&#xff0c;并通过 SO_SNDBUF 选项设置它的发送缓冲区大小为 2048Byte&#xff0c;连接到 Server 后&#xff0c;每 1 秒发送一个 TCP报文(1024Byte)。Server 端不调用 recv()。预期的结果则分为以下几个阶段&#xff1…