专栏首页轮子工厂嘿~这里有一份超实用的 switch 教程,真的好想推荐给你

嘿~这里有一份超实用的 switch 教程,真的好想推荐给你

嗨喽啊,有没有想我啊~

在上次推文中介绍了关系运算符和条件运算符,今天介绍它们的好搭档,分支结构。如下图所示,左侧是顺序结构,右侧是分支结构

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。它可以根据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。

今天主要介绍 if 语句,switch 和 break 语句。具体的包括 if 结构,if else 结构,if … else if 嵌套结构,switch 和 break 语句,悬挂 else 如何避免将赋值符号 = 当作比较远算 == 使用的小技巧

1

if 语句

1.1

if 结构

if 结构如下图所示

程序在执行时,满足条件会执行某一个特定的语句块,不满足的时候就不会执行,具体使用方法如下

1.2

if…else 结构

if…else 结构如下图所示

程序执行时,满足条件会执行特定的语句块1,不满足的时会执行特定的语句块2,具体的使用方法如下

1.3

if…else if 结构(嵌套)

if…else if 结构如下图所示

程序执行时,满足条件 1 的时候会执行某一个特定的语句块1,如果不满足条件 1 要判断是否满足条件 2 ,如果满足会执行对应的语句 2 ,如果不满足(此时相当于同时不满足条件 1 和条件 2 ),会接着判断是否满足下面的条件,……一直这样判断下去,直至最后一个条件,如果仍不满足就执行语句 n+1。具体的使用方法如下

这三种结构的用法都很简单,大家课后自己练习编写一两个小程序就好,我就不举例了~

1.4

容易犯的错误

比如说我们现在要实现这样的一种功能,如果输入的是数字0,就 +1 后打印输出;如果是数字1,就 +2 后打印输出;但是有的时候为了偷懒或者没有注意,会写成下面的这种形式

执行上面的程序可以得到如下的结果

造成这个结果的原因在于上面你得程序首先了执行了第一个 if 中的语句,之后再执行第二个 if 中的语句;而不是像之前的if…else if中那样,只执行一个条件分支中的语句。所以如果几个条件之间是多选一的关系,一定要使用 if…else if 结构

2

switch 和 break 语句

处理多分支结构,可以考虑使用语法更简便的 switch 语句,如下所示

这里每个 case 后边的常量是匹配 switch 后边表达式的值,case 后边必须跟一个常量值,而不能是一个范围,如果所有的 case 均没有匹配的,那么执行 default 的内容,default 是可选的,如果没有 default,并且所有的 case 均不匹配,那么 switch 语句不执行任何动作。它与 if else 相比的好处在于它更简洁,会少些很多的大括号。

但是直接像上面那么书写程序是容易出现问题的,因为switch 语句中的 case 和 default 事实上都是“标签”,用来标志一个位置而已。当 switch 跳到某个位置之后,就会一直往下执行,比如说它满足了 case 常量表达式1 的要求之后会自动执行剩下的所有的语句和程序块,而无需判断是否满足前面所对应的 case 。所以如果只希执行某一个 case 后面的语句和程序块,还需要配合一个 break 语句,让代码在适当的位置跳出 switch,即如下所示

最后的 break 可加可不加,这里加上主要为了……看起来比较好看。好了,我不会承认我是强迫症的 |ω・)

2.1

举例说明

下面的例子实现了一个功能,输入成绩的评定结果(A,B,C)中的一个,返回其所对应的分数区间

输入 B,程序输出的结果为

2.2 分支结构的嵌套

如下图所示,在一个 if 语句中包含另一个 if 语句,我们就称之为 if 语句的嵌套,也叫分支结构的嵌套。

比如说我们尝试编写下面的流程图的所对应的程序

其中流程图所代表的含义很简单,首先判断输入的两个数 a b 是否相等,相等输出 a = b;否则判断 a 是否大于 b,如果大于 b 的话输出 a > b,否则输出 a < b,具体程序如下

2.3

悬挂else

在 C 语言中,else 始终与距离他最近的 if 相对应,考虑如下的代码

