Fortran77教程-4逻辑运算和选择结构

合集下载

Fortran77结构化程序设计

Fortran77结构化程序设计

Fortran77结构化程序设计Fortran77结构化程序设计章节一、引言1.1 程序设计的概述1.2 Fortran77的特点1.3 编写结构化程序的优势章节二、基本语法和数据类型2.1 Fortran77的语法规则2.2 数据类型和变量2.2.1 整型2.2.2 实型2.2.3 逻辑型2.2.4 字符型2.2.5 数组2.2.6 字符串章节三、控制结构3.1 顺序结构3.2 分支结构3.2.1 IF语句3.2.2 CASE语句3.3 循环结构3.3.1 DO循环3.3.2 WHILE循环3.3.3 循环控制语句章节四、子程序和函数4.1 子程序的定义和调用4.2 函数的定义和调用4.3 参数传递4.4 递归调用章节五、文件操作5.1 文件的打开和关闭5.2 读写文件的基本操作5.3 文件的格式化读写5.4 随机访问文件章节六、错误处理和调试技巧6.1 错误类型和处理方法6.2 调试工具和技巧章节七、实例应用7.1 计算圆的面积7.2 求解线性方程组7.3 求解微分方程7.4 图像处理附录:常用函数库A.1 标准数学函数库A.2 字符串处理函数库A.3 文件操作函数库A.4 其他常用函数库附件:示例代码文件法律名词及注释:1、Fortran77:一种高级编程语言,用于科学计算和工程应用。

2、数据类型:变量的属性,如整型、实型、字符型等。

3、分支结构:程序中根据条件选择不同执行路径的结构。

4、循环结构:程序中重复执行某段代码的结构。

5、子程序:独立的代码块,可以被多次调用。

6、函数:接受输入参数并返回结果的子程序。

7、文件操作:程序与外部文件的读写交互。

8、错误处理:处理程序执行过程中的错误和异常情况。

9、调试:通过检查和修复程序错误来确保程序正确执行。

fortran第4章(条件).ppt

fortran第4章(条件).ppt

T
条件
F
语句块1
语句块2
例: 有一折线其关系为: Y= 2X+3 (X≤2) X+5 (X>2) 见图,要求输入一个X值,打印一个相应的Y值.
READ *,X IF (X.LE.2.0) THEN Y=2*X+3 ELSE Y=X+5 ENDIF PRINT *,’X=‘,X,’Y=‘,Y END
3.5.LE.10.0.AND.20.0.LT.15.1
• 逻辑或.OR.
其值为假
例:3.5.LE.10.0.OR.20.0.LT.15.1
3.5.GE.10.0.OR.20.0.LT.15.1
其值为真
其值为假

逻辑同.EQV.(逻辑等值) 例:3.5.LE.10.0.EQV.20.0.LT.15.0 3.5.LE.10.0.EQV.20.0.GE.15.0 其值为假 其值为真
具体操作是: 将e1 RELOP e2 写成 ((e1)-(e2)) RELOP 0 即对两个算术表达式求差,然后与零进行比较,其中 零的类型与表达式((e1)-(e2))的类型相同. 如: 可写作: X*X.LT.2*J X*X-2*J.LT.0.0
4.当算术表达式是非整型时尽量不用关系运算符.EQ.
b b2 4 ac x 1 2 a
b b2 4 ac x 2 2 a
READ *,GRADE
IF(GRADE.GE.8O) PRlNT *,”A” IF(GRADE.GE.6O .AND. GRADE.LT.80) PRlNT *,”B” IF(GRADE.LT.6O) PRlNT *,”C” 逻辑IF语句当条件为“真”时只能执行一个执行语句而不能 执行若干个语句。与块IF相比,逻辑IF语句是在一行中完成 的一个选择操作,因此它又称“行IF语句”以与块IF区别。

Fortran77教程-4逻辑运算和选择结构

Fortran77教程-4逻辑运算和选择结构

