3.2 选择结构
选择结构又称为条件结构或分支结构,它是程序设计中的3种基本结构之一。在编写程序时,经常会遇到一些算法步骤需要在满足一定条件时才会被执行的情况。例如,在Scratch创作的射击游戏项目中,通过判断子弹是否碰撞目标来决定是否命中,通过判断目标是否被击中而增加玩家的得分,通过判断玩家的得分来决定是否取得胜利,等等。选择结构就是用来处理这种需要根据条件来选择执行步骤的程序结构。
图3-2-1 选择结构指令积木
如图3-2-1所示,在Scratch的控制指令面板中,提供“如果…那么”指令积木和“如果…那么…否则”指令积木用来创建选择结构的程序。
3.2.1 跟我做:求绝对值
在程序中使用选择结构能够实现一些复杂的逻辑判断。在本案例中,我们以求数的绝对值为例来讲解选择结构在编程中的应用。
1.例题
设计一个求数的绝对值的算法,任意输入一个数x,计算y=|x|,并输出y的数值。要求画出程序框图,并编写程序。
2.算法分析
让我们先介绍一下有关绝对值的数学知识。
一般地,数轴上表示数a的点与原点的距离叫作数a的绝对值,记作|a|。这里的数a可以是正数、负数和0。
由绝对值的定义可知:一个正数的绝对值是它本身;一个负数的绝对值是它的相反数;0的绝对值是0。即:如果a>0,那么|a|=a;如果a=0,那么|a|=0;如果a<0,那么|a|=-a。
根据上述关于绝对值的介绍,应该使用选择结构来解决求绝对值的问题。
使用自然语言将求绝对值的算法描述如下。
第1步,输入一个数x。
第2步,如果x小于0,则使y=-x。
第3步,如果x大于或等于0,则使y=x。
第4步,输出y。
使用程序框图来描述上述算法,如图3-2-2所示。
3.编写程序
根据上述算法的描述,使用“如果…那么…否则”积木、关系运算积木、字符串连接积木、问答积木等创建一个选择结构的程序脚本,如图3-2-3所示。
图3-2-2 “求绝对值”程序框图
图3-2-3 “求绝对值”脚本清单
3.2.2 关系运算和逻辑运算
在编程中,选择结构中的给定条件在运算后会得到一个逻辑值(只有真或假两种状态),当这个逻辑值为真时,则说明给定条件成立;而当逻辑值为假时,则说明给定条件不成立。逻辑值在Scratch中也称为布尔值(Boolean)。Scratch提供两类运算积木用于对各种条件进行运算并返回一个布尔值,它们是关系运算积木和逻辑运算积木。
1.关系运算
关系运算是对两个运算量进行大小关系的比较,运算的结果是一个布尔值。Scratch提供3种积木用于进行关系运算,它们分别是小于(<)、等于(=)、大于(>)。
如图3-2-4所示,当比较数字的大小时,按照数字在数轴上的位置进行比较,在数轴右边的数字比左边的大;当比较字符串的大小时,按照字典顺序进行比较,并且不区分字母的大小写。
图3-2-4 使用关系运算积木比较数字和字母大小的示例
2.逻辑运算
逻辑运算又称为布尔运算,用来测试运算量的逻辑关系,运算的结果是一个布尔值。需要注意的是,参与逻辑运算的运算量也是一个布尔值。Scratch提供3种积木用于进行逻辑运算,它们分别是与(and)、或(or)、不成立(not)。在Scratch中,逻辑运算积木需要与关系运算积木或逻辑运算积木自身嵌套使用。
“与”积木:只有两个运算量的值为true时,它的运算结果才为true;如果其中一个运算量的值为false,那么它的运算结果就为false。
“或”积木:只有两个运算量的值为false时,它的运算结果才为false;如果其中一个运算量的值为true,那么它的运算结果就为true。
“不成立”积木:当运算量的值为true时,它的运算结果为false;而当运算量的值为false时,它的运算结果为true。
如图3-2-5所示,这是一些逻辑运算积木的使用示例,说明如下。
(1)第2行,“与”积木的两个运算量的值都为true,所以运算结果为true。
(2)第3行,“与”积木的两个运算量中有一个的值为false,所以运算结果为false。
(3)第4行,“或”积木的两个运算量中有一个的值为true,所以运算结果为true。
(4)第5行,“或”积木的两个运算量的值都为false,所以运算结果为false。
(5)第6行,“不成立”积木的运算量的值为true,所以运算结果为false。
(6)第7行,“不成立”积木的运算量的值为false,所以运算结果为true。
图3-2-5 逻辑运算积木使用示例
3.2.3 选择结构的程序设计
在程序设计中,顺序结构无法描述复杂的流程。算法中经常需要对某些条件进行判断,再根据条件是否成立而有选择地执行一些操作步骤。选择结构就是用来实现这种需求的逻辑结构。根据选择结构分支的多少,通常分为单分支选择结构、双分支选择结构和多分支选择结构。
在程序框图中,选择结构使用判断框(选择框)表示。把给定条件写在判断框内,它的两个出口分别指向两个不同的分支,在指向条件成立的出口处标明“是”或“Y”,在指向条件不成立的出口处标明“否”或“N”。一个判断框可以用来描述单分支选择结构和双分支选择结构,而通过多个判断框的组合可以用来描述多分支选择结构。图3-2-6所示的是单分支选择结构,图3-2-7所示的是双分支选择结构。
图3-2-6 单分支选择结构
图3-2-7 双分支选择结构
Scratch提供“如果…那么”积木和“如果…那么…否则”积木来支持单分支选择结构和双分支选择结构,而通过将这两种积木的组合使用也能实现多分支选择结构。
在解决实际问题中,将选择结构用于需要进行逻辑判断的算法中,并结合关系运算和逻辑运算操作,可以描述各种复杂的逻辑规则,从而使程序能够处理各种复杂的问题。
1.例题
请设计一个判断奇偶数的算法,输入一个正整数,判断它是偶数还是奇数,并画出程序框图和编写程序。
2.算法分析
如果一个正整数能够被2整除,那么该正整数是偶数;否则它就是奇数。这个判断要用到选择结构。
使用自然语言将判断奇偶数的算法描述如下。
第1步,输入一个正整数N。
第2步,判断N是否能被2整除,即判断条件“N除以2的余数=0”是否成立。
第3步,若判断条件成立,则输出N是偶数,否则输出N是奇数。
使用程序框图来描述上述算法,如图3-2-8所示。
3.编写程序
根据上述算法的描述,使用“如果…那么…否则”指令积木创建一个选择结构的程序脚本,如图3-2-9所示。
图3-2-8 “判断奇偶数”程序框图
图3-2-9 “判断奇偶数”脚本清单
由此可见,选择结构使程序具有判断和选择的能力,让程序能够根据给定条件选择不同的步骤去执行,这为编写复杂逻辑的应用程序提供了支持。
3.2.4 动手练:判断三角形构成
1.练习重点
选择结构、关系运算和逻辑运算的应用。
2.问题描述
设计一个判断三角形构成的算法,判断以任意给定的3个正实数作为三条边的边长能否构成一个三角形。请描述该算法,画出程序框图和编写程序。
3.解题分析
在任意给定的3个正实数中,如果任意两个数的和大于第3个数,那么这3个数就可以构成一个三角形。这个验证需要用到选择结构。
使用自然语言将判断三角形构成的算法描述如下。
第1步,输入3个正实数a、b、c。
第2步,判断a+b>c、b+c>a、c+a>b是否同时成立。如果成立,就可以构成三角形;否则,就不能构成三角形。
4.练习内容
图3-2-10 “判断三角形构成”程序框图
(1)在图3-2-10所示的算法流程图的程序框内写上文字说明。
(2)把图3-2-11所示的程序脚本中的空白积木替换为真实积木。
(3)运行程序,判断3条边边长分别为3.2、4.6、5.9时能否构成一个三角形?答:。
图3-2-11 “判断三角形构成”空白脚本