C语言参悟-分支和跳转

这篇具有很好参考价值的文章主要介绍了C语言参悟-分支和跳转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

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

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

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

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

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

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;

C语言参悟-分支和跳转

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 线是连接在一起的。
C语言参悟-分支和跳转文章来源地址https://www.toymoban.com/news/detail-466384.html

到了这里,关于C语言参悟-分支和跳转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言参悟-循环控制

    下面只是我的对于C语言的认识拙见,可以多多提出批评建议😄 计算机的诞生很大程度上就是为了来进行重复性的某些工作,就像工厂里面的流水线一样,都是在重复的循环做某一件事情,只要涉及到工作,就需要流程来控制,流程里面一个很重要的概念就是循环,循环的诞

    2024年02月05日
    浏览(31)
  • C语言参悟-数据类型

    编程语言为抽象这个物理世界提供了依据,其中对于描述物理世界的情况提供了一个叫做数据类型的名字,这种数据类型是我们人类能够认识的东西,就像数字,字母,字符之类的。 C语言中也提供了数据类型这种说法,就像下面的图片里面猴子,我们用C语言描述图片里面的

    2024年02月14日
    浏览(36)
  • 「Vue|网页开发|前端开发」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转

    本文主要介绍如何使用路由控制来实现将一个单页面网站扩展成多页面网站,包括页面扩展的逻辑,vue的官方路由vue-router的基本用法以及扩展用法 「Vue|网页开发|前端开发」01 快速入门:快速写一个Vue的HelloWorld项目 我们在进行网站开发的时候,大多数都是需要有多个页面

    2024年02月11日
    浏览(48)
  • 【vue3】在setup组合式api中不能使用beforeRouterEnter,监听来源路由和跳转的目标路由

    注意了,在vue3中的setup函数中是不可以使用beforeRouterEnter这个路由守卫的,请看vue-router的官方文档  导航守卫 | Vue Router 由此可见,在使用组合式api的时候,只有update和leave守卫,不符合我们的要求。 使用 script  setup/script这种形式的脚本,无法监听来源路由 方法一、我们可以

    2024年02月13日
    浏览(38)
  • 404 not found nginx(dist打包后,刷新和跳转都是404 not found nginx的问题) 解决方案(打包发布在服务器)

    当我们执行了yarn run build之后,生成dist文件 我们将代码放入nginx-1.24.0下面的html中 然后我们就配置conf文件下的nginx.conf  配置方面不介绍了,主要问题是因为没有加这句话  问题分析 index index.htm index.html; index 就是根目录,也就是只识别“/”结尾的,输入不存在或者刷新页面

    2024年02月08日
    浏览(44)
  • C++ 流程控制(分支、循环、跳转)

    2024年02月08日
    浏览(51)
  • C++参悟:正则表达式库regex(更新中)

    C++标准库为我们提供了处理字符串的正则表达式库。正则表达式是一种用于在字符串中匹配模式的微型语言。 正则表达式在查询、替换字符串的时候有很多快速的使用场景,是一个经常使用的工具。正则表达式需要使用到正则表达式的语法,这个语法是独立于编程语言外的一

    2024年01月21日
    浏览(48)
  • [机缘参悟-103] :IT人关于接纳的思考与感悟

    目录 前言: 一、接纳 1.1 什么是接纳 1.2 对接纳的误解 1.3 接纳的含义 1.4 \\\"存在即合理\\\" VS 接纳  1.5 接纳 VS 躺平 VS 随遇而安 1.6 为什么现实总是那么不尽人意 1.7 现实世界的多样性 1.8 接纳与认命 1.9 不接纳的表现 外界现实总不会如心所意, 现实总 是那么不尽人意,如何与

    2024年02月10日
    浏览(38)
  • 【C语言】分支和循环

    C语言是结构化的程序设计结构,这里的结构是指 顺序结构,选择结构,循环结构 。 我们可以使用 if , switch 实现分支结构,使用 for , while , do while 实现循环结构。 if的语法形式如下: 表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行 在C语言中,

    2024年02月04日
    浏览(48)
  • 【C语言】选择语句(分支语句)

    ㊙️小明博客主页:➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 提示:本篇文章为C语言选择语句的个人总结,内容如若有误,请及时联系我更正。 转载请注明原创,谢谢。 提示:以下是本篇文章正文内容:   假设你在水果摊购买一斤的水果,摊主会根据你购

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包