C语言参悟-分支和跳转

news2024/11/18 5:41:39

C语言参悟-分支跳转

  • 一、概述
  • 二、判断条件
  • 三、if else 条件判断
    • 1. 单判断
    • 2. 条件“并联”
    • 3. 条件“串联”
  • 四、switch case 条件判断
    • 1. “单刀” 开关
    • 2. “多刀”开关

一、概述

下面只是我的对于C语言的认识拙见,可以多多提出批评建议😄

计算机的诞生很大程度上就是为了来进行重复性的某些工作,就像工厂里面的流水线一样,都是在重复的循环做某一件事情,只要涉及到工作,就需要流程来控制,流程里面一个很重要的概念就是循环,循环的诞生就是解决实际工作中重复性的做一些工作。

但是如果只是靠循环重复性做某些事情是无法满足我们的需要的。

就像我们要设计了一个分拣出西红柿的流程,我们就需要用循环的把西红柿放到箱子里面。但是实际情况西红柿有大有小,有青有红的,有坏果,有好果等等情况。

我们绝对不可能直接就这样直接的把西红柿装箱了,因为分拣出来之后,不同品类的西红柿可以卖到不同的价格。所以我们就需要用这样一个判断西红柿品类的情况的机器,我了解的在里面有一个就是色选机,就可以把青色的果子和红色的果子给分开,这其实就是对西红柿的颜色给分类了。

在这里插入图片描述

那对于C语言作为一个编程语言也是遵循类似这样的流程,C语言对于这个分拣西红柿的例子提供了类似 色选器 的工具,就是本文会提到的 if switch 这种条件判断工具。

分支和跳转本质上其实就是一个 条件判断,然后选择项执行代码的一个总称。

条件判断非常有用,编程语言的灵活性很大程度上就是体现在流程控制,流程控制里面最重要的也就是 重复执行语句(循环)满足条件执行语句(分支)

在控制分支的时候,一般很少用到 类似 break; continue; goto的分支中断。本质在我的理解范围内,这些我是归类到循环中断里面的。 可以看看我的 C语言参悟-循环控制 内容。

条件判断在执行情况上体现的是要么执行,要么就不执行,也是最多 1 次,也有可能是 0 次

这个基本的逻辑是我们解决实际问题的一个依据。

二、判断条件

判断条件即是分支和跳转的灵魂。

判断的的条件和循环使用的条件是一样的。其实就是用的 1(非0) 和 0 表示的条件的是否满足。C语言就是用的就是 非0 表示 1,但是我一般还是用 的 1 来区分 0。只要一个式子是能计算出 0 或 非0 的式子就能充当判断条件的

void 类型是不能充当判断条件的哈。

C语言的语句总是会计算出一个值的,之前是没有 布尔值,好像 C99 标准就是 有 _Bool 当 true 和 false 使用啦。

  • 直接式
    直接写值。

  • 逻辑比较式
    就是基于逻辑运算符 >、 <、 >= 、<=、!=、==、&&、|| 计算出来的值。

  • 函数返回式
    就是把函数的返回值当成一个标志来判断

  • 计算式
    就是使用了 逻辑运算、算术运算、函数返回运算等组合的计算,这个是最灵活的。

下面就以 if 的判断条件举例子


//直接式-真值
if(1)
if(2)
if(-13)	//这个也是 真值哦!
if("")	//这个也是 真值哦!

//直接式-假值
if(0)
if('\0')
if(NULL)

//逻辑比较式-真值
if(1 != 2)
if(0 == 0)
if(1 == 1) //别写成了 赋值号 = 
if(1 > -12)
if('-' >= '+') // '-' 的ASCII值是 45; '+' 的ASCII值是 43
if('-' >= 44) //用的就是值比较的
if(45 >= 40 && 45 <= 50)	//逻辑合并比较
if(1 > 0 || 1 < 0)	//这个也是真值哦!C语言使用 || 判断时候是有逻辑短路性的,
						//只有 || 多个条件中,重左到右只有有一个真值就执行啦,
						// 但 && 是两个条件必须同时满足,就不具有逻辑短路

//逻辑比较式-假值
if(1 >= 2)
if('\0' > '+')
if(NULL == 1)

