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

news2025/1/11 23:42:43

目录

前言

一、语句的分类

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.coloradmin.cn/o/1401756.html

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

相关文章

HackTheBox - Medium - Linux - Noter

Noter Noter 是一种中型 Linux 机器,其特点是利用了 Python Flask 应用程序,该应用程序使用易受远程代码执行影响的“节点”模块。由于“MySQL”守护进程以用户“root”身份运行,因此可以通过利用“MySQL”的用户定义函数来利用它来获得RCE并…

Jmeter 配置元件

Jmeter 配置元件 CSV 数据集配置HTTP Cookie 管理器HTTP Header 信息头管理器增加多个用户案列 使用Jmeter发送请求的时候,需要配置元件,配置请求Header、Cookie、数据集合等。可以模拟多个在线用户登录,修改请求头数据。 CSV 数据集配置 C…

node介绍

1.node是什么 Node是一个基于Chrome V8引擎的JS运行环境。 Node不是一个独立的语言、node不是JS框架。 Node是一个除了浏览器之外的、可以让JS运行的环境 Node.js是一个让JS运行在服务端的开发平台,是使用事件驱动,异步非阻塞I/O,单线程&…

Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解

文章目录 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题暴力求解使用KMP模式匹配算法KMP算法简述 KMP算法的代码实现 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题 暴力求解 func strStr(haystack string, needle string) int { L : len(need…

HNU-数据挖掘-实验3-图深度学习

数据挖掘课程实验实验3 图深度学习 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验3 图深度学习实验背景实验要求数据集解析实验内容&#xff08;0&#xff09;基础知识&#xff1a;基于图的深度学习方法浅识&#xff1a;图卷积网络 (GCN)浅识&…

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

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

【征服redis15】分布式锁的功能与整体设计方案

目录 1. 分布式锁的概念 2.基于数据库做分布式锁 2.1 基于表主键唯一做分布式锁 2.2 基于表字段版本号做分布式锁 2.3 基于数据库排他锁做分布式锁 3.使用Redis做分布式锁 3.1 redis实现分布式锁的基本原理 3.2 问题一&#xff1a;增加超时机制&#xff0c;防止长期持有…

BP蓝图映射到C++笔记1

教程链接&#xff1a;示例1&#xff1a;CompleteQuest - 将蓝图转换为C (epicgames.com) 1.常用的引用需要记住&#xff0c;如图所示。 2.蓝图中可以调用C函数&#xff0c;也可以实现C函数 BlueprintImplementableEvent:C只创建&#xff0c;不实现&#xff0c;在蓝图中实现 B…

E/E架构升级是汽车智能化发展关键

E/E架构升级是汽车智能化发展的关键。传统汽车采用的分布式E/E架构因计算能力不足、通讯带宽不足、不便于软件升级等瓶颈&#xff0c;无法满足现阶段汽车发展的需求&#xff0c;E/E架构升级将助力智能汽车实现跨越式革新。汽车E/E架构升级主要体现在硬件架构升级、软件架构升级…

140:leaflet加载here地图(v2软件多种形式)

第140个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v2版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

LateX--插入公式类型详解

文章目录 1.公式插入基本格式1.1.行间公式1.2.段间公式1.2.1.段间公式(无编号)1.2.2.段间公式(有编号) 1.3.公式行列间隔1.4.希腊字母编辑 2.公式合并与拆分2.1.公式合并2.2.公式拆分 3.公式编号3.1.大括号单编号3.2.大括号多编号3.3.多行公式单编号3.4.多行公式无编号3.5.子行…

Linux shell编程学习笔记41:lsblk命令

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

HCIA-HarmonyOS设备开发认证-HarmonyOS简介

目录 前言目标一、HarmonyOS简介1.1、初识HarmonyOS1.2、HarmonyOS典型应用场景 二、HarmonyOS架构与安全2.1、HarmonyOS架构 前言 本章主要介绍HarmonyOS分布式操作系统的概念、关键技术与能力以及HarmonyOS典型的应用场景。 目标 学习完成本课程后&#xff0c;您将能够&…

php目录操作示例

目录 1.常用函数 2.列举当前目录列表 3.判断是否是文件夹 1.常用函数 函数名功能scandir 列出指定路径中的文件和目录 opendir 打开文件夹&#xff0c;返回操作资源 readdir读取文件夹资源closedir 关闭文件夹操作资源 is_dir 判断是否是文件夹 filetype 显示是文件夹还是文…

基于Django的计算机编程技术学习与服务平台

临近毕业&#xff0c;又到了赶毕设的时候了&#xff0c;本次介绍分享一下自己的毕业设计项目吧。 项目主题&#xff1a;基于Django的计算机技术编程技术学习与服务平台 实现功能&#xff1a; 1.登入&#xff1a;用户的登陆注册 2.Python教程&#xff1a;实现用户的Python技…

学习CANopen --- [12] Abort报文

当我们使用SDO进行读写操作时&#xff0c;有时device会返回abort报文&#xff0c;意味着本次SDO读写失败。本文使用例子来讲解Abort报文&#xff0c;以及如何解读失败原因。 一 Device例子 下面是device的python代码&#xff0c;文件名叫device.py&#xff0c;device的CANopen…

「斗破年番」大紫研爆虐六星斗皇,佛怒火连回归,异火焚烧分身

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗破苍穹年番》第80期超前爆料&#xff0c;据透露韩枫以海心焰这一异火贡献给了慕骨老人&#xff0c;换取了一具斗宗躯体。通过灵魂融入&#xff0c;他成功达到了斗宗四星阶段。而与小医仙对决的莫天行&#xff0c;尽管两人实力…

基于 GPT 和 Qdrant DB 向量数据库, 我构建了一个电影推荐系统

电影推荐系统自从机器学习时代开始以来就不断发展&#xff0c;逐步演进到当前的 transformers 和向量数据库的时代。 在本文中&#xff0c;我们将探讨如何在向量数据库中高效存储数千个视频文件&#xff0c;以构建最佳的推荐引擎。 在众多可用的向量数据库中&#xff0c;我们将…

2024 年 7 个 Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

Ranger概述及安装配置

一、前序 希望拥有一个框架,可以管理大多数框架的授权,包括: hdfs的目录读写权限各种大数据框架中的标的权限,列级(字段)权限,甚至行级权限,函数权限(UDF)等相关资源的权限是否能帮忙做书库脱敏Ranger框架应运而生。 二、Ranger 2.1、什么是ranger Apache Ranger…