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