版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 分支程序设计本章介绍分支程序的概念和设计方法。通过本章的学习,应了解结构化程序的基本概念掌握Fortran95语言提供的分支程序设计所使用的语句和分支程序的编写方法。2018/9/3012.1 基本程序结构2.1.1 结构化程序设计概述荷兰学者Dijkctra提出用“结构化程序设计方法 来解决编写具有良好结构的程序问题。它规定了一套较完整的实施手段,使程序具有合理的结构, 以便保证和验证程序的正确性,它规定了程序设计者不能随心所欲地编写程序,而要按照一定的结构构形式来设计和编写程序,以保证程序的易读、易理解和易修改,进而提高程序设计和维护工作的效率。2018/9/302“结构化程序设计
2、方法”也叫SD(Structed Design)方法,是按结构化的思想和原则组织数据和编写程序的一种方法。它的基本指导思想是简化编程复杂性,追求的目标是使程序结构清晰,易读性强. 其特点主要体现在以下方面:1. 规定三种基本结构(即顺序结构、分支(选择)结构、循环结构)是组成程序的唯一结构形式。2. 将程序模块化,即一个大程序或软件系统由若干个相对独立的模块组成.这些模块之间的联系应尽可能少;而模块内部的联系则尽可能紧密。并且各个模块均为单入口和单出口,绝对不应有模块之间的无条件转移(GOTO)语句。3采用自顶向下的设计过程,反复运用分解与抽象的方法,即对一个大而复杂的问题逐步分解为几个相对简
3、单而独立的子问题,对各子问题再进行分解,直到每个子问题可用一个子程序来实现。这种方法也叫逐步求精。2018/9/3032.1.2 顺序结构这是一种最简单、最基本的结构。它的特点是:结构内的各个功能模块是按照它们出现的顺序依次执行的,且只有一个 入口和一个出口,如图2-1所示。其中的每个功能块可以是一条或多条非转移类的可执行语句,即一个顺序结构可由一条或多条顺序执行的语句组成。图2-1顺序结构2018/9/304nba2.1.3 分支(选择)结构在这种结构中,要对给定的条件进行判断,根据判断结果选择不同的执行路径, 以完成不同的功能。分支结构又有两向分支和多向分支的形式,如图2-2为两向分支结构
4、,图2-3为多向分支结构。它们与顺序结构的共同点是,也只有一个入口和一个出口。实现这种分结构要使用相应的条件选择语句,其中a块和b块及多向分支结构中的各语句块根据实际应用可以是空块,即在条件满足或不满足时结束这一结构,直接执行该结构的后继语句。这种语句块中又可以是另一个分支结构,这就形成了分支结构的嵌套。2018/9/305入 口入 口K= ?= 1.T.F.条件出 口出 口图2-2 两向分支的选择结构图2-3多向分支的选择结构2018/9/306a块b块语句块1= 2语句块 2= n语句块 32.1.4 循环结构循环结构也称重复处理结构,即该结构中的语句被重复执行, 直到满足或不满足某一给定
5、的条件为止。这种结构也仅有一个入口和一个出口, 这种结构在应用时有两种形式在图2-4所示的循环结构中,当条件满足时执行a块,直到条件不满足时执行该结构的后继语句,这种结构称为“当型”循环结构。 在图2-5所示的循环结构中,先执行a块,直到条件满足时执行该结构的后继语句。结构。这种结构称为“直到型”循环2018/9/30在程序设计时使用循环语句实现循环结构。7图2-5直到型循环结构图2-4当型循环结构2018/9/308不满足条件满足a块满足条件不满足a块2.2 IF分支结构2.2.1 逻辑表达式在FORTRAN程序中,逻辑表达式通常被用作描述判断条件。其中关系表达式又是逻辑表达式的简单形式。一
6、、关系表达式关系表达式用于比较两个算术表式或字符表达式,若其结果为.TRUE.(真),表示关系成立,若为.FALSE.(假),表示关系不成立。关系表达式的一般形式为:2018/9/309其中的表达式1和表达式2可以都是算术表达式或都是字符表达式。关系运算符共有以下六种:= = 或 .EQ.等于不等于大于大于或等于小于小于或等于/=或 .NE.或 .GT.= 或 .GE.或 .LT.10 或 a .GT.10n+1 2*a+3*b或 n+1 .LT. 2*a+3*babs(a-b) =“that” 或 “this” .GE. “that”2018/9/30101. 使用字母形式的关系运算符时,运
7、算符两端的圆点不能省略.2. 关系表达式中运算符的运算顺序是,先进行算术运算或字符运算,然后进行关系运算。如关系表达式a+b.GT.x+y先完成a+b 和x+y的运算,再进行比较运算。3. 在进行算术表达式值的比较时, 允许关系运算符端的类型可以不一致,并自动转换成同一类型后再进行比较。转换规则与算术表达式中的类型转换规则相同。4. 复数类型只能进行相等或不等的比较运算。5. 由于实型数在计算机内是近似表示的, 所以理论上相等的两个实数,由于误差原因, 在机内未必完全相等。 解决的方法是让两者之差的绝对值小于某个很小的数时就认为其值相等。如x.EQ.y可改写成ABS(x-y).LT.1e-6。
8、6对字符型量的比较,较。实际上是对它们的ASCII码值进行比2018/9/3011二、逻辑表达式1逻辑表达式的一般形式及运算规则逻辑表达式由逻辑元素和逻辑运算符组成。其一般形式为:其中逻辑元素可以是逻辑常量、逻辑变量、逻辑数组元素、逻辑函数、关系表达式或另一个逻辑表达式。2018/9/3012FORTRAN语言中的逻辑运算符共有以下几种:.AND.素逻辑“与”,其运算规则是,仅当.AND.两边的逻辑元的值均为“真”时,运算的结果才为“真”,否则为“假”。.OR.素的逻辑“或”,其运算规则是,只要.OR.两边的逻辑元值有一个为“真”,则运算结果为“真”, 仅当.OR.两边的元素值均为“假”时,运
9、算结果才为“假”。.NOT.能写逻辑“非”,这是一个一元运算符,且逻辑元素只在.NOT.右侧,其运算规则是逻辑元素的值为“真”,结果为“假”,反之结果为“真”。.XOR.辑元逻辑“异或”,其运算规则是,如果 .XOR.两边的逻素值不相同时,结果为“真”,否则结果为“假”。.EQV.逻辑相等,其运算规则是,如果.EQV.两边的逻辑元素2018/9/3013值都为“真”或都为“假”时,结果为“真”,否则结果为(1.EQ.2 ).EQV .FALSE.下面是一些逻辑表达式的例子: x .GE. 0.0 .AND. x .LE. 5 x .GT. 1.0 .OR. x. .LE. -9.0(a+b).
10、EQ. d .AND. c .NE. e同时成立表示0x5表示x1或x-9 表示a+b=d和ce(L1 .EQ. L2) .EQV.false.表示 L1=L2 是否不成立注意,在书写逻辑运算符时,两端的圆点是不能省略掉的。2逻辑表达式中的运算顺序在较为复杂的逻辑表达式中,可能含有算术运算符、关系运算符和逻辑运算符,表2-2中给出了它们的运算优先级,同级运符按从左到右的顺序进行。可用园括号改变表达式的运算顺序。2018/9/30142.2.2IFELSEENDIF结构IFELSEENDIF结构是FORTRAN程序中常用的选择结构,它主要由块IF语句、ELSE语句和ENDIF语句共同构成, 这三
11、个语句都不能单独使用。其一般形式为:IF(逻辑表达式)THENIF块ELSEELSE块ENDIF该结构的执行过程是:先计算逻辑表达式的值并加以判断, 若此值为真,则执行IF块中的语句,然后执行ENDIF语句结束该结构,继续执行其后继语句;若此值为假,则跳过IF块中的语句,直接执行ELSE块中的语句,然后执行ENDIF语句结束该结构,并继续执行其后继语句。2018/9/3015例2.1编写程序计算函数-1x-1.0 .and. x1.0) then y=1.0/sgrt (1.0-x*x)elsey=1.0endifwrite (x*x) ”x=,” x, “y=”, y end的值。2018/
12、9/3016例2.2编写一个程序,输入两个整数A、B, 将其中较大者放入变量A中,较小者放在B中,然后输出A、B。程序如下:program ex202 implicit none integer a ,b , mwrite (*, *) “ 输入A、B的值:”read (*, *) a, b if (ab) then m=aa=b b=m endifwrite (*, *) “a=”, a, “b=”, b end程序的判定结构中没使用ELSE块,ELSE语句也省略了。当条件a100) then grade=?elseif (score=90) then grade=Aelseif (scor
13、e=80) then grade=Belseif (socre=70) then grade=Celseif (score=60) then grade=Delseif (socre=0) then grade=Eelsegrade=? endifwrite (x*x) “成绩等级为:”gradeend这个程序定义了两个变量,一个是整型变量score,表示学生分数,另一个字符型变量grade,表示成绩等级。当程序执行到块IF语句时,如果score100成立,说明输入的分数有错,则执行第一个语句块,将“?”号赋予变量grade后再到ENDIF,进而执行write语句输出字符“?”表示成绩输入有错
14、 2018/9/30192.3SELECT CASE结构利用SELECT CASE结构也可以实现多重判定,即多分支选择结构。该结构的一般形式如下:select case (变量)case(数值1) 语句块1case(数值2) 语句块2case(数值n) 语句块ncase default语句块n+1 end select其中的“变量”只能是整型、字符型和逻辑型,数值i只能是常量,不能使用变量,而且必须和select case中的变量有相同的类型。它可以是单个的常数,或是用逗号分开的多个常数,也可以是用冒号分开的两个常数,表示一个值域,即取包括 这两个常数在内的所有这两个数之间的数值。例如(1:1
15、0) 表示取1到10之间的整数,包括1和10;(“A”:“D”)表示取A、B、C、D四个字符。如果省略其中第一个数,表示取所有小于或等于第二个数的值,如(:5)表示所有小于等于5省略第二个数,表示取所有大于等于第一个数的值,如(5:)表20 示的数2值018;/9/3若0例2-4编写一个程序,根据输入的运算符进行相应的算术运算。程序如下:program ex204 implicit none real a, b, anscharacter operator read (*,*) a, bread (*, ”(A1)”) operator select case (operator) case
16、(+)ans=a+b case (-)ans=a-b case (*)ans=a*b case (/)ans=a/b case defaultwrite (*,*) “无定义的运算符:”, operator stopend selectwrite (*,*) a, operator, b, =, ans end运行这个程序时,需输入两个实型数,并再输入一个算术运算符。程序根据这个运算符决定执行哪一个赋值语句,完成相应计算,并输出结果;如果输入了错误的非算术运算符,程序将输出提示信息,同时也输出这个错误的运算 符,然后将停止程序的执行。程序中的第二个read语句用的是有格式输入,将在第四章中介绍
17、。2018/9/3021例2.5编写程序,输入一个月份,然后根据该月份输出该月份对应的天数。若要输入2月份,则要再输入.TRUE.或.FLASE.以区分是闰年或本年。程序如下:program ex205 implicit none logical leapinteger month, days read (*,*) month select case (month) case (4,6,9,11)days=30case (1,3,5,7,8,10,12)days=31 case (2)read (*,*) leap2018/9/30select case (leap)case (.true.)
18、 days=29case (.false.) days=28end selectcase defaultwrite (*,*) month, month input error! stopend selectwrite (*,*) month ,days end22在使用select case 语句时注意以下问题:每个case后的常量必须是互不相同的,否则会出现不确定情况而使程序无法执行;每个case语句出现的顺序不影响程序的执行;不允许使用转移语句从select case结构外转移到某个case语句块内,也不能从一个case语句块转移到另一个语句块内,但是case语句块内可用转移语句转移到s
19、elect case语句之外。select case语句必须和endselect语句成对使用2.4分支结构的嵌套所谓分支结构的嵌套,是在各种分支结构的语句块中,如IF块、ELSE块或ELSE IF的语句块中又完整地含有另一个分支结构。2018/9/3023例2.6编写一个根据利润计算应征税额的程序。假设:利润P在100元以下的税率为3%,100元P500元的税率为4%,500元P1000元的税率5%,1000元P2000元的税率为6%,2000元P5000元的税率为7%,P5000元 的税率为8%,利润为零或亏本的不征税。程序如下:program ex206 implicit nonereal
20、 (kind=4)p, r, tax read (*,*) pif (p=0.0) then r=0.0elseif (p100.0) then r=0.03elseif (p500.0) then r=0.04elseif (p1000.0) then r=0.05elseif (p2000.0) thenr=0.06elseif (pbig) big=y if (zbig) big=z print *, bigend该程序用于求三个实数x,y,z中的最大数,其中使用了两个逻辑if语句,请读者自己分析一下它们的执行过程。2018/9/30262.5.2 GOTO语句该语句又称为无条件转移语句,其一般形式为:GOTOS其中S是该GOTO所在程序段内的一个可执行语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年浙江省舟山市公务员人员招聘笔试备考试题与答案详解
- 2026年盘锦市双台子区公务员人员招聘笔试备考题库与答案详解
- 服装厂环保控制细则
- 2026宁夏固原市西吉县全科医生特设岗位招聘2人笔试参考题库及答案解析
- 2026中煤北京煤矿机械有限责任公司招收博士后研究人员2人考试参考题库及答案解析
- 2026锦州市公安局招聘警务辅助人员127人考试模拟试题及答案解析
- 2026年本溪市明山区事业单位人员招聘笔试备考题库与答案详解
- 2026下半年杭州市中医院公开招聘高层次人才考试模拟试题及答案解析
- 2026年定西地区安定区公务员人员招聘考试参考试题与答案详解
- 2026年西安市莲湖区公务员人员招聘考试备考题库与答案详解
- 古典文献翻译策略分析-洞察及研究
- 医院培训课件:《内科急危重症的快速识别及处理》
- 2025年gsp药品批发企业质量风险管理试题及答案
- 描写河西走廊的古诗
- 松下-GF2-相机说明书
- 专题18 传送带模型(学生版)新高一物理多维度导学与分层专练
- 布比卡因脂质体注射液-临床用药解读
- 统计学基础与应用课件
- 传感器的应用与调试高职全套教学课件
- 【影片中的非线性叙事结构的实例研究(论文)】
- 为孩子培养良好的习惯【一年级家长会】讲座用课件
评论
0/150
提交评论