《Fortran77程序基础.ppt》由会员分享,可在线阅读,更多相关《Fortran77程序基础.ppt(40页珍藏版)》请在三一办公上搜索。
1、Fortran 程序设计基础,江苏科技大学张家港校区 王 飞,Contents,Fortran语言简介 作为一门诞生于上个世纪50年代后半期的高级计算机语言,Fortran在这个C/C+、Java等新兴语言大行其道的时代仍然活跃在人们的视野之中。Fortran语言的长项在于数值计算,在科学研究和工程设计领域有着广泛的用途。在描述数学语言的自然性方面,Fortran同现存的其他高级语言相比有着明显的优势。对于科研工作者和工程技术人员而言,Fortran语言的易学性和易用性是公认的。,Fortran语言基础知识,1954:IBM 在 IBM 704 上发展 1957:IBM发表,Fortran F
2、ormula Translator 1966:American Standards Association制定 Fortran 66 鉴于各家编译器无法相容,故统一标准 American Standards Association:美国国家标准局(ANSI)的前身 1978:ANSI 公布 Fortran 77 标准删去部分内容,新增逻辑与输入输出方面的功能 1992:国际标准组织 ISO 公布 Fortran 90 标准与 77 版本差异较大 加入物件导向、提供指针与加強阵列功能、自由格式写作 1997:国际标准组织 ISO 公布 Fortran 95 标准加强并行运算Fortran 200
3、 x,Fortran 发展历史,Compaq Visual Fortran 6.5,Fortran 编译器Compaq Visual Fortran,固定格式(Fortran77,后缀.f;.for)自由格式(Fortran90,后缀.f90),Fortran语言的书写格式,在Fortran语言中,有五种基本的数据类型可供使用。他们分别是整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL)对我们来说常用的数据类型为整型、实型、字符型各数据分类分别包括常量及变量,数据类型及I/0格式,变量名的作用是识别程序中的变量。Fortra
4、n中的变量名命名有一定的规则,主要有以下几条。变量名中只能包含26个英文字母和09十个数字;在Fortran90/95标准中,还允许使用下划线“_”。变量名的第一个字符必须是字母,不能是下划线“_”或数字。在Fortran77标准中,变量名不允许超过6个字符;在Fortran90/95标准中,变量名不允许超过31个字符。,数据类型及I/0格式,变量的定义及类型说明:(1)类型说明语句 integer year,month,day real runoff character*10 station(2)隐含约定 IN 规则,数据类型及I/0格式,输入、输出语句READ(设备号,格式说明或格式说明语
5、句标号)变量列表WRITE(设备号,格式说明或格式说明语句标号)变量列表READ,WRITE语句中当设备号为星号“*”时,表示从默认的设备输入输出;格式说明为星号“*”表示表控格式输入、输出;输入、输出项可以有多个,每个输出项之间用逗号“,”分隔;当语句中没有输出项时,命令将输出一个空白行。表控格式输入、输出格式输入、输出,数据类型及I/0格式,格式输入输出控制符常用控制符 i,f,a写法:nIw;nfw.d;naw如:integer year,month,day write(*,(3i8)year,month,day又如:real runoff write(*,(f9.2)runoff,数据
6、类型及I/0格式,格式说明语句 format写法:FORMAT(format-list)如:integer year,month,day write(*,15)year,month,day15 format(3i8),数据类型及I/0格式,Fortran 三种常用运算算数运算:算数运算符及算数表达式关系运算:关系运算符及关系表达式逻辑运算:逻辑运算符及逻辑表达式其中,算数运算是Fortran的基本运算,其基本运算符包括+,-,*,/,*,Fortran语法结构,Fortran语法结构,关系运算在实际的数学或工程问题中,经常会遇到比较两个数据谁大谁小的问题。这就是一个关系比较的问题。在Fortr
7、an中,提供了进行这类操作的运算符和表达式规则。关系运算符也可以称作关系比较符,它是一个双目运算符。Fortran中定义了六个基本的关系运算符,Fortran语法结构,关系表达式是最简单的一种逻辑表达式,它的一般形式为:关系运算量可以是算术量,也可以是字符量。算术量可以是数值型常量、数值型变量、数值函数,还可以是算术表达式。如:A+B3.5 等价于40=40 等价于40C 等价于COS(B)=0.5 等价于(M+N)*X=0.0 等价于X-Z.NE.(Y+X)等价于 X-Z.NE.(Y+X)关系运算符等级低于算数运算符,Fortran语法结构,逻辑运算Fortran语言中提供了5种逻辑运算符供
8、程序员在编程时使用。新旧Fortran标准中的逻辑运算符没有任何区别,每个运算符的左右两侧都有一点“.”,书写时不可以省略。逻辑运算符中有的是双目运算符,有的是单目运算符,使用中需要注意。,Fortran语法结构,逻辑表达式的一般形式为:同关系表达式不同,一个逻辑表达式中可以包括多个逻辑运算符,例如逻辑表达式“A.GE.10.0.AND.A+C.GT.B+D.OR.NOT.TRUE.”中包含了.AND.、.OR.、.NOT.三个逻辑运算符。在逻辑表达式中除了有逻辑运算符外,还可以有关系运算符和算术运算符。下面是一些逻辑表达式的例子:(A.GT.B).AND.(A.NE.C)等价于(AB).AN
9、D.(A/=C)(X.LT.-1.0).OR.(X.GT.1.0)等价于(X1.0).NOT.(A+C)*D.LE.0.0)等价于.NOT.(A+C)*DB).EQV.(C=D),Fortran语法结构,在上面的一系列例子中,有的逻辑表达式中既有逻辑运算符,又有关系运算符和算术运算符。对于这种混合了多种运算符的表达式,Fortran语言规定了不同运算符的运算顺序:首先计算算术表达式的值(例如前面一个范例中的A+C和B+D)。接下来再求关系表达式的值(例如前面一个范例中的和A+C.GT.B+D)。最后进行逻辑运算,各个逻辑运算符的先后顺序是:.NOT.AND.OR.EQV.=.NEQV.。如果逻
10、辑表达式中有括号,则先进行括号内的运算。,程序流程控制的常用语句结构判断If语句goto语句块if结构do循环结构常用结构选择结构循环结构,Fortran程序流程控制,If语句IF(逻辑表达式)执行语句块If结构IF(逻辑表达式1)THEN THEN 块ELSE IF(逻辑表达式2)THEN ELSE IF块ELSE ELSE块END IF,Fortran程序流程控制,goto 语句 goto 语句标号do循环语句DO 循环变量=循环初值,循环终值,循环增量 循环体ENDDO 当循环增量为1时,可省略,Fortran程序流程控制,选择结构设计块IF语句多层嵌套块IF语句循环结构设计“当”型循环
11、“直到”型循环其他程序控制语句EndPausestop,Fortran程序流程控制,实例分析(1)1100求和(2)输入5个数,按大小排序,Fortran程序流程控制,数组是Fortran语言中功能最为强大、运用最为灵活的一种数据结构。在存储结构上,数组占用一片连续的存储单元。程序中通过数组索引来对数组元素、片断进行操作。数组的基本操作数组的定义数组的引用数组的赋值数组的计算数组的输入输出,数组操作,数组的定义类型说明:数组名(下标下界:下标上界,),如 real runoff(365)real runoff(12,31)real runoff(1:12,1:31)数组下标下界缺省时,值为1数
12、组可用DIMENSION语句定义DIMENSION runoff(365)Real runoff使用数组必须先定义,数组操作,数组引用(1)引用数组元素数组名(下标),如 runoff(15),rain(3,5)(2)引用全部数组数组名,如:real B(10),A(10)B=A(3)引用数组片段数组名(下标范围),数组操作,PROGRAM TEST IMPLICIT NONE!变量定义 REAL:A1,A2,A3,A4,A5,B(5,5)READ(*,*)A1,A2,A3,A4,A5!数组片断的引用 B(1,1:5)=A1 B(2,1:5)=A2 B(3,1:5)=A3 B(4,1:5)=A
13、4 B(5,1:5)=A5END PROGRAM TEST,数组操作,数组赋值(1)赋值语句 数组对象=value(2)data语句(赋初始值)data days/31,28,31,30,31,30,31,31,30,31,30,31/(3)do循环 do i=1,12 do j=1,31 runoff(i,j)=0 enddo enddo,数组操作,数组的运算包括数组之间的运算及数组元素之间的运算数组的运算,如数组间的数学运算(+,-,*,/,*),数组的合并、转置运算等,直接以数组为操作对象。数组元素之间的运算多通过循环语句进行,数组操作,数组的输入输出数组的输入输出多通过do循环语句或隐
14、式do循环语句进行如 do i=1,12 do j=1,days(i)write(*,*)runoff(i,j)enddo enddo又可写成do i=1,12write(*,*)(runoff(i,j),j=1,days(i)enddo,数组操作,一个Fortran程序中通常不是只由一个主程序组成,而是由几个按某种方式划分的不同程序单元来共同组成。尽管Fortran程序中允许只有主程序而没有子程序,但绝不允许只有子程序而没有主程序。在Fortran中,程序的执行总是从主程序开始的。程序可以有一个或多个子程序。函数子程序(FUNCTION)子例行子程序(SUBRIOUTINE)各子程序间的数据
15、传递,子程序及模块化,子程序及模块化,函数子程序和子例行子程序是子程序的两种常用基本形式。它们的共同特征就是作为数据处理过程的集合。但是这两种子程序也不完全相同,函数子程序会返回一个函数值,且通常不会改变哑元的数值。因此,函数子程序更像是数学上的一个函数。而子例行子程序通常用于完成一项更为复杂的任务,通过哑元或者其他手段返回几个结果,哑元的数值通常会在程序的执行过程中改变。,子程序及模块化,函数子程序的一般形式为:prefix FUNCTION name(d-arg-list)RESULT(r-name).END FUNCTION name1prefix说明项prefix说明项是一个可选参数,
16、可以使用如下两种形式来书写:type keyword或keyword type2d-arg-listd-arg-list表示函数的哑元列表。如果函数子程序不包含哑元,则哑元列表可以省略,但是函数名后的括号不能省略。3RESULT关键字RESULT关键字用于声明将函数的返回值保存在其后的变量名中,称为函数结果名。,子程序及模块化,函数子程序的调用与内在函数的调用形式一样。在主调程序的任意位置,可以通过下面的语句形式将函数子程序的计算结果赋值给变量:V=函数名(实元表)其中,V表示用于接收函数计算结果的变量;实元表是程序中实际传入函数子程序的变量列表,除非有特殊说明,变量列表中的实元个数以及类型必
17、须与函数子程序定义时的虚参在个数和类型上一致。如果函数不包含哑元,则调用形式是在表达式中直接写上函数名再跟空括号即可:V=函数名(),子程序及模块化,子例行子程序同函数子程序非常相似,但是子例行子程序不会有返回值。这种形式的子程序是以SUBROURTINE语句开始,END语句结束的过程。其一般语法形式如下:前缀 SUBROUTINE子程序名(哑元列表)END SUBROUTINE子程序名程序调用 call 子程序名,各子程序间的数据传递(1)虚实结合(2)common语句(3)数据定义模块Common语句(公共区语句)一般形式Common/公共区名称/变量表,子程序及模块化,在前面的说明中,大
18、部分的程序在运行时,总是从键盘上输入数据,程序的输出也几乎总是显示在计算屏幕上。对于一些小程序,输入的数据不多、数据结构也不复杂,采用这种方式是可行的。但是,对于一些大型的应用程序(如WEP模型等)涉及到几百兆甚至上G的数据输入与输出。在这种情况下,如果仍然采用终端输入输出的方式就很难想象了。另一方面,使用终端输入输出方式时,程序在运行中可以通过屏幕查看到输出的结果,一旦退出程序,此时要想再次查看输出的结果就很困难了,除非再次运行程序。使用文件就可以避免上述问题,同时文件还能避免重复处理,保存起来也很方便。,文件操作及批处理,文件操作及批处理,在Fortran语言中,OPEN语句将设备描述符和
19、具体的外部或内部文件连接起来,可用于建立一个新文件并使其与一个设备描述符相连,或者改变某一个连接的属性。OPEN语句有着丰富的参数选项,能够对文件的各种性质进行指定,是Fortran语言中最为复杂的一种语句。熟悉和掌握OPEN语句中各个参数项的意义和作用,是进行文件操作的基础。OPEN语句的一般形式如下:OPEN(UNIT=io-unit,FILE=name,ERR=label,IOSTAT=i-var,slist)语句中括号内的部分就是OPEN语句的参数项,也称为说明项。包括设备号说明符、文件名说明符、错误处理说明符、I/O状态说明符和属性说明符slist,其中属性说明符又包括了一系列文件属性说明。,CLOSE语句可以理解成OPEN语句的“逆语句”,它用于解除设备号与文件之间的连接状态,又称关闭文件。CLOSE语句的参数选项也较为丰富,提供的功能也较多。CLOSE语句的一般形式为:CLOSE(UNIT=io-unit,STATUS=p,ERR=label,IOSTAT=i-var)语句中括号内的部分就是CLOSE语句的参数项,也称为说明项。包括设备号说明符、文件状态说明符、错误处理说明符、I/O状态说明符。,文件操作及批处理,Thanks for your attention!,