read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70.) write(*,*) 'B' if(grade.ge.60.) write(*,*) 'C' write(*,*) 'D' end
24
C
单价850,100以上95折优惠,求货款。 price=850 read(*,*) n if(n.ge.100) price=price*0.95 amount=n*price write(*,*) 'n=',n,' amount=',amount end
read(*,*) grade if(grade.le.60.) then write(*,*) ‘D ' else if(grade.le.70.) then write(*,*) ‘C' else if(grade.le.80.) then write(*,*) ‘B' else write(*,*) ‘A' end if end
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
if(grade.ge.60.) then else print *, ’No.’, num print *, ’grade’, grade end if

FORTRAN77编程基础

FORTRAN77编程基础

第三讲FORTRAN 77 编程基础1主要内容⏹FORTRAN 77 基础⏹数据结构⏹控制结构(选择与循环)⏹基本输入输出⏹函数与子程序⏹计时函数⏹文件操作FORTRAN 基础⏹FORTRAN语言发展概况●FOR mula TRAN slation●适用于工程及科学计算的一种高级程序设计语言●1951 年由约翰•贝克斯等人开始研发●1957 年第一个FORTRAN 程序在IBM704 机上运行●1966 和1978 年先后颁布FORTRAN66 和FORTRAN77●1991 和1997 年颁布了Fortran 90和Fortran 95●2004 年公布Frotran2003 标准,面向对象程序设计●2010 年公布Fortran 2008 标准FORTRAN 编译器⏹免费的FORTRAN 编译器⏹商业版FORTRAN 编译器●GNU FORTRAN /gfortran●G95●Intel Fortran 编译器(非商业版)●Power Station 、Compaq Visual Fortran (已停止更新)●Intel Fortran●PGI Fortran●Absoft Pro Fortran●Lahey Fortran程序开发环境⏹Linux 系统⏹Windows 系统●字符界面,命令行方式●Code::Blocks + GCC●Microsoft Visual Studio + Intel Visual Fortran ●Code::Blocks + GCC一个简单的编程示例parameter(n=100)real a(n, n), b(n, n), c(n, n)cdo j = 1, ndo i = 1, na(i,j) = 1.0/(i+j‐1)b(i,j) = 1.0c(i,j) = 0.0enddoenddocdo i = 1, ndo j = 1, ndo k = 1, nc(i,j) = c(i,j) + a(i,k) * b(k,j) enddoenddoenddocprint*, "c(1,1) = ", c(1,1)stopendFORTRAN 程序分析●一个FORTRAN 源程序由一个或多个程序单元组成每个独立的程序单元以“end”语句结束●每个程序单元包括若干行(一行不能写多条语句,但一条语句可以分几行写)●每个程序单元可包含语句行和非语句行(注释行)●语句行:可执行语句和非执行语句行●非执行语句在所有可执行语句行前面●语句可以根据需要设置标号●各类语句在程序单元中的位置必须满足一定规则●程序必须按规定的格式书写源程序书写格式●每行只能在72 列内书写,并把80 列分为4 个区●1~5列:标号区(1~5 位整数)如果第1 列为“* ”或“c ”,则为注释行●第6列:续行标志区续行符可以是任意非空格/非零字符最多19 个续行●7~72 列:语句区(一行只能写一条语句)●73~:被忽略,有的编译器会报错⏹FORTRAN 77 源程序必须按规定的格式书写(Fixed Format 固定格式)⏹源程序●以.f为扩展名●纯文本文件,可使用任何文本编辑器编写⏹编译与执行g77‐O2 –o输出文件名源程序文件名./输出文件名g77 ‐O2 –o hello hello.f./hellog77常用选项-o:指定生成的可执行文件的文件名,缺省为a.out -c:只编译不链接,即只生成目标文件(.o文件)-I path:指定或增加包含文件(如*.h)的搜索路径-L path:指定(增加)库文件的搜索路径-l name:与库文件lib name.a链接-O, -O1, -O2, -O3:优化开关-g:在目标码中加入更多信息,用于程序调试●英文字母:A B C D ... ... X Y Z●下划线和阿拉伯数字:_ 0 1 2 3 4 5 6 7 8 9●特殊符号:空格= + -* / ( ) , . ' : "☞FORTRAN 不区分大小写☞早期的FORTRAN 卡片不允许小写故很多FORTRAN 程序源代码都是大写的FORTRAN 数据结构⏹F77支持基本类型和构造类型的数据结构●基本类型●构造类型:数组、记录、文件●F77 不支持指针整型、实型、双精度、复型、逻辑型、字符型正、负整数和零,缺省取值范围为:[-231, 231-1]②实型常量(Real)小数或指数形式:0.876 →8.76E-1 →87.6E-2指数部分只能是整数,取值范围:[10-38, 1038]③双精度常量(Double precision)8 字节:0.125D+45,取值范围:[10-308,10308]④复型常量(Complex)8 字节:(实数,实数)⑤逻辑型常量(Logical)⑥字符型常量(Character)⏹变量类型整型、实型、双精度、复型、逻辑型、字符型⏹变量名●第一个字符必须是字母●后面可以跟1~5 个字母、下划线或数字现在的FORTRAN 编译器允许多于6 个字符(g77 最多支持约51个字符)●变量名中的空格不起作用。

