(上) 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语句就介绍到这里,如果文章有什么错误,希望各位可以在评论区斧正。

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

摇臂MG995舵机模块实战教程

简介 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程序连续控制其转角,因而被广泛应用智能小车以实现转向以及机器人各类关节运动中。舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器…

计算机网络——面试问题

1 从输⼊ URL 到⻚⾯展示到底发⽣了什么? 1. 先检查浏览器缓存⾥是否有缓存该资源,如果有直接返回;如果没有进⼊下⼀ 步⽹络请求。 2. ⽹络请求前,进⾏ DNS 解析 ,以获取请求域名的 IP地址 。 3. 浏览器与服务器…

Sqoop与Kafka的集成:实时数据导入

将Sqoop与Kafka集成是实现实时数据导入和流处理的关键步骤之一。Sqoop用于将数据从关系型数据库导入到Hadoop生态系统中,而Kafka则用于数据流的传输和处理。本文将深入探讨如何使用Sqoop与Kafka集成,提供详细的步骤、示例代码和最佳实践,以确…

Git与GitHub零基础教学

大家好,我是星恒,这个帖子给大家分享的是git和github的全套教程,包含github初始,git常用命令以及基本使用,git的ssh链接github,github使用token登录,github和idea的配合,一些平时常用…

适合初学者的 机器学习 资料合集(可快速下载)

AI时代已经来临,机器学习成为了当今的热潮。但是,很多人在面对机器学习时却不知道如何开始学习。 今天,我为大家推荐几个适合初学者的机器学习开源项目,帮助大家更好地了解和掌握机器学习的知识。这些项目都是开源的,…

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而,由于其开放性,它可以并且已经应用于更多的领域。CIP网络库包含若干卷: 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库&#xff0…

信息安全的脆弱性及常见安全攻击

目录 信息安全概述信息安全现状及挑战传统安全防护逐步失效 安全风险能见度不足看不清资产看不见新型威胁看不见内网潜藏风险 常见的网络安全术语信息安全的脆弱性及常见安全攻击网络环境的开放性协议栈的脆弱性及常见攻击常见安全风险 协议栈自身的脆弱性网络的基本攻击模式 链…

Dubbo的几个序列化方式

欢迎订阅专栏,会分享Dubbo里面相关的技术实现 这篇文章就不详细的介绍每种序列化方式的实现细节,大家可以自行去问度娘,我也会找一些资料。需要注意的是,这个先后顺序不表示性能优越 ObjectInput、ObjectOutput 这两是Dubbo序列…

Linux_清理docker磁盘占用

文章目录 前言一、docker system 命令1. docker system df(本文重点使用)2. docker system prune(本文重点使用)3. docker system info4. docker system events 二、开始清理三、单独清理Build Cache四、单独清理未被使用的网络 前…

如何理解 GO 语言的接口 - 鸭子模型

个人认为,要理解 Go 的接口,一定先了解下鸭子模型。 鸭子模型 那什么鸭子模型? 鸭子模型的解释,通常会用了一个非常有趣的例子,一个东西究竟是不是鸭子,取决于它的能力。游泳起来像鸭子、叫起来也像鸭子…

【Emgu CV教程】5.6、几何变换之LinearPolar()极坐标变换

LinearPolar()线性极坐标转换函数用于将图像从笛卡尔坐标系转换为极坐标系,太难懂了,还是简单的说吧 笛卡尔坐标系就是平面直角坐标系,用X轴、Y轴表示的图像,最常用的表示方式,比如灰度图Point(360,100) 230&#xff…

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)四

第五部分、数组和广义表详解 数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵…

【工具使用】Keil5软件使用-基础使用篇

一、概述 本文面向未接触过Keil的新手,如果是职场老手可跳过此篇。为了快速上手,本文会跳过很多细节及解释,如需要了解原理,请移步进阶篇。 二、 软件介绍 Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调…

【Git不走弯路】(二)提交与分支的本质

1. 前言 提交与分支是Git中两个基本对象,对初学者而言需要花些时间理解。正如我们之前所说,计算机中很多新概念是新瓶装旧酒。计算机技术来源于需求,服务于需求,需求是计算机技术的出发点和落脚点。梳理清楚工程实践中&#xff0…

【开源】基于JAVA的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 ​​​​​​​​​​​​​​主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运…

transdata笔记:手机数据处理

1 mobile_stay_duration 每个停留点白天和夜间的持续时间 transbigdata.mobile_stay_duration(staydata, col[stime, etime], start_hour8, end_hour20) 1.1 主要参数 staydata停留数据(每一行是一条数据)col 列名,顺序为[‘starttime’,…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目,运行ios环境的时候报错没有CocoaPods,安卓环境可以正常运行,当时一脸懵逼,网上搜索了一下,有给我讲原理的,还有让我安装这插件那插件的,最终把电脑搞得卡死&#x…

代码随想录算法训练DAY25|回溯2

算法训练DAY25|回溯2 216.组合总和III 力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n …

Docker安装启动、常用命令、应用部署、迁移备份、Dockerfile、Docker私有仓库

目录 1.Docker安装与启动 1.1 安装Docker 1.2 设置ustc的镜像 1.3 Docker的启动与停止 2.常用命令 2.1 镜像相关命令 2.1.1 查看镜像 2.1.2 搜索镜像 2.1.3 拉取镜像 2.1.4 删除镜像 2.2 容器相关命令 2.2.1 查看容器 2.2.2 创建与启动容器 2.2.3 停止与启动容器 2.…