//函数式-真值
char m_ch;
//这个就是函数式子,这个执行了两个语句,第一个是获取字符,第二个是对读取的字符数比较
if(m_ch=getchar()) != EOF)	
{
	//从控制台读取数据
}
//这是一个函数原型:判断是否大写
int isCapitalized(char ch);
char ch = 'A';
if(isCapitalized(ch))
{
	//这里就可以判断是否大写字母
	// ch = ...语句之类
}

//计算式-真值
char m_ch = '-';
// 这个就是函数式子,这个执行了三个语句,
// 第一步是从控制台获取字符,
// 第二步是对读取的字符数比较是否是读正确没有
// 第三步是判断读取的字符是否是 '&'

if(m_ch=getchar()) != EOF && m_ch != '&')	
{
	//从控制台读取数据
}

//注意这个下面的写法和上面就是位置不对,

// 这个功能就完全不一样的哦,这个就是自己写代码的问题了
// 这里执行了三个语句,
// 第一步判断读取上一次的字符是否是 '&' :如果没初始化m_ch ,估计是有问题的,
// 第二步是从控制台获取字符,
// 第三步是对读取的字符数比较是否是读正确没有

if(m_ch != '&' && m_ch=getchar()) != EOF)
{
	//.....
}

三、if else 条件判断

1. 单判断

这个在C语言的 基础语法模式里就是:

这里的就是 选择 执行其中一条语句,要么执行 满足条件的语句 要么就执行 不满足条件的语句

if(条件)
{
	满足条件的语句
}
else
{
	不满足条件的语句
}

下面的多个 条件的也是, 其实就是 4个情况下 总是会选一个 语句执行 执行:四选一 执行记住!

if(条件1)
{
	满足条件1的语句
}
else if(条件2)
{
	不满足条件2的语句
}
else if(条件3)
{
	不满足条件3的语句
}
else
{
	不满足条件123的语句
}

2. 条件“并联”

但下面的这种,就是属于 条件并联 了, 就是多个 if else 组合嵌套。

if(条件1)
{
	满足条件1的语句
}

if(条件2)
{
	满足条件2的语句
}

这里的执行情况就是,可能是 满足条件1的语句 执行,可能 满足条件2的语句 执行,就是 0 - 2 次执行的机会

但是 满足条件1的语句 满足条件2的语句 只是在各自的条件满足后才会执行。

3. 条件“串联”

我理解的 串联是多个 if 条件嵌套的情况

if(条件1)
{
	满足条件1的语句
	if(条件2)
	{
		满足条件2的语句
	}
}

这里的执行情况就是,在 条件1成立的情况下 满足条件1的语句 一定会执行,但是 满足条件2的语句 执行是否是由 条件2 决定,也就是说 满足条件2的语句 是同时满足 条件1条件2 两个条件的。

但是 满足条件1的语句 满足条件2的语句 只是在各自的条件满足后才会执行。

这个也可以改写成 “并联” 的写法,如果能分开就分开 便于好理解,但有时候是不能分开的,就不要强行分开。

if(条件1)
{
	满足条件1的语句
}

if(条件1 && 条件2)
{
	满足条件2的语句
}

四、switch case 条件判断

switch 他的中文名字叫开关,我觉得他的工作模式也很像物理生活里面开关的。我觉的这些设计这个语言的人真大佬。

基本的模式就是

switch(条件)
{
	case '条件值1':
		语句1;
		break;
		
	case '条件值2':
		语句2;
		break;
		
	default
		//条件值以外的语句
		条件值以外的语句;
		break;
}

这个的工作模式基本原理就是:

switch( 条件) : 会计算出一个,这个值会在后面的 case '条件值’ 语句里面的 case 后面的值比较。

如果 case 这些语句存在于这个 switch( 条件) 计算出的值,那么就会跳转到 对应的 case ‘条件值’ 语句后面。不在就会跳到 default 后面的语句。

case 其实就根据 指示 跳转到哪些要执行的语句。switch 即是提供这个 指示 的东西。

break 其实就是控制这个是否接着执行的中断控制而已,就是下面 “单刀” “多刀” 开关形式

1. “单刀” 开关

对于像C下面的这种 switch 语句,表现的行为就是像下面的单刀选择,即是多选一开关图

