1、单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,第,4,章,程序的控制结构,1,程序的基本结构,2,程序流程图用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,它是程序分析和过程描述的最基本方,式,程序流程图,起止框表示一个程序的开始和结束,;,判,断框判断一个条件是否成立,,根,据判断结果选择不同的执行路,径,处,理框表示一组处理过程,;,输,入输出框表示数据输入或结果输出,;,程序流程图,注释框增加程序的解释,;,流,向线以带箭头直线或曲线形式指示程序的执行路径;,连接点将多个流程图连接到一起,常用于将一个较大流程图分割为若干部分,。,程序流程
2、图,程序流程图,顺序结构是程序按照线性顺序依次执行的一种运行方式,如图,4.3,所示,其中,S1,和,S2,表示一个或一组顺序执行的语句。,程序的基本结构,分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方,式。,由二分支结构会组合形成多分支结构,。,程序的基本结构,循环结构是程序根据条件判断结果向后反复执行的一种运行方式,,根,据循环体触发条件不同,循环结构包括条件循环和遍历循环结构,。,程序的基本结构,对于一个计算问题,可以用,IPO,描述、流程图描述或者直接以,Python,代码方式描述。本书仅对这几种描述进行介绍,功能简单的问题建议大家直接编写,Python,代码,功能复
3、杂的问题读者可以采用,IPO,描述或流程图描述为手段。下面给出,3,个微实例,通过不同的描述方法具体解释程序的三种基本结构,。,程序的基本结构实例,根据圆的半径计算圆的面积和周长。图,4.6,分别给出了该问题的,IPO,描述、流程图描述和,Python,代码描述,。,微实例,4.1,:圆面积和周长的计算。,输入,:圆半径,R,处理,:,圆面积:,S=*R*R,圆周长:,L=2*R,输出,:圆面积,S,、周长,L,程序的描述方式主要有三类,分别是自然语言、流程图和伪代码。,自然语言描述方式指使用人类语言直接描述程序,,IPO,描述是这类的一种。优点是灵活自然,缺点是比较繁琐,容易出现二义性,一个
4、描述可以产生多种不同的程序代码,。,流程图描述是程序最直观易懂的表达方式,主要适用于较短算法。优点是直观、清晰且逻辑确定,缺点是流程图绘制比较繁琐,当程序较大时流程图会很复杂,反而降低了表达的清晰性,。,程序的基本结构实例,伪代码描述是介于自然语言与编程语言之间的一种算法描述语言。使用伪代码不用拘泥于具体编程语言,对整个算法运行过程的描述最接近自然语言。与直接的自然语言描述不同,伪代码在保持程序结构的情况下描述算,法,程序的基本结构实例,计算用户给定实数的绝对值。图,4.7,分别给出了该计算问题的,IPO,描述、流程图描述和,Python,代码描述。,微实例,4.2,:实数绝对值的计算,微实例
5、4.3,:整数累加。,输入:正整数,R,处理:,S=1+2+3+,+R,输出:输出,S,计算,1,到正整数,R,的算术和。图,4.8,分别给出了该计算问题的,IPO,描述、流程图描述和,Python,代码描述。,IPO,描述、流程图描述和,Python,代码描述是解决计算问题的三种描述方式,细致程度逐步递进。,IPO,描述主要用于区分程序的输入输出关系,重点在于结构划分,主要采用自然语言描述。流程图描述侧重于描述算法的具体流程关系,流程图的结构化关系相比自然语言描述更进一步,有助于阐述算法的具体操作过程。,Python,代码描述是最终的程序产出,最为细致,。,程序的基本结构实例,程序的分支结
6、构,17,Python,中,if,语句的语法格式如下:,if :,是,if,条件满足后执行的一个或多个语句序列,,中语句通过与,if,所在行形成缩进表达包含关系,。,单分支结构,:if,语句,If,语句首先评估,的结果值,如果结果为,True,,则执行,里的语句序列,然后控制转向程序的下一条语句。如果结果为,False,,,里的语句会被跳过。,if,语句的控制过程如图,4.9,所示,单分支结构,:if,语句,if,语句中,执行与否依赖于条件判断。但无论什么情况,控制都会转到,if,语句后与该语句同级别的下一条语句。,if,语句中,部分可以使用任何能够产生,True,或,False,的语句或函数
7、形成判断条件最常见的方式是采用关系操作符。,单分支结构,:if,语句,Python,语言共有,6,个关系操作符,见表,4.1,所示。,单分支结构,:if,语句,操作符,数学符号,操作符含义,小于,=,大于等于,大于,=,=,等于,!=,不等于,一个简化版的空气质量标准采用三级模式:,0-35,为优,,35-75,为良,,75,以上为污染。人们也许不关心,PM2.5,指数值具体为多少,更关心空气质量到底怎样。计算机可以通过,PM2.5,指数分级发布空气质量提醒,。,微实例,4.4,:,PM 2.5,空气质量提醒(,1,),该问题的,IPO,描述如下,:,输入:接收外部输入,PM2.5,值,处理
8、if PM2.5,值,=75,,打印空气污染警告,if 35=PM2.5,值,75,,打印空气污染警告,if PM2.5,值,35,,打印空气质量优,建议户外运动,输出:打印空气质量提醒,微实例,4.4,:,PM 2.5,空气质量提醒(,1,),微实例,4.4,:,PM 2.5,空气质量提醒(,1,),微实例,4.4,展示了用数字进行条件比较的例子,字符或字符串也可以用于条件比较。字符串比较本质上是字符串对应的,Unicode,编码的比较,因此,字符串的比较按照字典顺序进行,。,例如,英文大写字符对应的,Unicode,编码比小写字符小。以下是一些例子,:,微实例,4.4,:,PM 2.5
9、空气质量提醒(,1,),Python,中,if-else,语句用来形成二分支结构,语法格式如下:,if :,else:,二分支结构,:if-else,语句,是在,if,条件满足后执行的一个或多个语句序列,,是,if,条件不满足后执行的语句序列,。,二,分支语句用于区分,的两种可能,True,或者,False,,分别形成执行路径。,二分支结构,:if-else,语句,二分支结构,:if-else,语句,二分支结构还有一种更简洁的表达方式,适合通过判断返回特定值,语法格式如下:,if else,其中,,一般是数字类型或字符串类型的一个值,微实例,4-5,可以改造为,:,二分支结构,:if-els
10、e,语句,Python,的,if-elif-else,描述多分支结构,语句格式如下,如图,4.10,所,示,if,:,elif:,.,else:,多分支结构,:if-elif-else,语句,多分支结构是二分支结构的扩展,这种形式通常用于设置同一个判断条件的多条执行路径,。,Python,依次评估寻找第一个结果为,True,的条件,执行该条件下的语句块,同时跳过整个,if-elif-else,结构,执行后面的语句。如果没有任何条件成立,,else,下面的语句块被执行。,else,子句是可选的,。,多分支结构,:if-elif-else,语句,微实例,4.4,通过多条独立的,if,语句对同一个变
11、量,PM,进行判断,这种情况更适合多分支结构,改造后的代码如下,:,多分支结构,:if-elif-else,语句,实例,5:,身体质量指数,BMI,33,身体质量指数,BMI,BMI,值可以“客观的”衡量个人的肥胖程度或者说健康程度。世界卫生组织(,WHO,)根据对全球人口体重的统计认为,,BMI,值低于,18.5 kg/m,2,时属于“过轻”,表明个体可能营养不良或者饮食无法保障;,BMI,值高于,25 kg/m,2,时属于“过重,”。,分类,国际,BMI,值(,kg/m,2,),国内,BMI,值(,kg/m,2,),偏瘦,18.5,=30,=28,身体质量指数,BMI,本实例编写一个根据体
12、重和身高计算,BMI,值的程序,并同时输出国际和国内的,BMI,指标建议值。该问题的,IPO,描述如下,:,输入:身高和体重值,处理:计算,BMI,值,并根据,BMI,指标分类找到合适分类,输出:打印指标分类信,息,身体质量指数,BMI,实例代码,5.1,实例代码,5.1,程序执行后的效果如下:,实例代码,5.1,采用了多分支结构对,BMI,数值按照不同区间范围进行分类,这种采用,if-elif-else,分支语句进行程序设计的方式十分常见。尽管需要同时打印国际和国内两套,BMI,标准,程序中采用两个,if-elif-else,语句分别计算两类不同,BMI,值。这种做法的好处是代码清晰明了,容易调试。,身体质量指数,BMI,实例代码,5.2,程序执行后的效果如下,:,比较实例代码,5.1,和实例代码,5.2,可以看到,,if,语句的运用主要与程序编写者对问题的理解及算法设计有关,采用一组,if,语句将两套,BMI,指标融合在一起,这实际上是算法的改变。即使对专业程序员来说,程序的简洁性和可读性都比更少的代码行数重要,这里,推荐采用实例代码,5.1,的方式编写程序,。,身体质量指数,BMI,