Fortran77结构化程序设计

Fortran77结构化程序设计

Fortran77结构化程序设计Fortran77结构化程序设计简介Fortran(Formula Translating System)是一种编程语言,特别适用于科学和工程领域的计算。

Fortran的第一版于1957年发布,至今已经发展到Fortran77版本。

Fortran77引入了结构化程序设计的概念,使得程序更易于编写和维护。

本文将介绍Fortran77结构化程序设计的基本原则、控制结构和常用语法。

基本原则结构化程序设计的目标是编写易读、易维护、易的程序。

为了达到这个目标,Fortran77结构化程序设计遵循以下基本原则:1. 模块化:将程序划分为小块的独立模块,每个模块负责完成特定的功能。

2. 单一入口:每个模块只有一个入口点,使得程序的执行流程清晰可见。

3. 自顶向下设计:从程序的总体结构开始,逐步细化到具体的算法和实现细节。

4. 注重可读性:使用有意义的变量和函数名,添加适当的注释,使得程序易于阅读和理解。

控制结构Fortran77提供了几种常用的控制结构来实现程序的流程控制:顺序结构顺序结构是Fortran77中最基本的控制结构,程序按照代码的顺序依次执行。

例如:fortranPROGRAM mnINTEGER :: i, sumsum = 0DO i = 1, 10sum = sum + iEND DOWRITE(,) 'Sum:', sumEND PROGRAM mn上述代码展示了一个简单的程序,通过循环计算1到10的和,并输出结果。

分支结构Fortran77提供了基本的分支控制结构:- `IF`语句:可以根据条件选择性执行代码块。

例如:fortranPROGRAM mnINTEGER :: iDO i = 1, 10IF (i < 5) THENWRITE(,) i, '小于5'ELSEWRITE(,) i, '大于等于5'END IFEND DOEND PROGRAM mn在上述代码中,根据变量`i`的值判断是否小于5,并分别输出不同的信息。

FORTRAN77综述

FORTRAN77综述

FORTRAN77综述data (num(i),i=1,500)/500*0/,(num(i),i=501,1000)/500*1/Fortran77程序书写规则:1、程序中的变量名,不分大小写;2、变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;3、一行只能写一个语句;4、程序的第一个语句固定为program 程序名称字符串5、某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;6、某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;7、某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;8、某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;9、某行的第73至80字符位为注释区,80字符位以后不能有内容。

Fortran77关系运算符:Fortran77逻辑运算符:.gt. 大于.ge. 天于或等于.lt. 小于.le. 小于或等于.eq. 等于.ne. 不等于.and. 逻辑与.or. 逻辑或.not. 逻辑非.eqv. 逻辑等.neqv. 逻辑不等运算符优先级由高到低顺序为:()→**→*或/→+或-→.gt.或.ge.或.lt.或.le.或.eq.或.ne.→.not.→.and.→.or.→.eqv.或.neqvFortran77语句:语句说明备注write(*,*) x1,x2 输出语句第一个*号是指输入输出文件设备号或其它设备机,第二个*号是指表控格式语句的行号,如不print *,x1,x2 输出语句*号是指表控格式语句的行号,如不指定则用默read *,x1,x2 输入语句*号是指表控格式语句的行号,如不指定则用默format(格式符) 控制输入输出格式语句。

注:1.在打印输出时,每一行第1个字符不显示,用来控制纵向走纸或显示行。

