第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程序的注解。