Fortran选择结构
Fortran选择结构---精品资料
(2)单分支块IF结构 IF (逻辑表达式) THEN 块 ENDIF IF (G<60) THEN WRITE(*,*) “不及格” ENDIF T
逻辑表达式
F
块
(3)多分支结构 IF (逻辑表达式1) THEN 块1 ELSE IF(逻辑表达式2) THEN 块2 …… ELSE IF(逻辑表达式N) THEN 块N IF (G<60) THEN ELSE WRITE(*,*) “不及格” 块N+1 ELSE IF(G>=60.and.G<90) THEN WRITE(*,*) “及格” END IF ELSE WRITE(*,*) “优秀” ENDIF
结束
例32 求一元二次方程 ax2+bx+c=0的解 ① a=0,不是二次方程 ② b2-4ac=0,有两个相等的实数根 ③ b2-4ac>0,有两个不等的实数根 ④ b2-4ac <0,有两个共轭复根 阅读例32并画出程序流程图(作业)
程序如下: real a, b, c, d, d1, d2, e, x1, x2 read(*,*) a, b, c d=b*b-4*a*c if(a==0) then if(b/=0) then write(*,*) "一次方程,根为:",c/b else write(*,*) "方程无意义 " end if else
3.4 逻辑 IF 语句
格式:IF (条件表达式) 可执行语句 注意: 逻辑IF语句后面的可执行语句只能为一个 语句且不换行,否则只能用块IF语句代替。
IF (GRADE>60) THEN PRINT*,GRADE ENDIF 等价于: IF (GRADE>60) PRINT*,GRADE
Fortran语言基本语法
Fortran语⾔基本语法a、Fortran 之基本规定:在Fortran的规定中,程序的开始需先宣告变量形式,接着才能⽤这些变量来写程序内容,再整个程序中的第⼀⾏必须空⽩,除⾮键⼊英⽂字母c或*⽤以表⽰那⼀列为说明项⽽⾮实际之计算式⼦。
第⼆⾏⾄第五⾏为地址⾏,可⽤数字标⽰其地址,⽤以执⾏程序时控制之⽤。
第六⾏⽤以填⼊⼀个⾮零的数字或字母表⽰连结上⼀列的式⼦。
第7⾏⾄72⾏则为程序主体之所在,若不⼩⼼在72⾏之后键⼊程序Fortran将不于理会。
再程序的最后⼀列⽤ end命令告知程序终了。
b、变量(Variable)Fortran语法中的变量相当于函数上变量,但其种类则更多,举凡复数(complex)、整数(integer)、实数(real)、逻辑(logical)和字符串(character)等等。
对于变量的规定是变量的第⼀个字母为英⽂字母,其长度最长为6个字,除刚刚说的第⼀个字之外,其余的可为数字或字母,以下为⼏个简单范例: Integer count,pg1real time,po2pc、运算符号与内定函数:Fortran 基本的运算符号如下:+加法;-减法;*乘法;/ 除法**平⽅;**(n) n次⽅除了上列之基本运算符号之外,数值计算上常⽤之函数如三⾓等等亦以写成内定含式,常⽤的以下⼏项:log 对数函数;exp 指数函数;sin、cos、tan、cot、sec和csc等三⾓函数;abs 绝对值;asin、acos、atan、acot、asec和acsc等反三⾓函数。
D、控制结构:结构化Fortran有⼀些控制的结构,关系控制即是其中之⼀种,⽤以⽐较两变量之间关系,包含有:.lt. 表⽰⼩于.gt. 表⽰⼤于.eq. 表⽰等于.le. 表⽰⼩于或等于.ge. 表⽰⼤于或等于.ne. 表⽰不等于另⼀种重要的控制为逻辑控制,包含有:.not. .not. p => 若p为⾮真则为真.and. p .and. q => p和q为真则为真.or. p .or. q => p或q其⼀为真则为真.eqv. p .eqv. q => p和q同为真或同为⾮真则为真.neqv. p .neqv. q => p或q之中⼀为真⼀为⾮真则为真e、输⼊与输出结构:> Fortran 经常会有⼀些数值需要输⼊或计算的值需要输出,这时 Fortran 便提供了⼀些格式码好让使⽤者将欲输⼊或输出的数值针对其变量的特性作较佳的安排设计,兹举例如下,其中输出之资料格式完全相同:a、write(*,10) i,j,k10 format (1x,2I5,I3)b、assign 10 to ifmt10 format (1x,2I5,I3)write (*,ifmt) i,j,kc、write (*,'(1x,2I5,I3)') i,j,kd、character*11 fmtchfmtch='(1x,2I5,I3)'write (*,fmtch) i,j,k其中X表⽰空格之意,1x即是空⼀格, write为输出的指令,若改为 read 则为输⼊指令,I为整数的格式码, 2I5 表⽰输出的总位数为五,⽽这样的格式重复两次,其余尚有不同之各种格式码,常⽤的有:1. F 格式码,⽤于实数变量,其⼀般型态为 rFw.d ,其中F表实数,r为重复次数,w为总位数,⽽d为⼩数字数。
第三讲 选择结构的Fortran 程序设计-6(4+2)
2015/12/20
1
§1
Fortran程序中的选择条件
Fortran用关系表达式和逻辑表达式,来表述选择条件。
一、关系表达式
(1)什么是关系表达式 表达式是将运算元素用运算符连接起来的式子,所以,关 系表达式就是用关系运算符连接的表达式,即: 运算元素 关系运算符 运算元素 1、关系运算符 在Fortran中,有6种关系运算符: 其符号、意义见后面的表格说明。
2015/12/20 8
§2
选择结构在Fortran程序中的实现
在Fortran90中,实现选择结构有4种方法:块if选择结构、块 select case选择结构、逻辑if语句、算术if语句。
一、块if选择结构
先看1个实例: 输入一个学生成绩,如果低于 60 分则输出“不及格”, 90分与90分以上输出“优秀”,60-89分则输出“通过”。 分析:在这个例子中,必须要对输入的成绩进行判断,然后根 据所属档次输出不同的内容。因此,需要用到关系运算、逻辑 运算和与之相应的选择结构。
18
例2:编程求一元二次方程 ax2+bx+c=0 的根,其中 a 、 b、c为任意实数。 分析:该问题根据a是否为0, 分为两种情况: (1)a=0时,方程退化为一 元一次方程: 1、b≠0,x=-c/b 2、b=0,无意义 (2)a≠0时,Δ=b2-4ac: 1、Δ<0,有2个复根
x1, 2 [b i b 2 4ac ] /( 2a)
2015/12/20
5
∴ 对于 a.eq.b → abs(a-b).lt.1E-6 c.ne.d → abs(c-d).gt.1E-6
6、关系表达式只能表示简单的关系,如: 5≤x≤10 就不能用关系表达式表达,此时要用下面的逻辑表达式。
fortran教程[技巧]
前言FORTRAN90的新特性1、淘汰了所有转移语句,增加了新的控制结构,使程序结构化。
增加了结构块,模块及过程的调用灵活形式。
2、加强数组的算法功能。
提出超载概念与实现方法。
提高了文字处理功能。
3、更接近自然语言与公式演算。
允许在字符数据用选取不同种别。
特别:语句书写对列的要求放宽:一般一行写一条语句(也可也多个语句,用“;”分隔),没有标号区、续行区、正文区的区别。
一行最多为132列,可以在任何列处中断语句,中断处写一个“&”,随后在下一行任意列处继续。
一个语句最长不能超过2640个字符。
语句结尾不可有标号、符号。
注释以“!”开始,可以位于任何位置。
***以下只讨论与FORTRAN77不相同处。
第一章FORTRAN90的基本语句第一节类型说明语句1、变量名全长不得超过31个字符。
2、变量类型定义:INTEGER::X,YREAL::ACOMPLEX::B,C,D3、建议淘汰隐式说明,在程序说明部分一开始就写:IMPLICIT NONE向系统声明不使用隐式说明。
4、可以在变量说明时就置初值。
如:REAL::X=1.1,Y,Z=2.25、种别——决定变量的精度和所占内存单元数。
a.如:REAL(KIND=2)::X 说明变量X为REAL型,种别为2。
KIND是种别说明关键字。
如没有种别说明,则采用系统省缺值。
b.有关函数:KIND(X) 返回X的种别参数。
当X取常数0时,返回省缺种别参数。
如KI ND(0)、KIND(0.0)、KIND(.FALSE.)、KIND('A')分别返回整型、实型、逻辑型、字符型的省缺种别参数。
SELECTED_REAL_KIND(N,M) 返回种别参数,使之满足十进制有效位为N, 值范围在10**(-M)和10**M之间的实数。
SELECTED_INT_KIND(N,M) 与上类似,选择整型类别。
c.常数类别表示对数值型常数、逻辑型常数用后缀法,即在常数后加一下划线,再跟种别参数。
hh-fortran-03选择结构
end select print*,year,"年",month,"月所对应的天数为:",day end
算术IF语句(简单了解)
格式:if (算术表达式) 标号1,标号2,标号3 执行过程 ➢ 计算算术表达式的值 ➢ 值小于0,执行标号1对应的语句 ➢ 等于0,执行标号2对应的语句 ➢ 大于0,执行标号3对应的语句
例 3.9 将学生 成 绩 分为 优 (90~100 分 )、 良 (80~89)、 中 (70~79)、及格(60~69)、不及格五个档次,输入成绩, 输出对应的档次。
思考: 用什么语句实现?
integer g read*,g
case(80:89) print*,"良"
case(90:100)
select case(g)
➢ 两边的小数点不能漏 ➢ 实数存在误差,在用.EQ. 与.NE. 时要特别注意 ➢ 一个算术型量的两侧不允许都是关系运算符
逻辑表达式
格式: <逻辑型量> <逻辑运算符> <逻辑型量>
逻辑运算符
.AND. 与 .OR.或
.NOT.非
.EQV.等价 .NEQV.不等价
.XOR.异或
结果是逻辑型值
.TRUE.或.FALSE.
case(1,3,5,7,8,10,12) day=31
case(4,6,9,11) day=30
case(2) if ((mod(year,4).eq.0.and.mod(year,100).ne.0) $.or.mod(year,400).eq.0) then day=29 else day=28 endif
FORTRAN语言第3章(共8章)
会再去执行。这一点同后面的SELECT CASE完
全不同。也就是说IF结构中的选择条件是允许重 叠的,但SELECT CASE语句不允许选择条件有 重叠。
第二节 块IF选择结构
1.ELSEIF语句其作用相当于将ELSE语句与其 后的ELSE块中的块IF语句连接在一起。 2.同块IF语句不同, ELSEIF语句与ENDIF语 句间不存在一一对应关系。 3.在这种IF结构中,允许使用多个ELSEIF语 句。在最后一个ELSEIF语句之后,可以有与 之对应的ELSE语句,也可以没有。当有 ELSE语句在最后时,表示如果前面所有的条 件都不成立,执行其后的ELSE块;如果没有 ELSE块,则表示如果前面所有的条件都不成 立时,流程转到ENDIF语句。
条 件 1 假 条 件 2 真 条 件 ...... 1 块 2 块 ...... 块 n 块 n +1 真 假 条 件 n 真 假 假
EN D IF 的 后 继 语 句
第二节 块IF选择结构
多重判断的IF结构中,判断条件的成立具有
唯一性。即一旦有判断条件成立,就去执行相应
的模块,如果其后仍有判断条件是成立的,也不
一个嵌套分支结构可使用若干个块 IF语句,相应就有若干个ENDIF语句,
每个块IF语句还可能使用一些ELSE
IF语句、ELSE语句,这就可能构成一 个复杂的IF-ELSEIF-THEN-ELSE结构。
当嵌套层次过多时,往往一时难以找
到同一层的块IF中的各语句,一般可 按以下方法确定: (1)从最内层的块IF语句开始,向下找到离它最近的ENDIF 语句,将它们用线括起来,这就是同一层次的块IF。 (2)由内向外重复这一个过程,直到遇见最外层块IF语句和 ENDIF语句为止。 (3)在书写嵌套分支结构时采取缩进方式进行程序书写,程 序的嵌套层次就容易确定。
fortran语言程序设计知识点
fortran语言程序设计知识点Fortran语言是一种面向科学与工程计算的编程语言,因其在数值计算和科学应用方面的高效性而受到广泛使用。
本文将重点介绍Fortran语言程序设计的一些重要知识点。
一、基础语法1.1 变量与数据类型在Fortran中,变量是用于存储数据的容器。
常见的数据类型包括整型(INTEGER)、实型(REAL/DOUBLE PRECISION)、复数型(COMPLEX)、逻辑型(LOGICAL)等。
变量的命名需遵循一定规则,如以字母开头,长度不超过31个字符等。
1.2 运算符与表达式Fortran支持常见的算术运算符(如+、-、*、/)以及逻辑运算符(如. AND.、. OR.、. NOT.)等。
表达式由变量、常数和运算符组成,可以进行数值运算和逻辑判断。
1.3 控制结构Fortran提供循环结构(DO)、条件结构(IF-THEN-ELSE)和选择结构(SELECT CASE)等控制语句,用于控制程序的流程。
二、数组与数据处理2.1 数组定义与操作Fortran中数组是由相同类型的数据元素组成的集合。
可以使用DIMENSION语句定义数组的维度和大小,通过下标访问和修改数组元素。
2.2 数组运算与函数Fortran提供了许多对数组进行运算和处理的函数,如数组求和(SUM)、最大最小值(MAX、MIN)、数组重排(RESHAPE)等,方便对数据进行统计和处理。
2.3 文件读写操作Fortran支持对文件进行读写操作,可以通过OPEN语句打开文件,使用READ和WRITE语句读取和写入数据。
可以根据需要设置文件的访问模式和格式。
三、过程与模块3.1 过程(Subroutine/Function)过程是一段独立的代码块,可接受传入参数并返回值。
在Fortran中,过程可以是子程序(Subroutine)或函数(Function)。
子程序用于完成一系列操作,而函数则返回一个值。
3.2 模块(Module)Fortran中的模块是一个编译单元,用于组织和管理相关的过程和变量。
fortran选择结构及基本语句
END
长安大学地学信息技术研究所 09/10学年第一学期 13
嵌套块IF:指块IF语句中又包含块IF语句,可有多层嵌套。 对于嵌套块IF,内外层块IF语句体不能相互交叉。
块IF语句可命名,在嵌套块IF中,可对内外层块IF语句进行命名。
示例:求解方程ax2+bx+c=0,需要检查是否a=0,防止除0溢出。
<控制集合>→<元素>[:<元素>]{,<元素>[:<元素>]}
长安大学地学信息技术研究所 09/10学年第一学期 15
给定学生成绩S,评定优、良、中、及格、不及格等级,并输出。
INTEGER(1) READ (*,*)S
S
SELECT CASE(INT(S)) CASE(90:100) WRITE(*,*)„该学生成绩为:优。’ CASE(80:89) WRITE(*,*)„该学生成绩为:良。’ CASE(70:79) WRITE(*,*)„该学生成绩为:中。’ CASE(60:69) WRITE(*,*)„该学生成绩为:及格。’
WRITE(*,*)„该学生成绩为:不及格。’ ELSE IF (S<70) THEN
END IF
WRITE(*,*)„该学生成绩为:及格。’ ELSE IF (S<80) THEN
END IF
END IF
END IF
WRITE(*,*)„该学生成绩为:中。’ END
长安大学地学信息技术研究所
09/10学年第一学期 12
CASE(0:59)
WRITE(*,*)„该学生成绩为:不及格。’ END SELECT END CASE DEFAULT WRITE(*,*)„输入成绩数据错!!!'
Fortran77教程-4逻辑运算和选择结构
2
例:计算职工工资。正常工资rate (yuan/h),一周超过 40 hours时,超过部分按1.5 rate (yuan/h) 。
3
c
Payroll with overtime program payroll read(*,*) rate, hours if(hours.gt.40.0) then regpay=rate*40.0 ovtpay=1.5*rate*(hours-40.0) else regpay=rate*hours ovtpay=0.0 end if pay=regpay+ovtpay write(*,*) 'rate=', rate, ' hours=', hours write(*,*) 'regular pay=', regpay, ' overtime pay=', ovtpay write(*,*) 'total pay=', pay end
成绩分级 A : ≥80 B : ≥70且<80 C : ≥60且<70 D : <60
15
给a, b, c三个数排序,要求从小到大输出
16
read(*,*) a,b,c if(a.le.b) then else t=a a=b b=t end if if(b.le.c) then else t=b b=c c=t if(a.le.b) then else t=a a=b b=t end if end if write(*,*) a,b,c end
第一章 算法 第二章 计算机和计算机程序 第三章 Fortran语言程序设计初步 第四章 逻辑运算和选择结构 第五章 循环结构的实现 第六章 Fortran的数据结构 第七章 数据的输入、输出 第八章 常用算法的程序设计举例
fortran知识点总结
fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。
下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。
每个程序单元由一个或多个声明和执行语句组成。
2. 注释:在Fortran中,注释可以用来提高代码的可读性。
注释以感叹号(!)开头,直到行末为止。
3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。
标识符用于表示变量、函数、子程序等。
4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。
例如,REAL :: x 表示声明了一个实数类型的变量x。
5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。
这些结构提供了程序的流程控制和逻辑控制。
6. 函数和子程序:Fortran支持函数和子程序的定义和调用。
函数和子程序可以帮助程序员组织和重用代码。
7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。
模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。
二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。
Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。
下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。
在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。
2. 实数:实数类型用于表示实数值。
在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。
REAL类型用于表示实数,COMPLEX类型用于表示复数。
3. 字符:字符类型用于表示字符值。
在Fortran中,字符类型使用CHARACTER关键字进行声明。
字符类型可以表示单个字符或者字符数组。
4. 数组:数组类型用于表示多个相同类型的数据。
Fortran的选择程序设计(彭国伦95实例PPT)
假 真 真
假
假
假
假
真
真
假
假
逻辑表达式的运算次序(运算符的优先级别)
运算类别 括号 算术运算 运算符 ( ) ** * / + - 优先级 1 2 3 4
关系运算
.GT. .LT . .GE. .LE. .E Q. .NE. .NOT. .AND. .OR. .EQV. .NEQV.
5
逻辑运算
6 7 8 9
例1
IF语句 假设现在正在高速公路上,如果车速超过100公里,就输出警告标语 program ex01 implicit none real (kind=4) :: speed write(*,*) “speed:” ! ← 信息提示 read(*,*) speed ! ← 速度读入 if ( speed>100.0) then ! ← speed>100时才会读入下列程序 write(*,*) "slow down." end if stop end
通常在if中的逻辑运算判断非常复杂,只有 需要使用到重复的逻辑运算时,才会配合 逻辑变量来使用,以增加程序代码的可读 性,某些情况下使用逻辑变量可以增加执 行效率。
多重判断if-else-if
If可以配合else if来做多重判断,多重判断可以一次列出多个条件及多个程序 模块。但是其中最多只有一个条件成立,也就是最多只有其中一个程序模块 会被执行。 If(条件1)then …… ←条件1成立时,执行这个模块程序 else if( 条件2) then …… ←条件2成立时,执行这个模块程序
Fortran教程第三章 选择结构程序设计
所作的处理在其后的块语句中完成。
(3)case default与其后的默认块,是缺省情况,可有可无。
如果加入它,则代表前面所有选择表达式的值皆非的情况下 执行该块。 (4)end select为case结构结束的标志。
例3.3、设计程序,完成小学加、减、乘、除四则运算, 即输入两个数,再输入一个运算符号,做对应的运算,
program exam
implicit none integer n
read *, n
if ( mod(n,3)==0.and.mod(n,5)==0 ) then print *,’该数能同时被3和5整除。’
else
print *,’该数不能同时被3和5整除。’ endif end
块IF结构的组成
program exam3 real g read *,g if (g>=90) then print *,“优秀”
else if( g>=80) then
print *,"良好" else if( g>=60) then
print *, "通过"
else print *,"不及格" endif end
FORTRAN所用的基本逻辑运算有:
.AND.
.EQV.
.OR.
.NEQV.
.NOT.
.XOR.
(1)逻辑与,运算符.AND. 当连接的两个逻辑操作数为真时, 逻辑表达式取值为真,只要一个为假则取假。例如数学表达式 1<X<2,在FORTRAN中应写成逻辑表达式:X>1.AND.X<2。
(2)逻辑或,运算符为.OR. 连接的两个逻辑操作数只要有一个 为真时,逻辑表达式取值为真,全部为假时才为假。例如|X|>5,
Fortran95第10章基本计算二选择控制结构
第10章基本计算(二)选择控制结构在上章我们可以看到,赋值语句之所以能够驱动计算过程的运行,除了赋值语句本身构成完整的运算求值指令之外,计算机本身所具有的串行机制保证了,只要把执行语句与说明语句串列下来,然后保证数据对象流的畅通,计算机就能够按照语句序列的次序依次执行下来,从而完成相应的计算任务。
不过分析一下我们的实际计算任务,就会发现真正完全可以只需要按照一个固有计算序列算下来,就可以完成计算的问题只是少数简单的问题而已,稍微复杂点的问题往往都需要在计算过程当中出现某种判别问题,使得计算途径可以分支,对不同的情形,会有不同的计算途径与不同的计算结果;还会出现反复进行同一种运算,然后再在适当的条件下跳出循环的情形,如果只是使用串行序列来描述此时的运算过程,会使得程序的写作充满重沓的语句。
显然这些类型的计算任务,或者是语句串行序列无法描述的,或者是描述发生令人难以忍受的。
所以一种描述计算过程的语言,除了可以构成串行的计算序列之外,还必须能够控制这个序列有可能出现的选择分支与循环的情形,这就是所谓语言的控制结构。
本章和下章,我们将分别讨论FORTRAN所提供的两种类型的控制结构以及相应的控制语句:●选择控制结构;●循环控制结构。
把程序序列当中的控制结构清晰地加以强调出来,实际上既有助于程序的阅读,也是符合人的思维的清晰性原则的,因此控制结构的规范化正是编程语言追求结构化的一个主要着力点,但是在早期FORTRAN版本里面,并没有完全意识到结构化编程风格的重要性,因此引入了一些常常破坏结构的转移控制语句,而FORTRAN语言的现代版本还没有完全放弃它们,但不提倡使用,这些转移控制语句我们在下章也将简略地讨论到。
10.1 执行顺序一个完整的FORTRAN程序,或程序单位,就给出了一个由可执行语句引导的语句执行序列,这个序列就是语句在程序里面出现的序列,称为正常运行序列。
但是某些可执行结构或可执行语句,能够控制实际的语句运行不止是按照语句书写的序列进行,这样的可执行结构或语句包括控制结构和分支语句。
Fortran的讲义第三章
选择结构
计算goto (Fortran 95废除)
goto(10, 20) (x .le. 0.0) + 2 10 y = 0.0
goto 30 20 y = 1.0 30 print *, ‘y = ‘, y
back3.for
选择结构
赋值goto (Fortran 90废除,Fortran95取消)
r .ne. 0
True
执行循环体
False
i = i + inc
r=r-1
i: 循环变量 e1:初值 e2: 终值 inc:步长 r: 循环次数
exam_3_2
循环结构
不允许改变循环变量i
允许改变表达式e1,e2,inc中变量的值,并且不 影响循环次数
退出循环后循环变量的值有意义
循环结构
{<执行语句>}
直到型 do
enddo [<标签>] 10 <执行语句>
{<执行语句>}
{<执行语句>}
if(<逻辑表达式>) exit if(<逻辑表达式>) goto 10
enddo
异常的程序流程
在选择和循环结构中不允许从结构外跳转到结 构内
goto 10 if(<逻辑表达式>) then 10 <执行语句> {<执行语句>} end if
优先级
1 2 3 4 5 6 7 8 9 10
选择结构
块if
<基本块if语句>→[<标签>:]if(<逻辑表达式>)then {<执行语句>} [else [<标签>] {<执行语句>}] endif [<标签>]
fortran逻辑运算和选择结构
write(*,*) 'D' end if end
18
几点说明:
1. ELSE IF语句相当于把ELSE语句和其下一行的块IF 语句连结成一个语句。
2. ELSE IF语句不需END IF语句与之对应。
3.一个块IF可以有多个ELSE IF语句,除非有块IF嵌套 否则只能有一个ELSE语句。
4.当处理多分支选择时,用ELSE IF语句往往比较方便。
5. ELSE IF是在“条件为假”的分支中再继续进行分支 处理的。故在处理多分支的选择时,要把出现几率高的 条件写在前面,以提高效率。
19
read(*,*) grade if(grade.ge.80.) then
write(*,*) 'A ' else if(grade.ge.70.) then
为了避免过多的块IF嵌套,FORTRAN 还提供了
ELSE IF语句来处理“否则,如果…”的情况。
17
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then
if(grade.ge.80.) then write(*,*) 'A'
else write(*,*) 'B'
if(grade.ge.80.) then write(*,*) 'A'
else write(*,*) 'B'
end if else
write(*,*) 'C' end if else write(*,*) 'D' end if end
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T
F
ENDIF
块
(3)多分支结构
IF (逻辑表达式1) THEN
块1
ELSE IF(逻辑表达式2) THEN
块2
……
ELSE IF(逻辑表达式N) THEN
块N
IF (G<60) THEN
ELSE
WRITE(*,*) “不及格”
块N+1
ELSE IF(G>=60.and.G<90) THEN
END IF
(1)逻辑常量:.TRUE. .FALSE. 例如:当A=10 A>3的值为 .TRUE.
(2)逻辑型变量: LOGICAL L1,L2,L3,L4,L5 REAL A,B,C L1=.TRUE. L2=( B*B-4*A*C >= 0 ) L3=(A==0) L4=(L1.AND.(.NOT.L2)).OR . L3
.NOT.A
A为.TRUE.时,结果为假
.EQV.
逻辑等
.NEQV. 逻辑不等
A.EQV.B A.NEQV.B
A,B为同一逻辑常量.时,结果为真 A,B为不同逻辑常量值时,结果为真
逻辑表达式的值是 .TRUE. .FALSE.
逻辑表达式形式:<逻辑量><逻辑运算符><逻辑量>
逻辑量有三种:逻辑常量、逻辑型变量、关系表达式
两个表达式可以是数值常量,数值变量, 数值
函数,也可以是算术表达式。
例如: A.GE.B MOD(M,2).EQ.1 A-B/=C-D X+Y+Z == 0.0 A<B/3.0 SIN(X)>0.3
说明
(1)先算术运算,再关系运算,建议给算术运算加括号。
(2) 两个不同类型的数值量相比较时,自动进行数据 类型的转化,转换的规律是将低级类型向高级类 型转换。
如:数学上 A<B<C<D 不能写成:A .LT.B .LT.C .LT.D 应写成:(A .LT.B).AND.(B .LT.C).AND.(C .LT.D)
4.除 .AND..NOT 和 .OR ..NOT.外,其他任意两个逻辑 运算符不能连用
3.2 块IF选择结构
块IF结构有三种形式
(1) IF (逻辑表达式) THEN
if(a<b) then write (*,*) "a<b!"
else write (*,*) "a-b",a-b
end if case(‘/')
if(b==0) then write (*,*) “b==0!"
else write (*,*) "a/b",a/b
end if case default
WTE(*,*) “优秀”
ENDIF
3.3 块CASE选择结构(多分支选择语句)
CASE结构的一般形式为:
SELECT CASE(表达式) CASE (表达式1)
块1
CASE (表达式2)
块2 ········· CASE (表达式n)
块n [CASE DEFAULT
A.NE.B
应改写为 ABS(A-B).GT.1E-6
(5)字符关系表达式,将两个字符量进行比较。
逻辑运算 逻辑运算符
逻辑运 算符 .AND.
.OR.
含义
逻辑与 逻辑或
逻辑运 算例子 A.AND.B
A.OR.B
例子含义
A,B同时为.TRUE.时结果为真 A,B之一为.TRUE.时结果为真
.NOT. 逻辑非
write (*,*) "error input,once again!" end select end
! P37 eg3.4 输入年月 ,输出所对应的天数
integer year, month, day read(*,*) year, month
CASE后面表达式的值可如下表示:
select case(month)
逻辑表达式的运算次序(运算符的优先级别)
运算类别
运算符
优先级
括号
()
1
算术运算
关系运算 逻辑运算
**
2
*/
3
+-
4
.GT. .LT . .GE. .LE. .EQ. 5
.NE.
.NOT.
6
.AND.
7
.OR.
8
.EQV. .NEQV.
9
注意:
1.关系运算符的运算对象是数值量,运算结果是逻辑量 2.逻辑运算符的运算对象是逻辑量,运算结果是逻辑量 3.一个算术运算量只能和一个关系运算符相连
(3)关系表达式的结果为逻辑值,即结果为.TRUE. 或.FALSE.。 计算结果不能再参与关系运算,例如:
(A.GT.B).LT.C 非法 因为(A.GT.B)结果为逻辑型值,不能再参与关 系运算。
(4)由于实数运算和存储存在误差,因此
对于
A.EQ.B
应改写为 ABS(A-B).LT.1E-6
对于
默认块 ]
END SELECT
(1) SELECT CASE括号 里的“表达式”,表示 待选择的内容,可以是 整型、逻辑型、字符型。
(2)后面各CASE分支的 表达式为各种可能的取 值,对应不同的取值, 所作的处理在其后的块 语句中完成。
(3)CASE DEFAULT与其后的默认块可选。前面所有 选择表达式的值皆非的情况下执行该块。
(4)END SELECT为CASE结构结束的标志。
! Eg3.3 输入两个数和一个运算符号,计算加减乘除 Real a,b Character op read(*,*) a,b,op select case(op) case('+')
write (*,*) "a+b",a+b case('-')
第三章 选择结构程序设计
关系运算和逻辑运算 块if 选择结构 块case选择结构 逻辑if 选择结构
3.1 关系运算和逻辑运算
关系运算符
.LT. < .LE. <= .EQ. == .NE. /= .GT. > .GE. >=
小于 小于等于 等于 不等于 大于 大于等于
关系表达式的一般形式 表达式1 关系运算符 表达式2
块1
ELSE
IF (G<60) THEN
块2 END IF
WRITE(*,*) “不及格” ELSE
逻辑表达式
T
F
WRITE(*,*) “及格” END IF
块1 块2
(2)单分支块IF结构
IF (逻辑表达式) THEN
块
ENDIF
IF (G<60) THEN
WRITE(*,*) “不及格”
逻辑表达式
多个离散值之间用逗号隔开,
case(1,3,5,7,8,10,12)
例如 Case (1,3,5,7)
day=31 case(4,6,9,11)
day=30 case(2)