第1个字符作用空格正常回车换行0 回车并跳过1行1 换页+ 只回车不换行其它通常是回车换行2.输入小数时,自带小数点优先。

fortran程序设计第4章xhb

fortran程序设计第4章xhb
ELSE PRINT *, ‘C’
END IF ELSE
PRINT *, ‘D’ END IF
[例4.4] 三个数A、B、C,按升序排序。
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
用块IF结构实现选择 结构,其形式为:
IF (条件) THEN then块
ELSE else块
END IF
不成立
成立
条件
else块
then块
[例4.1]计算职工工资。工人每小时计时工资为 RATE,如果一周工作时间超过40小时,加班部分 的工资按正常时间工资的1.5倍计算。
读入RATE, HOURS
Less Than Less than or Equal to
EQual to Not Equal to
数学符号 > ≥ < ≤ = ≠
关系表达式示例:
关系表达式 A .GT. 3.5 A+B .LE. 0.0 SIN(X) .GE. 0.5 A-B .NE. C+D
I .LT. J/2
数学式子 A>3.5
[例4.3]如果在上例的基础上将80分以上定为A等,70~79 分定为B等,60~69分定为C等,小于60分的为D等。
READ (*, *) GRADE IF (GRADE .GE. 60.0) THEN
IF (GRADE .GE. 70) THEN IF (GRADE .GE. 80.0) THEN PRINT *, ‘A’ ELSE PRINT *, ‘B’ END IF

fortran选择结构及基本语句

fortran选择结构及基本语句

