购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 用流程图表示

流程图是一种传统的算法表示法,它用一些图框来代表各种不同性质的操作,用流程线来指示算法的执行方向。由于它直观形象,易于理解,所以应用广泛。

2.2.1 流程图符号

下面列出一些常见的流程图符号,如表2.1所示。其中,“起止框”用来标识算法的开始和结束;“输入/输出框”用来表示算法的输入或者输出;“判断框”用来判断给定的条件,并根据条件成立与否,决定如何执行后续操作;“处理框”用来表示算法中变量的一些操作,如变量计算、赋值等;“流程线”用来表示算法的流向,即算法下一步该往哪个方向进行;“注释框”用来对算法进行注释;“连接点”用于将画在不同地方的流程线连接起来。

表2.1 流程图符号

【实例2.3】 判断输入的数字是奇数还是偶数。

判断一个数是奇数还是偶数的条件如下:用该数除以2,余数为0,则为偶数,否则为奇数。

本实例的算法过程用流程图表示,如图2.12所示。其过程分析如下:

(1)程序开始,用户输入一个数n。

(2)用菱形框判断n与2相除取余,结果是否为0。

(3)判断结果为True,则输出“此数为偶数”;判断结果为False,则输出“此数为奇数”。

(4)程序结束。

【实例2.4】 大学毕业季:智联招聘投简历。

某企业招聘,公司人事会根据求职者填写的身高和年龄,判断是否符合公司的初试条件(年龄不低于25岁,身高不低于1.7米)。满足条件,通知应聘者通过初试,准备参加面试和笔试;否则就通知没有通过初试。

本实例的算法过程用流程图表示,如图2.13所示。其过程分析如下:

图2.12 判断奇数还是偶数

图2.13 是否通过初试

(1)程序开始,输入身高h和年龄a。

(2)用菱形框判断h是否大于等于1.7,同时a是否大于等于25。

(3)判断结果为True,则输出“通过初试”;判断结果为False,则输出“没有通过初试”。

(4)程序结束。

2.2.2 三大基本结构

1966年,计算机科学家Bohm和Jacopini为了提高算法质量,提出了3种基本程序结构,即顺序结构、选择结构和循环结构,任何一个算法都可由这3种基本结构组成。这3种基本结构之间可以并列,也可以相互包含,但不允许交叉,不允许从一个结构直接跳转到另一个结构内部。只要规定好这3种基本结构的流程图的画法,就可以画出任何算法的流程图。

1.顺序结构

顺序结构是一种简单的线性结构,各操作将按照在程序中出现的先后顺序依次执行。如图2.14所示,执行完语句1指定的操作后,接着会执行语句2指定的操作。顺序结构中,只有一个入口点语句1和一个出口点语句2。

【实例2.5】 农夫、羊、狼及白菜过河。

一名农夫要将一只狼、一只羊和一袋白菜运到河对岸,但农夫的船很小,每次只能载下农夫本人和一只动物,或者农夫与白菜。农夫不能把羊和白菜留在岸边,因为羊会把白菜吃掉;也不能把狼和羊留在岸边,因为狼会吃掉羊。那么,农夫怎样才能将这3样东西送过河呢?

本实例的流程图可以采用顺序结构来实现,如图2.15所示。

图2.14 顺序结构

图2.15 农夫、羊、狼和白菜过河

2.选择结构

选择结构也称为分支结构,其必须包含一个判断框,用于判断某个条件是否成立,并根据判断结果,执行不同的语句,从而模拟现实中的选择情况。

如图2.16所示的选择结构,需要判断给定的条件P是否成立,如果判断结果为True,则执行语句;如果判断结果为False,什么也不做。

如图2.17所示的选择结构,需要判断给定的条件P是否成立,如果判断结果为True,则执行语句1;如果判断结果为False,则执行语句2。

图2.16 选择结构1

图2.17 选择结构2

【实例2.6】 判断成绩是否及格。

输入考试成绩,判断该成绩是否为大于等于60分。如果判断结果为True,表示考试成绩及格;如果判断结果为False,表示考试成绩不及格。

本实例采用选择结构来实现,流程图如图2.18所示。

3.循环结构

生活中有时会遇到往返重复的操作,使用循环结构处理这类问题最好不过。在循环结构中,某个判断条件成立时,可反复地执行一系列操作,直到该条件不成立时,才终止循环。

按照判断条件出现的位置,可将循环结构分为当型循环结构和直到型循环结构。

如图2.19所示是当型循环结构的流程图。这里,先判断条件P是否成立,如果返回的结果是True,则执行语句;执行完语句后,再次判断条件P是否成立,如果返回的结果仍是True,接着再执行语句;如此反复,直到判断条件P返回的结果是False,此时不再执行语句,而是跳出循环。

图2.18 判断成绩是否及格

图2.19 当型循环

如图2.20所示是直到型循环结构的流程图。这里,先执行语句,然后判断条件P是否成立,如果判断条件P返回的结果为True,再次执行语句;继续判断条件P是否成立,如果返回的结果仍为True,接着再执行语句;如此反复,直到判断条件P返回的结果为False,此时不再执行语句,而是跳出循环。

可见,当型循环和直到型循环不同之处就是:当型循环是先判断条件再执行循环体;而直到型循环是先执行一次循环体,再进行条件判断。也就是说,不论第一次条件判断的结果是否为True,直到型循环都会执行一次循环体。

【实例2.7】 用不同循环结构实现1~100的求和问题。

计算1~100(包括1和100)所有整数的和。

本实例可以用当型循环结构来表示,流程图如图2.21所示;也可以用直到型循环结构来表示,流程图如图2.22所示。

图2.20 直到型循环

图2.21 当型循环结构求和

图2.22 直到型循环结构求和

图2.21所示流程图的执行过程如下:

(1)程序开始,首先对变量进行初始化,i=1,sum=0。

(2)判断i的值是否小于等于100,因为i=1,条件判断结果为True,先执行“sum=sum+i;”,即sum=0+1=1;再执行“i++;”,即i=1+1=2。

(3)再次判断i的值是否小于等于100,此时i=2,条件判断结果为True,先执行“sum=sum+i;”即sum=1+1=2;再执行“i++;”,即i=2+1=3。

(4)如此循环下去,直到i=101时,再次判断i的值是否小于等于100,条件判断结果为False,跳出循环,输出sum的值。

(5)程序执行结束。

图2.22所示流程图的执行过程如下:

(1)程序开始,首先对变量进行初始化,i=1,sum=0。

(2)然后执行“sum=sum+i;”,即sum=0+1=1;再执行“i++;”,即i=1+1=2。

(3)判断i的值是否小于等于100,此时i=2,条件判断结果为True,执行“sum=sum+i;”,即sum=1+1=2;再执行“i++;”,即i=2+1=3。

(4)再次判断i的值是否小于等于100,此时i=3,条件判断结果为True,执行“sum=sum+i;”,即sum=2+1=3;再执行“i++;”,即i=3+1=4。

(5)如此循环下去,直到i=101时,再次判断i的值是否小于等于100,条件判断结果为False,跳出循环,输出sum的值。

(6)程序执行结束。 zc55JbjDSl05TfNw90lcsWzlLis4yJUEdBMNgh1ccqRmRbNGspHN+GCus0zJch5s

点击中间区域
呼出菜单
上一章
目录
下一章
×