switch(入口值)
{
	case 'A':
	//语句A-走A通道
	语句A
	break;
	
	case 'B':
	//语句B-走B通道
	语句B
	break;

	case 'C':
	//语句C-走C通道
	语句C
	break;
	
	case 'D':
	//语句D-走A通道
	语句D
	break;
	
	case 'E':
	//语句E-走E通道
	语句E
	break;
}

从入口进入,如果入口值是 ‘B’ 就是,switch就会跳转到case ‘B’ 位置,然后去执行语句B 的内容

语句B后面的 break 就是说,退出switch不去执行后面的语句了。也就是只执行完语句B,这个时候其实就是 多选一 的行为了。

	case 'B':
	//语句B-走B通道
	语句B
	break;

在这里插入图片描述

2. “多刀”开关

多刀开关其实和 单刀类似,只是 那个 break 发挥着神奇的作用,因为程序总是从上往下执行的。这个break 是一个退出条件。

那么去除一下 break 这个效果回事怎么样的呢?

switch(入口值)
{
	case 'A':
	//语句A-走A通道
	语句A
	break;
	
	case 'B':
	//语句B-走B通道
	语句B
	
	case 'C':
	//语句C-走C通道
	语句C
	
	case 'D':
	//语句D-走A通道
	语句D
	break;
	
	case 'E':
	//语句E-走E通道
	语句E
	break;
}

从入口进入,如果入口值是 ‘B’ 就是,switch就会跳转到case ‘B’ 位置,然后去执行语句B 的内容

因为语句B后面的没有break 语句,那程序就继续往下执行,一直执行到 break 或者最后的 switch 语句 ,因为default语句一般放在最后,也有说执行到default语句结束,但 default 语句不一定非要放在最后,也可以随便放的,因为一般放最后,刚好和 最后的 switch 语句位置重合了。

就像下面的开关一样是 多选 开关 的。

按顺序执行 先 语句B 后 语句C 最后 语句D, 就像下图的 BCD 线是连接在一起的。
在这里插入图片描述

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

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

相关文章

16JS07——数组

目标&#xff1a; 1、数组的概念 2、创建数组 3、获取数组中的元素 4、遍历数组 5、数组中新增元素 6、数组案例 一、数组的概念 数组是指一组数据的集合&#xff0c;其中的每个数据被称作元素&#xff0c;在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变…

Flink从入门到精通之-12Flink CEP

Flink从入门到精通之-12Flink CEP 在 Flink 的学习过程中&#xff0c;从基本原理和核心层 DataStream API 到底层的处理函数、再到应用层的 Table API 和 SQL&#xff0c;我们已经掌握了 Flink 编程的各种手段&#xff0c;可以应对实际应用开发的各种需求了。 在大数据分析领域…

lecory 波形二进制文件头(.trc)定义

1.文件头&#xff0c;从0字节开始 byte[] lecroy_trc_header new byte[]{0x23,0x39,0x30,0x30,0x32,0x30,0x30,0x30,0x31,0x34,0x34,0x57,0x41,0x56,0x45,0x44,0x45,0x53,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x45,0x43,0x52,0x4F,0x59,0x5F,0x32,0x5F,0x33,0x…

【爬虫第四章】 爬虫工具介绍

预计更新一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3…

Hack The Box - Crocodile关卡

TASK 1 任务 1 What Nmap scanning switch employs the use of default scripts during a scan? 哪个 Nmap 扫描开关在扫描期间使用默认脚本&#xff1f; -sCTASK 2 任务 2 What service version is found to be running on port 21? 发现端口 21 上运行的服务版本是什么&…

人员定位系统的功能及在不同领域的应用

人员定位系统是实时定位系统&#xff08;RTLS&#xff09;的一种&#xff0c;是用于跟踪人员位置的软硬件一体化系统。它使用无线通信技术和传感器来获取位置数据&#xff0c;并将其发送到监控中心或移动设备。它在多个领域使用&#xff0c;包括工业、医疗保健、军事、物流等。…

【网络】· 路由器中配置单臂路由和DHCP,VTP原理

目录 &#x1f349;单臂路由的工作原理 &#x1f95d;交换机配置 &#x1f95d;路由器配置 &#x1f349;路由器配置DHCP &#x1f95d;配置实例 &#x1f95d;路由器配置 &#x1f95d;验证 &#x1f349;VTP工作原理 &#x1f95d;VTP模式 &#x1f95d;VTP通告 &#x1f95d…

