
第2章 选择
“选择”是计算机语言中最基础的语法结构,也被称为“条件结构”,其典型流程及语法格式如下表所示。

关于流程图

早期的计算机语言教程都配有很多流程图,现在的书则很少见了。这大概是因为新的计算机语言功能都很强大,传统流程图已经很难表达。本书只是在讲解基本的程序结构时会用到流程图。
读懂和绘制流程图并不是学习编程的必要条件。计算机程序代码是给计算机用的,是人与机器之间的交流手段。而流程图是却给人看的,本质上是一种自然语言。
流程图可用于向他人解释你的编程思想、程序的原理及运行过程。如果你是在一个人编写程序,那么会不会流程图真的无所谓。但是对于软件行业的从业者来说,独立工作是不可能的事情。
在我初学计算机编程的时候,学生中有一个很有意思的现象—往往特别会编程的人,都不怎么会画流程图;而流程图画得好的,却不怎么会编程。
可见,会不会画流程图与会不会编程之间,并不具有正相关性。
但最终的结果你们应该能猜到,会流程图的可以当项目主管,而只会编程的只能当“码农”。
流程图还是有必要学会的,至少高考会考。而且无论你将来上大学、读研学什么专业、从事什么样的工作,绘制流程图都应该成为一种基本的能力。
下面先来看几个实例。
例2.1 求绝对值
任务描述
在窗口中输出“请输入一个数:”,并输入一个数。
输出这个数的绝对值。
Python
源程序

程序注解
· if a<0:如果a<0成立,语句后应以:结束。
a<0称为“条件表达式”,如果条件成立,则表达式的值为真(记为True或1),如果条件不成立,则值为假(记为False或0)。
<称为“关系运算符”,在Python中共有7种关系运算符,如下表所示。

注意:判断两个量是否相等要用==,而不能用=。前面已经讲过,=是赋值运算符,不能用作量的比较,这一点要切记。

· 语句缩进
条件结构的执行语句应该有统一的缩进尺寸。在Python中,语句的层次结构是依靠缩进尺寸来区分的。同一层次的语句缩进必须保持一致。
运行结果(粗斜体字为输入)
请输入一个数:-3
|a|=3.0
请输入一个数:4
|a|=4.0
C++
源程序

程序注解
· if(a<0):
a<0为条件表达式(参见本例Python程序下的注解)。在C/C++中,表达式为真,记为True或1;为假记为False或0。
C/C++中,共有6种关系运算符,除了没有<>,其余与Python中的意义和用法相同。
· 层次结构
C/C++实例程序中也常见到语句缩进,但这不是必需的,只是为了让层次看起来更清晰、明确而已。C语言也可以将多个语句写到同一行中,除了以#开头的预编译行、以//开头的注释行需要单独成行,你甚至可以将整个主函数写到一行中。
C/C++的层次结构是由大括号({ })来确定的,同一层次的语句包含在同一个大括号({ })中。如果大括号({ })中只有一个语句,则大括号({ })可省略。
运行结果(粗斜体字为输入)
请输入一个数:-3
|a|=3
请输入一个数:4
|a|=4
例2.2 今天是星期几(1)
任务描述
在窗口中输出“今天是星期几?”并输入一个数。
如果是1~5,输出“今天上学”,否则输出“今天休息”。
程序代码如下。
Python
源程序

程序注解
· a>=1 and a<=5:
and在这里称为“逻辑与运算符”,此处代表如果前、后两个表达式均为真,则结果为真。
Python中的逻辑运算符有3种,如下表所示。

运行结果(粗斜体字为输入)
今天是星期几?4 今天上学
今天是星期几?7 今天休息
C++
源程序

程序注解
· a>=1&&a<=5:
&&在这里称为“逻辑与运算符”,此处代表如果前、后两个表达式均为真,则结果为真。
C/C++中的逻辑运算符与Python相同,也有3种,只是写法不同,如下表所示。

运行结果
与Python相同。
现在重新运行程序,如果输入的是12,结果如何呢?
今天是星期几?12 今天休息
这显然不符合题意。
现在改一下任务要求,如果输入数值超出1~7,则输出“请输入1~7”。
程序代码如下。
Python
源程序

这里用到了elif。
运行结果(粗斜体字为输入)
今天是星期几?4 今天上学
今天是星期几?7 今天休息
今天是星期几?12 请输入1~7
C++
源程序

在C/C++中没有elif语句,所以这里使用了一个嵌套选择结构。
运行结果
与Python相同。
本章要点
本章学习了Python和C/C++中选择结构的基本用法,其使用方法对例如下表所示。

练习2 简单人机对话(2)
任务描述
在窗口中输出“请你在鱼、鸟和兽之间选择一样,并默记”
输出“请问它有羽毛吗?(y/n)”
输入y或n。
如果输入的是y,则输出“你选的是鸟。”
如果输入的是n,则输出“那请问它有腮吗?(y/n)”
输入y或n。
如果输入的是y,则输出“你选的是鱼。”
如果输入的是n,则输出“你选的是兽。”
如果输入的不是y或n,则输出“请输入y或n。”
语句提示
C++
因要求输入的y或n是字符,需要使用字符变量。
字符变量的定义和使用格式如下。
char c; if(c=='y')……
详细说明可参考例3.2程序的注解。