Fortran 程序基础_第1页
Fortran 程序基础_第2页
Fortran 程序基础_第3页
Fortran 程序基础_第4页
Fortran 程序基础_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Fortran 程序设计基础,金鑫 2010.8.6,Contents,Fortran语言简介 作为一门诞生于上个世纪50年代后半期的高级计算机语言,Fortran在这个C/C+、Java等新兴语言大行其道的时代仍然活跃在人们的视野之中。Fortran语言的长项在于数值计算,在科学研究和工程设计领域有着广泛的用途。在描述数学语言的自然性方面,Fortran同现存的其他高级语言相比有着明显的优势。对于科研工作者和工程技术人员而言,Fortran语言的易学性和易用性是公认的。,Fortran语言基础知识,1954:IBM 在 IBM 704 上发展 1957:IBM发表,Fortran Formu

2、la 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格式,变量名的作用是识别程序中的变量。For

4、tran中的变量名命名有一定的规则,主要有以下几条。 变量名中只能包含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 又如: r

6、eal runoff write (*, (f9.2) runoff,数据类型及I/0格式,格式说明语句 format 写法:FORMAT (format-list) 如: integer year, month, day write(*, 15)year, month, day 15 format(3i8),数据类型及I/0格式,Fortran 三种常用运算 算数运算:算数运算符及算数表达式 关系运算:关系运算符及关系表达式 逻辑运算:逻辑运算符及逻辑表达式 其中,算数运算是Fortran的基本运算,其基本运算符包括+,-,*,/,*,Fortran语法结构,Fortran语法结构,关系运算

7、 在实际的数学或工程问题中,经常会遇到比较两个数据谁大谁小的问题。这就是一个关系比较的问题。在Fortran中,提供了进行这类操作的运算符和表达式规则。 关系运算符也可以称作关系比较符,它是一个双目运算符。Fortran中定义了六个基本的关系运算符,Fortran语法结构,关系表达式是最简单的一种逻辑表达式,它的一般形式为: 关系运算量可以是算术量,也可以是字符量。算术量可以是数值型常量、数值型变量、数值函数,还可以是算术表达式。如: A+B3.5 等价于A+B.GT.3.5 40=40 等价于40.GE.40 40C 等价于40.LT.C COS(B)=0.5 等价于COS(B).LE.0.

8、5 (M+N)*X=0.0 等价于(M+N)*X.EQ.0.0 X-Z.NE.(Y+X) 等价于 X-Z.NE.(Y+X) 关系运算符等级低于算数运算符,Fortran语法结构,逻辑运算 Fortran语言中提供了5种逻辑运算符供程序员在编程时使用。新旧Fortran标准中的逻辑运算符没有任何区别,每个运算符的左右两侧都有一点“.”,书写时不可以省略。逻辑运算符中有的是双目运算符,有的是单目运算符,使用中需要注意。,Fortran语法结构,逻辑表达式的一般形式为: 同关系表达式不同,一个逻辑表达式中可以包括多个逻辑运算符,例如逻辑表达式“A.GE.10.0.AND.A+C.GT.B+D.OR.

9、NOT.TRUE.”中包含了.AND.、.OR.、.NOT.三个逻辑运算符。在逻辑表达式中除了有逻辑运算符外,还可以有关系运算符和算术运算符。 下面是一些逻辑表达式的例子: (A.GT.B).AND.(A.NE.C)等价于(AB).AND.(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语言规定了不同运算符的运算

10、顺序: 首先计算算术表达式的值(例如前面一个范例中的A+C和B+D)。 接下来再求关系表达式的值(例如前面一个范例中的A.LE.10.0和A+C.GT.B+D)。 最后进行逻辑运算,各个逻辑运算符的先后顺序是:.NOT.AND.OR.EQV.=.NEQV.。 如果逻辑表达式中有括号,则先进行括号内的运算。,程序流程控制的常用语句结构 判断If语句 goto语句 块if结构 do循环结构 常用结构 选择结构 循环结构,Fortran程序流程控制,If语句 IF(逻辑表达式) 执行语句 块If结构 IF(逻辑表达式1) THEN THEN 块 ELSE IF(逻辑表达式2) THEN ELSE I

11、F块 ELSE ELSE块 END IF,Fortran程序流程控制,goto 语句 goto 语句标号 do循环语句 DO 循环变量 = 循环初值,循环终值,循环增量 循环体 ENDDO 当循环增量为1时,可省略,Fortran程序流程控制,选择结构设计 块IF语句 多层嵌套块IF语句 循环结构设计 “当”型循环 “直到”型循环 其他程序控制语句 End Pause stop,Fortran程序流程控制,实例分析 (1)1100求和 (2)输入5个数,按大小排序,Fortran程序流程控制,数组是Fortran语言中功能最为强大、运用最为灵活的一种数据结构。在存储结构上,数组占用一片连续的存

12、储单元。程序中通过数组索引来对数组元素、片断进行操作。 数组的基本操作 数组的定义 数组的引用 数组的赋值 数组的计算 数组的输入输出,数组操作,数组的定义 类型说明 : 数组名(下标下界:下标上界,), 如 real runoff(365) real runoff(12,31) real runoff(1:12,1:31) 数组下标下界缺省时,值为1 数组可用DIMENSION语句定义 DIMENSION runoff(365) Real runoff 使用数组必须先定义,数组操作,数组引用 (1)引用数组元素 数组名(下标),如 runoff(15),rain(3,5) (2)引用全部数组

13、 数组名,如: 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) = A4 B(5,1:5) = A5 END PROGRAM TEST,数组操作,数组赋值 (1)赋值语句 数组对象 = value (2)data语句(赋初始值) data days/31,

14、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循环语句或隐式do循环语句进行 如 do i=1,12 do j=1,days(i) write(*,*)runoff(i,j) enddo enddo 又可写成 do i=

15、1,12 write(*,*)(runoff(i,j),j=1,days(i) enddo,数组操作,一个Fortran程序中通常不是只由一个主程序组成,而是由几个按某种方式划分的不同程序单元来共同组成。尽管Fortran程序中允许只有主程序而没有子程序,但绝不允许只有子程序而没有主程序。在Fortran中,程序的执行总是从主程序开始的。程序可以有一个或多个子程序。 函数子程序( FUNCTION ) 子例行子程序(SUBRIOUTINE) 各子程序间的数据传递,子程序及模块化,子程序及模块化,函数子程序和子例行子程序是子程序的两种常用基本形式。它们的共同特征就是作为数据处理过程的集合。但是这

16、两种子程序也不完全相同,函数子程序会返回一个函数值,且通常不会改变哑元的数值。因此,函数子程序更像是数学上的一个函数。而子例行子程序通常用于完成一项更为复杂的任务,通过哑元或者其他手段返回几个结果,哑元的数值通常会在程序的执行过程中改变。,子程序及模块化,函数子程序的一般形式为: prefix FUNCTION name (d-arg-list) RESULT (r-name) . END FUNCTION name 1prefix说明项 prefix说明项是一个可选参数,可以使用如下两种形式来书写: type keyword 或 keyword type 2d-arg-list d-arg-

17、list表示函数的哑元列表。如果函数子程序不包含哑元,则哑元列表可以省略,但是函数名后的括号不能省略。 3RESULT关键字 RESULT关键字用于声明将函数的返回值保存在其后的变量名中,称为函数结果名。,子程序及模块化,函数子程序的调用与内在函数的调用形式一样。在主调程序的任意位置,可以通过下面的语句形式将函数子程序的计算结果赋值给变量: V = 函数名(实元表) 其中,V表示用于接收函数计算结果的变量;实元表是程序中实际传入函数子程序的变量列表,除非有特殊说明,变量列表中的实元个数以及类型必须与函数子程序定义时的虚参在个数和类型上一致。如果函数不包含哑元,则调用形式是在表达式中直接写上函数

18、名再跟空括号即可: V = 函数名(),子程序及模块化,子例行子程序同函数子程序非常相似,但是子例行子程序不会有返回值。这种形式的子程序是以SUBROURTINE语句开始,END语句结束的过程。其一般语法形式如下: 前缀 SUBROUTINE子程序名 (哑元列表) END SUBROUTINE子程序名 程序调用 call 子程序名,各子程序间的数据传递 (1)虚实结合 (2)common语句 (3)数据定义模块 Common语句(公共区语句)一般形式 Common /公共区名称/变量表,子程序及模块化,在前面的说明中,大部分的程序在运行时,总是从键盘上输入数据,程序的输出也几乎总是显示在计算屏幕上。对于一些小程序,输入的数据不多、数据结构也不复杂,采用这种方式是可行的。但是,对于一些大型的应用程序(如WEP模型等)涉及到几百兆甚至上G的数据输入与输出。在这种情况下,如果仍然采用终端输入输出的方式就很难想象了。另一方面,使用终端输入输出方式时,程序在运行中可以通过屏幕查看到输出的结果,一旦退出程序,此时要想再次查看输出的结果就很困难了,除非再次运行程序。使用文件就可以避免上述问题,同时文件还能避免重复处理,保存起来也很

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论