基于多动作深度强化学习的柔性车间调度研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Hive部署远程模式

远程模式 简介 将hive中的相关进程比如hiveserver2或者metastore这样的进程单独开启&#xff0c;使用客户端工具或者命令行进行远程连接这样的服务&#xff0c;即远程模式。客户端可以在任何机器上&#xff0c;只要连接到这个server&#xff0c;就可以进行操作。客户端可以不…

【1130. 叶值的最小代价生成树】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。每个非叶节点的值等于…

用arcgis for javascript 开发一个简单的二维地图(入门案例)

效果如图&#xff1a; 一、引入arcgis <link rel"stylesheet" href"https://js.arcgis.com/4.26/esri/themes/light/main.css" /> <script src"https://js.arcgis.com/4.26/"></script>2.加载模块 使用第二个标记从 API 加…

第四期:栈与队列的交换游戏

目录 1. 用队列实现栈2. 用栈实现队列3. 答案3.1 用队列实现栈3.2 用栈实现队列 PS&#xff1a;每道题解题方法不唯一&#xff0c;欢迎讨论&#xff01;每道题后都有解析帮助你分析做题&#xff0c;答案在最下面&#xff0c;关注博主每天持续更新。 1. 用队列实现栈 题目描述 …

RISC-V IDE MRS使用笔记(八):实现局域网下的远程调试功能

RISC-V IDE MRS使用笔记(八)&#xff1a;实现局域网下的远程调试功能 1.原理介绍 MRS调试时上位机与硬件的通信基于gdb客户端与服务端的连接。调试时&#xff0c;首先启动openocd以挂载gdbserver的服务到指定端口上。通信建立后&#xff0c;监听到界面操作后以gdb指令的形式发…

Mapbox字体切片工具fontnik部署与使用

我们在使用Mapbox的时候,不同的图层可以配置不同的字体。Mapbox主要通过分片加载SDF格式字体的方式,将比较大的字体文件传输到前端渲染使用。fontnik可以将字体文件也制作成pbf切片文件,在访问的时候,图中大括号的位置,style中的glyphs,需要根据实际字体和切片索引进行替…

基于html+css的图展示101

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

硬件速攻-SG90舵机(180和360)

外观 180度和360度的区别 180度的舵机可以控制角度 360度的舵机只能控制正反转和速度 驱动逻辑 180度 t 0.5ms——————转动 0 t 1.0ms——————转动 45 t 1.5ms——————转动 90 t 2.0ms——————转动 135 t 2.5ms——————转动180 360度 t 0.5ms—…

微信小程序授权给第三方平台后,“消息与事件接收URL“接收不到客服消息

记录微信小程序授权第三方平台遇到的问题 问题表现为&#xff1a;微信小程序授权给第三方平台后&#xff0c;在小程序客服发送消息&#xff0c;消息与事件接收URL接收不到客服消息 小程序授权配置如下&#xff1a; 1、小程序已授权第三方平台“小程序客服管理”权限 2、小程…

韧性数据安全体系缘起与三个目标 |CEO专栏

今年4月&#xff0c;美创科技在数据安全领域的新探索——“韧性”数据安全防护体系框架正式发布亮相。 为帮您更深入了解“韧性数据安全”&#xff0c;我们特别推出专栏“构建适应性进化的韧性数据安全体系”&#xff0c;CEO柳遵梁亲自执笔&#xff0c;进行系列解读分享。 首期…

4.4. 对象序列化与反序列化

在本节中&#xff0c;我们将详细讨论Java中的对象序列化与反序列化概念、使用方法以及实例。对象序列化是将对象的状态信息转换为字节流的过程&#xff0c;而反序列化则相反&#xff0c;是将字节流恢复为对象的过程。 4.4.1 为什么需要对象序列化&#xff1f; 对象序列化的主…

SDN笔记

SDN是软件定义网络的简称&#xff0c;在SDN中&#xff0c;网络的控制面与数据面分离&#xff0c;并且通过中心控制器进行统一管理。SDN的主要目标是提高网络的灵活性、可编程性和智能化程度&#xff0c;从而更好地适应不断变化的业务需求。SDN可以通过控制器来管理网络设备&…