第8章 程序流程控制.ppt
《第8章 程序流程控制.ppt》由会员分享,可在线阅读,更多相关《第8章 程序流程控制.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 程序流程控制在前面的章节中,程序的执行都是按照语句出现的先后次序来执行的。在实际的计算任务中,能够按照固有的执行次序完成计算的问题只是少数的简单问题。大多数的问题往往在程序执行过程中,根据实现设计的计算步骤(也就是通常所说的算法)往往会出现若干分支选项或是重复计算的情况。流程控制就是提供一种选择,使得除了常规的串行计算序列之外,能够应对这个序列中可能出现的选择分支与循环的情形。本章将介绍算法与流程的基本知识和两种基本的控制结构。8.1 算法与流程要想充分利用计算机的高速计算能力来处理实际的问题,需要使用者能够将问题抽象成计算能够理解的计算机语言,也就是使用者应该编写计算机程序的能力。那
2、么学习了一种计算机语言是否就具有了编程的能力呢?答案是否定的。使用者还需要具有将实际问题分解成一连串具体可操作步骤的能力。这就涉及到算法的问题了。通常意义上的编程高手,不仅仅是指这个人对于某一门计算机语言有深入的研究,还指这个人在算法上也有一定的造诣。8.1.1 算法学习一种计算机语言仅仅学习它的语法规则还不够,更重要的是要学习如何针对各种类型的具体问题,制定行之有效的解决方法和操作步骤,也就是所谓的算法(Algorithm)。只要学会了制定正确且有效的算法,用何种高级计算机语言来编写具体的计算机程序就仅仅只是一个工具选择的问题了。因此,算法的设计也是计算机程序设计的核心内容。需要注意的是,算
3、法这个词所涉及的并不仅仅是计算的问题。算法可以包括很多领域,泛指为解决实际而采取的方法和步骤。在英语中,计算方法和算法是两个词。前者是“Computational Method”,后者是“Algorithm”。计算方法更像通常意义上所理解的算法,它指求解数值解的近似方法。实际的“算法”一词含义更为广泛。它不仅仅指数值计算中的计算方法,还可以指事务处理中的规章流程、物资供应中的调配方法、糕点师傅制作蛋糕的技法等。而程序员所关心的,自然仅仅是指能够在计算机上实现的算法。8.1.2 传统流程图流程图是一种算法描述手段,它用一些图框来表示计算过程中各种类型的操作。在图框中写出算法的各个步骤,然后用带箭
4、头的线条把这些图框连接起来,以表示执行的先后顺序。采用这种方式来表示算法,形象直观,理解起来非常容易。美国国家标准化协会ANSI规定了一些常用的流程图符号,已为世界各国的程序工作者普遍采用。下面介绍最常用的一些流程图符号。8.1.3 基本程序结构前一节介绍的流程图又称为传统流程图。传统流程图中使用流程线来指出各个框之间的执行顺序,流程线在使用上没有严格限制。因此,流程图的绘制者可以根据自身的意愿将流程线画成他想要的形式,随之而来的是程序的执行流程也随意地转来转去。这种做法使流程图显得杂乱无章,阅读者需要花费相当的精力去追踪程序流程,对算法逻辑的理解也较为困难。人们为这种情况起了一个名字BS,意
5、思是一碗面条。要提高算法的描述质量,使算法在设计和阅读方面都变得方便,就必须限制流程线的滥用。即流程线不能毫无规律的四处乱转,必须按一定的方向来绘制。但是,分支结构和循环结构又是在描述算法时不可避免的。一个算法不可能按从头到尾的顺序执行下来,总会有一些向前或向后的非顺序转移。针对这些问题,人们设计了三种最基本的流程结构,使用这三种基本结构就可以表示一个良好的算法。可以将这些基本结构称为预制件,一个算法就是通过这些预制件像搭积木一样按顺序排列起来的。8.1.4 用伪代码表示算法用前面介绍的流程图来表示算法直观易懂,但画起来却比较费事。同时在设计一个算法时往往不可能一蹴而就,经常需要对原来的想法进
6、行反复修改。这时,想要在已经画好的流程图上添加新的元素就非常困难了。因此,流程图只适宜于表示算法,用在设计算法的过程中并不是很理想(特别是算法比较复杂,需要经常进行修改时就显得更不方便)。为了方便的进行算法设计,经常会使用一种称为伪代码的工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。使用伪代码来描述代码就像写一篇带命题的叙事作文一样,只要按照事件发生的逻辑先后次序来书写就可以了。它不使用图形符号,因此描述算法时相当方便,格式紧凑、易于理解,最重要的是它很易于向计算机程序语言过渡。8.2 选择结构选择结构提供一种多义执行的手段,即当判断条件满足特定要求时就去执行特定的操作。
7、选择结构是三种基本程序结构之一。Fortran语言中提供了多种语句来实现选择结构。本节将主要介绍Fortran语言中选择结构的实现方式和相关的语句。8.2.1 判断语句IF和分支选择语句SELECT CASEIF语句和SELECT CASE语句在Fortran语言中都能够用于构造选择结构,两者在语言功能上并无多大差别。本节简要介绍IF语句和SELECT CASE语句的基本概念和作用,详细的用法会在后面的小节进行介绍。在Fortran 77时代,选择结构是通过IF语句和IF构造来实现的。其中,IF语句只能提供单一选择,即条件满足就执行某种操作,条件不满足则不执行任何操作。IF语句在有多个并列条件
8、需要判断时就很不方便,而且一旦某一个条件成立后,IF语句并不会跳过其余的判断。这就使得判断的效率较低。在有多个并列条件需要判断时,最好使用IF构造。IF构造能够提供多义选择,即构造中存在多个条件选项,当不满足条件一时,就去检查条件二。只要在进行检查的过程中有一个条件满足就会去执行相应的操作,执行完相应的操作后就跳出所在的IF构造,而不会再去检查其余的判断条件。8.2.2 判断语句IF的基本用法使用IF语句来实现选择结构通常有两种用法:语句形式和构造形式。前者一般用于实现单一选择,后者则可以实现二义选择。1语句形式采用IF语句来实现单一选择的一般语法形式如下:IF(逻辑表达式)执行语句2构造形式
9、:除了能够使用IF语句来实现单一判断之外,还可以使用块IF语句来组成IF构造用于多重选择。3IF语句的使用8.2.3 判断语句IF实现多重判断IF构造除了可以实现二义判断之外,还可以实现多重判断。这时候,IF构造中需要加入新的元素ELSE IF语句。有了ELSE IF语句后,IF构造中可以同时存在多个判断条件和多个执行模块,但是只有其中一个条件能够成立,并且只有一个执行模块能够执行。使用IF语句和ELSE IF语句来实现多重判断的基本形式如下:IF(逻辑表达式1)THEN THEN 块ELSE IF(逻辑表达式2)THEN ELSE IF块ELSE ELSE块END IF8.2.4 IF语句的
10、嵌套IF构造除了能够单独使用外,构造中的任意一个语句块里都可以再次嵌入另一个构造。被嵌入的构造可以是另一个IF构造,也可以是另一些形态、功能不同的构造,如CASE构造、DO构造等。前提是必须将整个构造完整地嵌入到IF构造的某一个语句块中,不允许被嵌入构造的一部分在一个语句块中,另一部分在别的语句块或是不在被嵌入的IF构造中,即被嵌入的任何构造不允许跨越两个独立的语句块。IF语句嵌套的形式可以表示如下:构造名1:IF(逻辑表达式1)THEN 构造名2:IF(逻辑表达式2)THEN 构造名3:IF(逻辑表达式3)THEN ENDIF构造名3 ENDIF构造名2 ENDIF构造名18.2.5 IF语
11、句的特殊用法在Fortran 77中,IF语句还能够实现一种特殊的选择方法,也就是算术IF语句。算术IF语句根据算术表达式值得结果,有条件的将程序的计算流程转到三条执行语句中的一句。IF语句的这种用法的基本形式如下:IF(表达式)标号1,标号2,标号3其中,表达式为标量整型或实型表达式,两端用括弧括起来;标号1至3必须是本程序单元中的有效可执行语句的标号。语句中所有的三个语句标号都必须书写,但并不一定要指向三个不同的语句,在同一个算术IF语句中允许同一个语句标号出现多次。算术IF语句在执行时,首先会计算表达式的值,根据表达式的值来确定要执行哪一个标号指定的执行语句:如果表达式的值小于零,则程序
12、流程转到标号1指定的语句去执行;如果表达式的值等于零,则程序流程转到标号2指定的语句去执行;如果表达式的值大于零,则程序流程转到标号3指定的语句去执行。8.2.6 SELECT CASE语句的用法SELECT CASE语句是Fortran 90/95标准中新增加的语句。该语句用于容纳CASE块,为程序员提供了一种从多个备用可执行分支选项中选取一个来执行的手段。尽管多重判断的IF构造也可以实现这一功能,但是在某些多条件选择的应用场合使用IF构造会使代码显得比较繁琐、层次关系比较复杂。使用CASE构造就可以避免这一问题,编写出来的代码也显得更加直观、简洁。CASE构造的作用和IF构造非常类似,它也
13、用于编写分叉选择算法,即根据判断条件的成立与否来区分操作不同的可执行模块。不同之处在于:CASE构造只能把某个判断条件的可能结果区分成若干个孤立的离散值或片断(这意味着CASE构造中的判断条件不允许出现重叠),按不同的值或片断进行不同的操作。如果遇到判断条件比较复杂或者存在多种判断条件互相交叉的情况时,CASE构造在处理这些判断条件时显得不是很方便,在这种情况下只能考虑使用IF构造来进行处理。8.2.7 SELECT CASE语句的应用下面给出一些SELECT CASE语句的实际应用例子。首先演示的程序使用了整型表达式的CASE构造,例子的原型就是程序TEST0802的个人所得税计算程序。在进
14、行改动前需要注意,CASE构造中的选择表达式是不允许为实型表达式的。因此,需要一个将实型数据转换为整型数据的函数,可以考虑使用基本数学函数中的INT函数。8.3 循环结构除了顺序结构、选择结构外,实际的程序中还常常遇到需要重复执行的操作或代码段。在这种情况下,就需要用到一种新的控制结构循环结构。如果程序的世界中缺少了这种结构,那么结果将不可想象。比如上一节最后一个实例中所作的5次猜测,如果没有循环结构,同样功能的代码段,即“猜测-判断”,需要重复书写5次。这种情况至少还知道要重复书写几次,在有的应用领域,如数值领域的迭代求解,甚至连要重复的次数都不清楚。循环结构的出现使得这一类问题变得不再是任
15、何问题。本节就将介绍循环结构的相关内容。8.3.1 基本的DO构造DO构造在Fortran 77和Fortran 90/95中都提供用以执行循环操作,但是两个标准在DO构造的具体实现形式上是不同的。尽管这样,两个标准下的各种DO循环都可以归纳为如下所示的DO构造一般形式:构造名:DO 标号循环控制块终止语句其中,构造名选项只允许在Fortran 90/95标准中使用,用于标识构造的起止范围;DO语句后的标号选项在Fortran 77和Fortran 90/95标准中同样适用,尽管带标号的DO构造是较老的语法形式;循环控制用于控制循环的执行,提供循环停止或跳出循环的手段等;中止语句用于标定循环构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 程序流程控制 程序 流程 控制
限制150内