CASE(80:89)
WRITE(*,*)‘该学生成绩为:良。’
CASE(70:79)
WRITE(*,*)‘该学生成绩为:中。’
CASE(60:69)
WRITE(*,*)‘该学生成绩为:及格。’
CASE(0:59)
WRITE(*,*)‘该学生成绩为:不及格。’
END SELECT
CASE DEFAULT
基本块IF语句功能:先求e值,为真,执行<THEN语句体>, 为假,执行<ELSE语句体>。
<THEN语句体>和<ELSE语句体>为一程序段(语句序列)。
长安大学地学信息技术研究所
09/10学年第一学期 6
选择结构有三种类型:双边结构、单边结构1、单边结构2。
双边选择结构
IF (e) THEN
真 THEN语句体
IF (S<70) THEN
write(*,*)‘该学生成绩为: 优。’
WRITE(*,*)‘该学生成绩为:及格。’ END IF
ELSE
END IF
IF (S<80) THEN
END IF
WRITE(*,*)‘该学生成绩为:中。E’ND IF
END
长安大学地学信息技术研究所
09/10学年第一学期 12
READ (*,*)i,j IF(i<j) WRITE(*,*)I WRITE(*,*)‘逻辑IF语句执行结束。’ END
输入:125,200 输出:125
逻辑IF语句执行结束。
输入:200,125 输出:逻辑IF语句结束。
长安大学地学信息技术研究所
09/10学年第一学期 3
逻辑IF语句中的可执行语句S只允许是一条语句。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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的数据结构 第七章 数据的输入、输出 第八章 常用算法的程序设计举例
1
一、引言
在FORTRAN77中,用块IF结构来实现选择结构, 其形式为: IF(条件)THEN then 块 ELSE else 块 END IF
3. 不同类型常变量比较时,遵循低级向高级转化规律。 X.GT.3 4.关系表达式的值不是一个数值,而是逻辑量“真”或“假”。 5.判断实数相等和不等,用.EQ.和.NE.时要特别注意。 (1.0/3.0+1.0/3.0+1.0/3.0).EQ. 1.0 (10.0*0.1).NE. 1.0 A.EQ.B 可改为 ABS(A-B).LT.1E-6 C.NE.D 可改为 ABS(C-D).GT.1E-6
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
求函数值
22
六、逻辑IF语句
逻辑IF语句只有“条件为真”时才有操作,为“假” 时不进行任何操作,且条件为“真”时只能执行一条执行 语句,而后不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句。逻辑IF语句又称行IF语句。 如果在块IF结构中else块空块,而then块只有一条语句, 则用逻辑IF语句比较方便。 if(x.lt.60.0) then write(*,*) grade end if end if(x.lt.60.0) write(*,*) grade
12
四、用块IF实现选择结构
IF(逻辑表达式)THEN 块1 ELSE 块2 END IF 几点说明:
1. 一个块IF是有若干个语句组成的,其中三条语句均 不能单独是使用。
2. 一个块IF必须以块IF语句开始,以END IF语句结束。 一个块IF语句必须和一个END IF语句对应。
13
3. 一个块IF可以不包含ELSE语句和else块,也可以不 包含then块。 if(grade.lt.60.) then print *, ’No.’, num print *, ’grade’, grade end if
10
例如,A=3.5, B=5.0, C=2.5, D=1.0
11
算术运算符的运算对象是数值量,运算结果为数值。 关系运算符的运算对象是数值量,运算结果为逻辑量。 逻辑运算符的运算对象是逻辑量,运算结果仍为逻辑量。
逻辑运算符和算术运算符可以连续用运算符连接运算量, 但关系运算符不可以。
逻辑运算符可以写成:(设L1,L2,L3,L4为逻辑变量) L1 .AND. L2 .AND. L3 .AND. L4 算术运算符可以写成:A+B+C+D 但关系运算符不能写成:A .LT. B .LT. C .LT. D
4
二、关系表达式
关系表达式是最简单的一种逻辑表达式。
其一般形式为:
<算术量>
<关系运算符>
<算术量>
算术量:数值常数、数值型变量、数值函数、算术表达式。 关系运算符:关系比较符。 FORTRAN中有六种关系运算符
5
6
几点注意:
1. 关系运算符字母两侧各有一个句点,不要漏写。
2. 在一个关系表达式中可能包括算术运算符和关系运算符, 先进行算术运算,然后进行关系运算。(建议加括号) i+j.ne.m+n 相当于 (i+j).ne.(m+n)
19
几点说明: 1. ELSE IF语句相当于把ELSE语句和其下一行的块IF 语句连结成一个语句。 2. ELSE IF语句不需END IF语句与之对应。 3.一个块IF可以有多个ELSE IF语句,除非有块IF嵌套 否则只能有一个ELSE语句。 4.当处理多分支选择时,Байду номын сангаасELSE IF语句往往比较方便。 5. ELSE IF是在“条件为假”的分支中再继续进行分支 处理的。故在处理多分支的选择时,要把出现几率高的 条件写在前面,以提高效率。
9
4. 逻辑表达式 <逻辑量> <逻辑运算符> <逻辑量>
FORTRAN77逻辑量包括:
逻辑常量 逻辑型变量 关系表达式
(a.lt.b).and.(a.gt.c) (x.lt.0.).or.(a.gt.100.) .not.(x.le.0.) (a.gt.b).eqv.(c.gt.d) (l1.lt.0.).neqv..true. 注意:.AND.和.EQV.的区别。
read(*,*) grade if(grade.le.60.) then write(*,*) ‘D ' else if(grade.le.70.) then write(*,*) ‘C' else if(grade.le.80.) then write(*,*) ‘B' else write(*,*) ‘A' end if end
20
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
7
三、逻辑表达式
1. 逻辑常量 FORTRAN只有两个逻辑常量 .TRUE. .FALSE. 2. 逻辑型变量 Fortran 用LOGICAL语句说明逻辑变量。 logical a, b a=.true. b=(x+y).gt.z
8
表示“真”,即满足逻辑条件 表示“假”,即不满足逻辑条件
3. 逻辑运算符
因为不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句,故逻辑IF语句的条件要写全。
23
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70..and.grade.lt.80.) write(*,*) 'B' if(grade.ge.60..and.grade.lt.70.) write(*,*) 'C' if(grade.lt.60.) write(*,*) 'D' end
if(grade.ge.60.) then else print *, ’No.’, num print *, ’grade’, grade end if
4. 块IF的嵌套 一个块IF可以嵌套另一个块IF,但另一个块if必须 完整地出现在then块或else块的位置。
14
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end
17
五、ELSE IF 语句
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end 为了避免过多的块IF嵌套,FORTRAN 还提供了 ELSE IF语句来处理“否则,如果…”的情况。
相关文档
最新文档