摘要
第3章
程序控制结
构
学习目标:
.学会用传统流程图和N-S流程图表示问题求解的算法。
.学习并掌握选择结构的流程,能熟练应用单分支、双分支、多分支和嵌套分支的if
语句编写程序。
.学习并掌握循环结构的流程,能熟练使用while和for语句编写程序。
.学习并掌握循环的退出机制,能熟练应用break和continue语句。
.学习并掌握循环的嵌套,能熟练应用多重循环解决较复杂的问题。
3.控制结构概述
1
1.处理模式
3.1
从实际中可发现,人类处理问题的方式具有某些固定的模式化特征。下面举个生活
中的例子加以说明。
【例3-1】生活中的处理现象。
小明早上起床,洗漱完毕,吃些早点,然后准备去学校。走到门口,准备像往常一样穿
上皮鞋,但想到今天有体育课,就穿了运动鞋去学校。放学回家,吃完晚饭,休息一会儿开
始写作业。今天只有语文作业,但老师布置了20 道相同的抄写题,小明没有办法,只有一
道一道地做,直到全部做完,再去睡觉。
从上面的例子不难看出,小明在这一天中的行为方式具有一些明显特征。如“早上起
床、洗漱、吃早点”和“放学回家、吃晚饭、休息、写作业”等一系列的活动是按部就班的,按
顺序一步步地完成的。这是一种“顺序”特征。
走(“) 到门口,准备像往常一样穿上皮鞋,但想到今天有体育课,就穿了运动鞋去学校”,
小明在穿鞋的问题上做了个判断,根据当前情况决定穿什么鞋。如果没有体育课,他会穿
皮鞋。这反映出一种“选择”特征。
“老师布置了20 道相同的抄写题,小明没有办法,只有一道一道地做,直到全部做
完”,这里明显反映出“重复”和“循环”的特征。
生活中还可以举出很多类似的例子,虽然具体情况不同,但在处理流程上都表现出
“顺序”“选择”或“循环”的特征。可以这样说,任何问题都是按照某些特定的处理模式来
进行处理的。人类按照这样的方式处理问题,计算机其实和人类处理问题的方式一样,但 计算机要对这些处理方式进行具体、准确的描述,形成“算法”,并让处理器按照算法执行,
从而完成问题的处理。
3.2
算法的结构化表示
1.
问题的处理一般表现为顺序、选择和循环3种模式,算法要采用相应的方法将各种处
理模式表示出来,常用的表示方法有自然语言、流程图、伪代码等方式。
本节只介绍算法的流程图表示方式,因为流程图通俗易懂,能很好地反映算法的“结
构性”。流程图有两种:一种是传统流程图;另一种是N-S流程图。下面分别介绍。
1.
传统流程图
传统流程图用一系列图形、流程线来描述算法。传统流程图的基本图形元素如图3-1
所示。
图3-1 传统流程图的基本图形元素
应用上述图形元素,顺序、选择和循环表示的3种处理模式如图3-2所示。
图3-2 传统流程图表示的3种处理模式
【例3-2】将例3-1的处理流程用传统流程图表示。
根据前面的分析,例3-1所举的生活中的例子能较容易地用传统流程图表示,如图3-3
所示。
从图3-3可以看到,用传统流程图表示的算法逻辑清楚、易懂,结构性较好。但缺点
是,一旦算法复杂,则绘制比较麻烦,尤其是流程线若存在过多,会导致算法的结构清晰度
变差。下面介绍一种结构性更好的流程图表示形式。
第
3
章程序控制结构
53
图3-3 例3-1的传统流程图
2.N-S流程图
1973年,美国的计算机科学家Isi和B.n提出了一种新的流程图形
.NaShneiderma
式,在这种流程图中把流程线接近去掉了,全部算法写在一个矩形框内,在框内还可以包
含其他框,即由一些基本的框组成一个较大的框。这种流程图称为N-S流程图(以两人
名字的头一个字母组成),这种流程图能非常清晰地反映算法的结构性。图3-4用N-S流
程图表示顺序、选择和循环结构。
图3-4 N-S流程图表示的3种处理模式 a,b,c = sorted(eval(input('输入3 个整数(逗号间隔):')),reverse=True)
print('降序结果:',a,b,c)
程序运行结果如下:
输入3 个整数(逗号间隔):5,8,3
降序结果: 8 5 3
此处只有两行代码。input()函数返回一个由逗号间隔的3个整数构成的字符串,
如"3,8,5"。eval()函数相当于将字符串两端的引号去掉,得到表达式的原本意义。
Python中,表达式3,8,5表示一个元组,则eval("3,8,5")得到元组(3,8,5)。再用
sorted()函数对该元组进行降序排列sorted((3,8,5),reverse=True),得到列表[8,5,
3]。最后将排序得到的列表进行多重赋值,将其中的元素依次赋给变量a、b、c,得到所需
结果。
【例3-10】 输入年份,判断是否为闰年。符合以下两个条件中的任何一个都是闰
年:①能被400整除;②能被4整除但不能被100整除。
分析角度不同,可以写出不同的程序。
方法一:使用