这段代码所期望达到的效果是,对于x == 0 的情形,除非 y == 0(此时调用 error 函数),否则程序不作任何处理;对于 x != 0 的情形,程序将 x + y 赋值给 z。

然而,这段代码实际功能却与编程者的意图相去甚远。原因在于 C 语言中else 始终与同一对括号内最近的未匹配的 if 结合。如果我们按照上面这段程序实际上被执行的逻辑来调整代码缩进,大致是这个样子:

也就是说,如果 x != 0,程序将不会做任何处理。如果要得到原来的例子中由代码缩进体现的编程者本意的结果,应该这样写:

现在,else 与第一个 if 结合,即使它离第二个 if 更近也是如此,因为此时第二个 if 已经被括号“封装”起来了。所以在编写多层循环嵌套的代码的时候,建议使用 {} 将对应的部分括起来,尤其是习惯使用 python 的同学,千万不要根据缩进来判断 else 与那部分相对应。

2.4

等于号带来的问题

在 C 语言中使用等号(=)作为赋值运算,使用连续两个等号(==)作为比较运算。一般而言,赋值运算相对于比较运算出现得更频繁,因此字符较少的 = 就被赋予了更常用的含义——赋值操作。此外,在 C 语言中赋值符号被作为一种操作符对待,因而重复进行赋值操作(如 a = b = c)可以很容易地书写,并且赋值操作还可以被嵌入到更大的表达式中。

但是,这种使用上的便利性可能导致一个潜在的问题:当程序员本意是在作比较运算时,却可能无意中误写成赋值运算。比如下例,该语句本意似乎是要检查 x 是否等于 y :

而实际上是将 y 的值赋给了 x ,然后检查该值是否为零。这样的判断距离我们原始想要的相差甚远。

虽然判断两个变量是否相等只能靠程序员本身来注意,但是判断一个变量是否与一个常数值相等却可以有一个较好的防范方法。比如说我们需要判断变量 a 的值是否等于 1,可以采用如下的写法

如果没有写成判断是否相等,而是写成了赋值符号,那么一定会报错的,因为一个常量是没有办法被赋值的。

参考

[1] 博客园 将暮未暮 《Java 分支结构》

[2] 百度百科 《分支结构》

[3] “小甲鱼” 视频课程《带你学C带你飞》【第一季】P11 12

本文分享自微信公众号 - 轮子工厂(Programmer-ing)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 拼多多,还是拼夕夕,根本不重要

    当时我也多次撰文表达自己的观点,还遭到不少人的攻击。时隔半年多,再次思考一下这个问题,也是件很有意思的事情。

    谭庆波
  • Linux系统的前世今生

    上世纪六十年代,人们还在用批处理计算机,也就是一次性给一批任务到计算机,然后等待结果,中途不能和计算机进行交互,而且准备作业需要耗费大量时间。于是1965年,贝...

    谭庆波
  • 程序员接私活必备的 10 个开源项目!

    基于 Angular 2, Bootstrap 4 和 Webpack 的后台管理面板框架。

    谭庆波
  • 5寒假专辑:三、表达式、选择结构​

    如 9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1。x<y<z是真还是假?带入为1<0<2,从数学的角度出发肯定是错的,但是如果是C语言那么就是正...

    用户6755376
  • Go 语言基础入门教程 —— 流程控制篇:条件语句

    流程控制主要用于设定计算执行的次序,建立程序的逻辑结构。Go 语言的流程控制和 PHP 类似,支持如下的几种流程控制语句:

    学院君
  • Scala IF…ELSE 语句(六)

    Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。

    王知无
  • 计算机科学中的数学(一)

    数学函数三要素:定义域、对应法则、值域。 对应于编程语言中的函数:形式参数、函数主体(逻辑、计算规则)、返回值。

    城市中的游牧民族
  • python条件执行

    mwangblog
  • Java入门 - 语言基础 - 10.条件语句

    原文地址:http://www.work100.net/training/java-if-else.html

    光束云
  • PHP丨PHP基础知识之条件语IF判断「理论篇」

    f语句是指编程语言(包括c语言、C#、VB、java、php、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

    大脸猫

扫码关注云+社区

领取腾讯云代金券