FORTRAN 知识点总结

FORTRAN 知识点总结
FORTRAN 知识点总结

FORTRAN

第2章FORTRAN90基础知识:

程序单元的概念:

fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。每个程序只有一个主程序单元。各单元体的程序体形式上相同。

程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。

语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。

字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。 数据结构:

整型INTEGER (34-2 下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;

实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);

字符型CHARACTER ,由一对单撇号或双撇号之间的字符序列组成;

逻辑型LOGICAL 。

派生数据类型TYPE ;

数组 INTEGER,DIMENSION(1,50)::A ,可直接对数组元素进行运算如

3*A,SQRT(A);

字符子串,在字符串CHARACTER(LEN=80)::ROW 中,ROW(1:3)就表示字符串

ROW 中第1到第3个元素组成的子串。

变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。

第3章基本语句:

类型说明语句: 类型说明(种别说明),属性说明::变量名表

尽量避免把两个实数作相等或不相等的比较。淘汰隐式说明IMPLICIT NONE 种别说明:种别参数即对可移植数据精度和范围进行选择的机制

KIND(X) 返回变元X 的种别参数值

SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。N 指十进制有效位数,m 指明值范围内以10为底的幂次。

种别表示方法:数值型常数、逻辑型常数的种别用后缀法表示,字符型用前缀法。 属性说明:PARAMETER 常量名属性,如INTEGER,PARAMETER::N=5(N 值不可更改);DIMENSION 数组属性,如INTEGER DIMENDION (1:10)::X 。

算术表达式:**乘方。-*/**或或求函数值括号+→→→→

ABS 绝对值;MAX 最大值;MIN 最小值;SQRT 平方根;MOD 求余数。

COS,SIN,TAN,ATAN,LOG 自然对数,LOG10 常用对数,EXP 指数,SIGN 符号。 输入:READ(部件号,格式说明)输入 如READ(5,'(I7)')X,Y I7表示每行输入一个整数,每个数占7个字符。表控格式 READ *,输入表;READ(*,*)输入表。

输出:WRITE(部件号,格式说明)输出表 WRITE(6,'(1X,2F6.2)')X,Y 1X 表示一个空格,F 表示作实型编辑,6表示每个数占六列,2表示小数部分占两列,F 前的2表示重复系数。 省略设备号 PRINT 格式说明,输出表

表控格式 WRITE(*,*)X,Y PRINT*,X,Y

第4章选择结构程序设计:

关系与逻辑表达式:> < == >= <= /=; .NOT. .AND. .OR. .EQV.

.NEQV.

混合运算符的优先级别:逻辑运算符关系运算符算数运算符括号→→→ IF 语句与IF 结构的区别:

IF 语句:IF (e) S

IF 结构:IF (e1) THEN

块1

ELSE IF(e2) THEN

块2

ELSE

块 n

END IF

CASE 结构:SELECT CASE(MONTH)

CASE(2)

DAYS=28

CASE(4,6,9,11)

DAYS=30

.........

END SELECT

第5章循环结构程序设计:

不带循环变量的DO : [结构名:] DO

循环体

END DO[结构名]

EXIT 语句:停止循环,将控制转移到当前循环之外。 EXIT [DO 结构名]

CYCLE 语句:在循环执行到该语句时,跳过循环体在它后面的那些语句,再从循环体的第1条语句开始执行。 CYCLE [DO 结构名]

带循环变量的DO : [结构名:] DO [,] v=u1,u2,[u3]

循环体

END DO[结构名]

DO While 结构: [结构名:] DO WHILE (逻辑表达式)

循环体

END DO[结构名]

隐DO 循环:(list,v=u1,u2,u3) 如 READ*,(A(I),I=1,5)

第6章程序单元和过程:

函数子程序:必须提供一个值,这个值赋给结果变量,成为函数的值。

[RECURSIVE] FUNCTION 函数名 (虚元表) RESULT (结果名)

子例子程序:本身并不返回值,其计算结果全部通过虚实结合传递给主调程序。必须通过CALL 语句来调用。 CALL 子程序名(实元表)

[RECURSIVE] SUBROUTINE 子程序名(虚元表)

接口块:INTERFACE

必须使用:实元是关键字变元时;实元是缺省的可选变元时;一个外部函数使用系统中的内部运算符扩展了原有的功能时;外部过程扩展了赋值号的使用范围时;使用一个类属名调用过程时;调用一个外部过程,该过程的结果是一个数组。

虚实结合:实元和虚元的个数相等,相应位置上的类型一致。

关键字变元: 虚元名=实元表达式

可选择变元:

OPTIONAL 属性:一虚元的类型说明语句中有OPTIONAL 属性便是可选变元。

PRESENT(X)函数:用来检查它的自变量X 是否在程序执行部分出现。当X

出现时,函数值为“真”,否则为“假”。

虚过程:如果虚元是一个过程名时,作为虚元的过程称为虚过程。只有潜逃调用至少两层以上时才能用虚过程。

模块:MODULE 包含程序说明语句和过程,但不能直接运行。其他程序引用模块实际就是将该模块中的全部语句复制到本程序单元,并且所有与模块中的名字相同的变量彼此取值相通,共享存储单元。

模块名对程序来说是全局的,不能与本程序中的任何程序单元名、外部名相同,也不得与模块内的任何局部名重名。

引用: USE 模块1,模块2,....,模块n

USE 模块名,ONL Y :实体名表

递归:递归调用是指过程内直接或间接地调用自己。

内部过程:如果一个过程不是写在主程序外,而是写在主程序单元之内,作为主程序内包含的一个过程,则该过程为内部过程。

通常没有说明语句,一般没有虚元。

类属过程:允许不同类型的实元与同一虚元结合,放宽了虚实结合必须一致的条件。 超载运算符:标准FORTRAN 运算符通过恰当的过程扩展其功能,使其具有新的含义。 自定义运算符。

超载赋值:指把赋值的含义扩展到新的数据类型。赋值号两边的类型必须相容。

第7章数组:

数组基本概念:用DIMENSION 属性说明之,同时给出数组元素的起止下标;使用数组时,即可直接使用数组某个元素,也可直接使用数组名。

数组片段:代表数组中的部分元素,可连续也可不连续。

如:A(3:6) 或 A(10:30:2) 步长是2

数组构成器:赋值4个元素的数组:A=(/1,2,3,4/) 其中(/1,2,3,4/)就是数组构成器

例:A=(/(SQRT(REAL(I)),I=1,4)/) 或 A=(/V(3),V(6),V(7),V(9),/)

二维数组按列存放:)2,3()2,2()2,1()1,3()1,2()1,1(A A A A A A →→→→→

RESHAPE 函数:将数组构成器中的一维数据重新构成任意形的数组。

例:A=RESHAPE(SOURCE=(/1,2,3,4,5,6,7,8,9,-1,-2,-3/)),SHAPE=(/3,4/)

数组形式:常数组 REAL,DIMENSION(3:5+7)::A

可调数组 REAL,DIMENSION(M,N)::A

假定形状数组 REAL,DIMENSION(:,:)::A

动态数组(可变) REAL,DIMENSION(:),ALLOCATABLE::A

数组做变元,只能作为过程的实元不能是虚元。

数组运算:数组赋值A=B;数组表达式A+B (对应元素相加);数组与标量

A-5 (每个元素减5);数组作为内在函数的实元B=ABS(A) B与A形状相同。

数组内在函数:求数组大小SIZE(A);求数组最大值元素MAXV AL(A);求数组最小值元素MINV AL(A);求数组最大值元素下标MAXLOC(A);求数组最小值元素下标MINLOC(A).;数组各元素之和SUM(A);数组各元素之积PRODUCT(A);求数组维的下界LBOUND(A);求数组维的上界UBOUND(A);数组转置TRANSPOSE(A).

屏蔽数组赋值:如WHERE (A<0) B=0 (相应元素)

第8章字符型数据:

字符常量:''或''''之间的若干字符

字符变量(特有长度属性):如CHARACTER(LEN=10,KIND=2)::A

字符子串:字符变量名(e1:e2)

如NAME=''DAQING PETROLUEM'' 则NAME(1:6)='DAQING' 字符表达式:指用字符运算符吧字符常量、字符变量或字符数组元素等字符型数据连接起来的有意义的式子。

字符运算符只有一个,就是字符连接符“//”。如'HE'//'LLO'='HELLO'

字符关系表达式,比较按字符的代码进行。两字符串比较,以第一次出现不同字符的比较结果为准,字符个数不够时以空格补齐。

字符函数:求字符长度函数LEN(String)或LEN-TRIM(String);除去字符串尾部空格函数TRIM(String);字符与字符序号相互转化,字符向字符序号ICHAR(CH)或IACHAR(CH),字符序号向字符CHAR(I)或ACHAR(I);子串位置函数INDEX(String1,String2),String2是String1的子串,结果为正整数表示String2在String1最左边的子串的起始位置;字符串比较函数LGE(String1,String2) 表示是1否大于等于2,LGT、LLE、LLT分别表示是否大于、是否小于或等于、是否小于;首、尾部空格调整函数调左函数(把空格全调到尾部)ADJUSTL(String)或调右函数(把空格全调到首部)ADJUSTR(String)

第9章派生类型和指针:

派生类型:TYPE[存取方式描述::] 派生类型名

成员组i 类型说明

END TYPE [派生类型名]

说明:TYPE(派生类姓名)::变量名[,...]

指针:REAL POINTER::PT1,PT2 PT1=>X

PT1=>PT2 表示PT1指向PT2所指的目标,PT1和PT2都指向Y;PT1=PT2 表示将PT2所指的目标的值赋给PT1所指的目标,X=Y。

可以有多个指针指向同一个目标,但不允许一个指针同时指向多个目标。

指针不但可以指向实型、整型目标,还可以指向字符型和逻辑型目标。

第10章数据文件:OPEN(连接信息表) CLOSE(关闭信息表)

UNIT=ut,ut是一个文件号,必须是无符号整数;FILE=fe,fe是字符型数据,代表文件名;STATUS=ss,ss是用户给出的字符串,表示文件的状态,可以是

'OLD','NEW','REPLACE','SCRATCH','UNKNOW缺省';ACCESS=as,as是字符串,可为

'SEQUENTIAL顺序的'缺省,'DIRECT直接的';FORM=fm,fm是字符串,可为'FORMA TTEED 有格式的','UNFORMA TTEED无格式的';RECL=rl,rl是正整数,用来记录文件长度,单位字节;ACTION=an,an为字符串,可为'READ','WRITE','READWRITE'缺省;BLACK=bk,bk 为字符串,可为'NULL','ZERO';IOSTA T=it,it为整型变量,OPEN未出错值为0,出错后有正整数值;ERR=label,若打开文件操作出错,转到标号为lable的语句处。

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

(完整)Fortran经典编程语言笔记(你值得拥有)

FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)

第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)

fortran语法手册

1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 2.1 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 2.4 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例: DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 2.5 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)

DATA CHN/10*' '/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则 程序中的变量名,不分大小写; 变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效; 一行只能写一个语句; 程序的第一个语句固定为PROGRAM 程序名称字符串 某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容; 某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容; 某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行; 某行的第7至72字符位为语句区,语句区内可以任加空格以求美观; 某行的第73至80字符位为注释区,80字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT. 或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句

fortran程序案例题汇编(14道)

1.Fibonacci数列定义如下: F1=1 F2=1 F n=F n-1+F n-2 (n>2) 求Fibonacci数列的前30项。 integer f(30),i f(1)=1 f(2)=2 do i=3,30 f(i)=f(i-1)+f(i-2) enddo print*,f end 2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,j do i=1,10 read*,s(i) enddo do i=1,10 a(i)=1 do j=1,10 if(s(i)

3.给定一组数,按照从小到大的顺序输出。integer a(10) integer p do i=1,10 read *,a(i) enddo do j=1,9 p=j do i=j+1,10 if (a(i)

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。 character*6,dimension(:),allocatable::xue integer,dimension(:,:),allocatable::g integer,dimension(:),allocatable::zong integer i,j,n character*6,xh print *,"请输入学生的个数" read *,n allocate(xue(n)) allocate(g(n,3)) allocate(zong(n)) do i=1,n read *,xue(i),(g(i,j),j=1,3) enddo do i=1,n zong(i)=0 do j=1,3 zong(i)=zong(i)+g(i,j) enddo enddo print *,"请输入你要打印的学生的学号" read *,xh do i=1,n if(xue(i)==xh)then print *,(g(i,j),j=1,3),zong(i) exit endif enddo end

fortran语言语法

FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :< 说实话,从科技发展的趋势来说这不是好事。您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受! 强烈建议阅读《发掘C#特性赋予科学计算项目以威力》 1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 用类型说明语句确定变量类型:可以改变I-N规则

用IMPLICIT语句将某一字母开头的全部变量指定为所需类型 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)

FORTRAN内部函数库

FORTRAN内部函数 用FORTRAN解题往往要用到一些专门运算,如求三角函数sinx, cosx,对数lnx,指数ex,求一组数中最大数和最小数等。 FORTRAN提供了一些系统函数(称为内部函数)来完成这些运算。程序设计者不必自己设计进行这些运算的语句组(即程序段或子程序),只需写出一个函数的名字以及给出一个或若干个自变量,就可以得到所需的值,例如: SQRT(4.0)求出4.0的平方根, SIN(2.0)求出2(弧度)的正弦值, EXP(3.5)求出e3.5, LOG(3.0)求出3, 常用的函数如下表,FORTRAN77提供的全部函数明细见FORTRAN77内部函数。 函数名含义应用例子相当于数学上的运算 ABS 求绝对值ABS(A) |a| EXP 指数运算EXP(A) e^a SIN 正弦值SIN(X) sin x COS 余弦值COS(X) cos x ASIN 反正弦ASIN(X) sin^(-1)a ACOS 反余弦ACOS(X) cos-1a TAN 正切TAN(X) tan x ATAN 反正切ATAN(A) tan^(-1)a LOG 自然对数LOG(A) lna,或loge(a) LOG10 常用对数LOG10(A) log10a INT 取整INT(A) int(a),取a的整数部分 MOD 求余MOD(A1,A2) a - int(a1/a2)*a2 SIGN 求符号SIGN(A1,A2) |a1|(若a2>0) -|a1|(若a2<0) REAL 转换为实型REAL(I) MAX 求最大值MAX(A1,A2,A3) max(a1,a2,a3) MIN 求最小值 MIN(A1,A2,A3) min(a1,a2,a3) 说明: (1)FORTRAN77将这些系统函数分别编成一个个子程序,组成函数库,存贮于外部介质(如磁盘)上。在完成源程序的编译之后,用LINK命令实现连接,即将已翻译成二进制指令的目标程序与函数库连接。也就是将程序中出现函数名的地方用函数库中相应的一组指令代入之,组成一个统一的“可执行目标块”。例如,程序中出现一个SIN函数,在连接时就将一组二进制指令(它们是实现求正弦值的运算的)直接插入到程序中出现SIN的地方。由于是插入到程序内部的,所以称为“内部函数”。 (2)一个内部函数要求一个或多个自变量。例如,SQRT函数只能有一个自变量SQRT(4.6),MOD函数要求两个自变量MOD(8,3),MAX和MIN函数要求两个以上自变量MAX(6,-8,10),MIN(-6,8,0)。当自变量个数规定为2个时,自变量的顺序不应任意颠倒,MOD(8,3)表示8被3除的余数,其值为2,而MOD(3,8)则表示3被8除的余数,其值为3。当自变量个数>2时,自变量的顺序无关,MAX(6,8,10)和MAX(8,10,6)结果是一样的。

fortran程序实例

1)实例3—求多个半径下的圆周长 ! z3.f90 --Fortran95 ! FUNCTIONS: ! z3 - Entry point of console application. !************************************************************************* ! PROGRAM: z3 ! PURPOSE: Entry point for the console application. !************************************************************************ program z3 ! 求多个半径下的圆周长 ! 主程序 ! PROGRAM Z3 PRINT *, 'R=',1.2,'C=',C(1.2) PRINT *, 'R=',3.4,'C=',C(3.4) PRINT *, 'R=',15.6,'C=',C(15.6) PRINT *, 'R=',567.3,'C=',C(567.3) END program z3 !子程序 FUNCTION C(R) PI=3.1415926 C=2*PI*R RETURN ! Body of z3 end

2)实例4—键盘与显示器输入/输出 a)Fortran 基本操作 b)程序指令 ! ZXZ_I_O.f90 ! FUNCTIONS: ! ZXZ_I_O - Entry point of console application. ! PROGRAM: ZXZ_I_O ! PURPOSE: Entry point for the console application. !***************输入、输出样式种种************************** program ZXZ_I_O implicit none !变量声明的位置 INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B ! Variables PRINT*,'输入整数A'; READ*, A PRINT*,'输入整数B'; READ*, B B=A+B PRINT*,'B=A+B=',B WRITE(*,*) 'A*B=',A*B PRINT* ,'以上为计算机的计算结果,注意B的值'

Fortran常用函数

1、RANDOM_NUMBER Syntax ['sint?ks] n. 语法 CALL RANDOM_NUMBER (harvest结果) Intrinsic Subroutine(固有子程序):Returns a pseudorandom number greater than or equal to zero and less than one from the uniform distribution. 返回大于或等于0且小于1,服从均匀分布的随机数 2、RNNOA/ DRNNOA (Single/Double precision) Generate pseudorandom numbers from a standard normal distribution using an acceptance/rejection method. 产生服从标准正态分布的随机数 Usage(用法) CALL RNNOA (NR, R) Arguments(参数) NR— Number of random numbers to generate. (Input) 要产生随机数的个数 R— Vector of length NR containing the random standard normal deviates. (Output) 输出长度为NR,随机正态分布的向量 Comments(注解) The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator. 程序RNSET可以用来初始化随机数发生器的种子 Example In this example, RNNOA is used to generate five pseudorandom deviates from a standard normal distribution. INTEGER ISEED, NOUT, NR REAL R(5) EXTERNAL RNNOA, RNSET, UMACH C CALL UMACH (2, NOUT) NR = 5 ISEED = 123457 CALL RNSET (ISEED) CALL RNNOA (NR, R) WRITE (NOUT,99999) R 99999 FORMAT (' Standard normal random deviates: ', 5F8.4) END Output Standard normal random deviates: 2.0516 1.0833 0.0826 1.2777 -1.2260

FORTRAN知识点总结

F O R T R A N 第2章FORTRAN90基础知识: 程序单元的概念: fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。每个程序只有一个主程序单元。各单元体的程序体形式上相同。 程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。 语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。 字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。 数据结构: 整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回; 实型REAL ,小数形式和指数形式;复型COMPLEX (种别类

型参数值取实部与虚部中较大者); 字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成; 逻辑型LOGICAL。 派生数据类型TYPE; 数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A); 字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。 变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。 第3章基本语句: 类型说明语句:类型说明(种别说明),属性说明::变量名表 尽量避免把两个实数作相等或不相等的比较。淘汰隐式说明IMPLICIT NONE 种别说明:种别参数即对可移植数据精度和范围进行选择的机制 KIND(X) 返回变元X的种别参数值 SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。N指十进制有效位数,m指明值范围内以10为底的幂次。

fortran基本函数

FORTRAN 90标准函数(一) (2012-07-03 17:14:57) 转载▼ 分类:学习 标签: fortran 函数 教育 符号约定: ●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。 ●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。 ●[…]表示可选参数。 ●*表示常用函数。

注:三角函数名前有C、D的函数为复数、双精度型函数。 注:指数函数名、平方根函数名、对数函数名前有C、D的函数为复数、双精度型函数。 表4 参数查询函数

atan2函数的值域是多少?我从网上找到一个fortran函数的日志,说此值域是-π~π,但正常反正切函数的值域应该是-π/2~π/2。对atan2函数不够了解,所以不知道你的答案对不对,我个人认为不对。我是用正常的反正切函数atan(v/u)来算的: FORTRAN: if (u>0..and.v>0.) dir=270-atan(v/u)*180/pi if (u<0..and.v>0.) dir=90-atan(v/u)*180/pi if (u<0..and.v<0.) dir=90-atan(v/u)*180/pi if (u>0..and.v<0.) dir=270-atan(v/u)*180/pi if (u==0..and.v>0.) dir=180 if (u==0..and.v<0.) dir=0 if (u>0..and.v==0.) dir=270 if (u<0..and.v==0.) dir=90 if (u==0..and.v==0.) dir=999 其中uv等于零的五种情况要单独挑出来,不然程序会有瑕疵。atan函数换成atand函数的话直接是度数,不用*180/pi 我四个象限和轴都试了,应该没错。 最需要注意的问题,一个是函数值域,另一个是uv矢量方向和风向是反着的,并且风向角度数是从正Y轴开始顺时针算,和三角函数里度数从正X轴开始逆时针算不一样。

几个fortran程序

计算圆周率 REAL R,R1,R2,PI ISEED=RTC() N0=0 N=300000 DO I=1,N R1=RAN(ISEED) R2=RAN(ISEED) R=SQRT(R1*R1+R2*R2) IF(R<1.0)N0=N0+1 END DO PI=4.0*N0/N WRITE(*,*)PI END 一)蒙特卡洛计算生日问题 假设有N个人在一起,各自的生日为365天之一,根据概率理论,与很多人的直觉相反,只需23个人便有大于50%的几率人群中至少有2个人生日相同。 INTEGER M(1:10000), NUMBER1(0:364), NUMBER2 REAL X,Y ISEED=RTC() DO J=1, 10000 NUMBER1=0 X=RAN(ISEED) NUMBER1(0)=INT(365*X+1) JJJ=1 DO I=1,364 Y=RAN(ISEED) NUMBER2=INT(365*Y+1) ETR=COUNT(NUMBER1.EQ.NUMBER2) IF (ETR= =1) THEN EXIT ELSE JJJ=JJJ+1 M(J)=JJJ NUMBER1(I)=NUMBER2 END IF END DO END DO DO I=1,10000 IF(M(I).LE.23) SUM=SUM+1 END DO PRINT *,SUM/10000 END 二)MONTE CARLO SIMULATION OF ONE DIMENSIONAL DIFFUSION 蒙特卡罗计算一维扩散问题

INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃 ! XXM(I): THE MEAN OF XX WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THEN X=X+1 ELSE X=X-1 END IF XX(J,I)=X*X END DO END DO OPEN(1,FILE="C:\DIF1.DAT") DO I=1,IMAX XXM=0.0 XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1) END 三维的! 三)通过该程序了解FORTRAN语言如何画图(通过像素画图)USE MSFLIB INTEGER XR,YR !在的区域中画一个圆 PARAMETER XR=400,YR=400 INTEGER R, S(1:XR,1:YR) X0=XR/2 ! 圆心位置X0,YO Y0=YR/2 R=MIN(X0-10,Y0-10) !圆半径 S=0 !像素的初始状态(颜色) DO I=1,XR DO J=1,YR IF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10 IER=SETCOLOR(S(I,J)) IER=SETPIXEL(I,J) END DO END DO END

fortran语言内部函数

附录 FORTRAN 90标准函数 符号约定: ●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。 ●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。 ●[…]表示可选参数。 ●*表示常用函数。 表1 数值和类型转换函数 函数名说明 ABS(x)*求x的绝对值∣x∣。x:I、R,结果类型同x; x:C,结果:R AIMAG(x)求x的实部。x:C,结果:R AINT(x[,kind])*对x取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) AMAX0(x1,x2,x3,…)*求x1,x2,x3,…中最大值。x I:I,结果:R AMIN0(x1,x2,x3,…)*求x1,x2,x3,…中最小值。x I:I,结果:R ANINT(x[,kind])*对x四舍五入取整,并转换为实数(kind)。x:R, kind:I,结果:R(kind) CEILING(x)*求大于等于x的最小整数。x:R,结果:I CMPLX(x[,y][,kind]))将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I,结果:C(kind) CONJG(x)求x的共轭复数。x:C,结果:C DBLE(x)*将x转换为双精度实数。x:I、R、C,结果:R(8) DCMPLX(x[,y])将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,结果:C(8) DFLOAT(x)将x转换为双精度实数。x:I,结果:R(8) DIM(x,y)*求x-y和0中最大值,即MAX(x-y,0)。x:I、R, y的类型同x,结果类型同x DPROD(x,y)求x和y的乘积,并转换为双精度实数。x:R, y:R,结果:R(8)

fortran心得

Read 的规则: 按行读取,每次读一行,读完后光标自动跳到下一行的开头,空格和逗号代表结束(所以空格和逗号也是读取的一部分的话,需要使用“输入输出格式”) 如果想要将一行数据读入数组,代码为: Read(10,*) s(:,:,:) 不用规定输入输出格式,因为会根据s(:,:,:)确定需要读入的数字的个数,然后fortran会按部就班的读取,甚至文件中当前这一行的数字个数不足以填满s(:,:,:)的时候,read会自动跳到下一行继续搜索数字,直到填满s(:,:,:)为止。 但是需要注意给数组赋值的顺序:read会把它搜索到的第一个数字给s(1,1,1),第二个给s(2,1,1),第三个给s(3,1,1)… 程序9 1: 将read(unit=field,fmt="(A79)",iostat=status)buffer 中的A79改为A2,结果只输出每行的前两个字符,说明read是按整行整行读取的。 中间空了几行之后,空行之后的内容还是能被读取和输出,这说明,空行和空白是不一样的:空行也算是一种文本内容,因此不会终止读取,而空白意味着结束。 !读取文件 program main implicit none character(len=79)::filename="number.txt",buffer integer,parameter::field=10 integer::status=0 logical alive inquire(file=filename,exist=alive) if(alive)then open(unit=field,file=filename) do while(.true.) read(unit=field,fmt="(A79)",iostat=status)buffer if(status/=0)exit write(*,"(A79)")buffer end do else write(*,*)filename,"does't exist." end if pause stop end program main ============================================= 附number.txt =============================== 1234555666

fortran程序30个

程序1 PROGRAM chaper1272 INTEGER :: A(10)=(/5,7,4,8,12,2,10,3,9,11/) INTEGER :: sum=0,ave !打开一数据文件,设置一个有格式直接存取文件,将10个数分2个记录写入文件。 !数据文件生成2个记录,每个记录行长度相同,记录长度为25 OPEN(1,FILE='input21.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=25) WRITE(1,"(5I5)",REC=1)(A(I)+10,I=1,5) !按格式说明将头5个数写入第1个记录 WRITE(1,"(5I5)",REC=2)(A(I)+10,I=6,10)!按格式说明将后5个数写入第2个记录 READ(1,"(5I5)",REC=2)(A(I),I=6,10) !按格式说明从第2个记录中读取后5个数 READ(1,"(5I5)",REC=1)(A(I),I=1,5) !按格式说明从第1个记录中读取头5个数 DO I=1,10 sum=sum+A(I) ENDDO ave=sum/10 !打开一个最大记录长度为22的有格式顺序存取文件

OPEN(2,FILE='input22.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=22) WRITE(2,"('10个数之和为:',I5)",REC=1) sum !输出1记录行,记录长度为22 WRITE(2,"('10个数平均值为:',I5)",REC=2)ave !输出1记录行,记录长度为22 WRITE(2,"(A)",REC=3) '程序运行正常结束。' !输出一个记录行,记录长度为22 END 程序2 PROGRAM average REAL sum,ave INTEGER n OPEN(1,file='score.dat') PRINT*,'正在统计平均成绩,请等待。' sum=0.0;n=0 DO READ(1,*,END=100) S sum=sum+s n=n+1 ENDDO 100 ave=sum/n

常用基本函数

R语言基本函数 一、数据管理 vector:向量 numeric:数值型向量 logical:逻辑型向量 character;字符型向量 list:列表 data.frame:数据框 c:连接为向量或列表 length:求长度 subset:求子集 seq,from:to,sequence:等差序列 rep:重复 NA:缺失值 NULL:空对象 sort,order,unique,rev:排序 unlist:展平列表 attr,attributes:对象属性 mode,typeof:对象存储模式与类型 names:对象的名字属性 二、字符串处理 character:字符型向量 nchar:字符数 substr:取子串 format,formatC:把对象用格式转换为字符串paste,strsplit:连接或拆分 charmatch,pmatch:字符串匹配 grep,sub,gsub:模式匹配与替换 三、复数 complex,Re,Im,Mod,Arg,Conj:复数函数 四、因子 factor:因子 codes:因子的编码 levels:因子的各水平的名字 nlevels:因子的水平个数 cut:把数值型对象分区间转换为因子 table:交叉频数表 split:按因子分组 aggregate:计算各数据子集的概括统计量 tapply:对“不规则”数组应用函数 数学 一、计算 +, -, *, /, ^, %%, %/%:四则运算 ceiling,floor,round,signif,trunc,zapsmall:舍入 max,min,pmax,pmin:最大最小值 range:最大值和最小值 sum,prod:向量元素和,积 cumsum,cumprod,cummax,cummin:累加、累乘 sort:排序 approx和approx fun:插值 diff:差分 sign:符号函数 二、数学函数 abs,sqrt:绝对值,平方根 log, exp, log10, log2:对数与指数函数 sin,cos,tan,asin,acos,atan,atan2:三角函数 sinh,cosh,tanh,asinh,acosh,atanh:双曲函数 beta,lbeta,gamma,lgamma,digamma,trigamma,tetragamma,pentagamma,choose ,lchoose:与贝塔函数、伽玛函数、组合数有关的特殊函数 fft,mvfft,convolve:富利叶变换及卷积 polyroot:多项式求根 poly:正交多项式 spline,splinefun:样条差值 besselI,besselK,besselJ,besselY,gammaCody:Bessel函数 deriv:简单表达式的符号微分或算法微分

fortran语法手册

1F O R T R A N77四则运算符+ - */ ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/,, DATA A/,B/,C/ DATA A,B,C/3*CHARACTER*6 CHN(10) DATA CHN/10*''/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则

Simple算法_fortran语言编写

Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc Cccc This computer program was copied from the graduate student course program Cccc of the University of Minnesota. Part of it was re-formulated to meet the Cccc personal computer environment. Some inappropriate expressions were also Cccc corrected. The program is used only for teaching purpose. No part of it Cccc may be published. You may use it as a frame to re-develop your own code Cccc for research purpose. XJTU Instructor, 1995.11 **************************************************************************** *----------------------------MAIN PROGRAM----------------------------------- **************************************************************************** LOGICAL LSTOP COMMON/CNTL/LSTOP **************************************************************************** OPEN(08,FILE='teresul') CALL SETUP0 CALL GRID CALL SETUP1 CALL START 10 CALL DENSE CALL BOUND CALL OUTPUT IF(.NOT.LSTOP) GO TO 15 CLOSE(08) STOP 15 CALL SETUP2 GO TO 10 END *--------------------------------------------------------------------------- SUBROUTINE DIFLOW **************************************************************************** COMMON/COEF/FLOW,DIFF,ACOF **************************************************************************** ACOF=DIFF IF(FLOW .EQ.0.0)RETURN TEMP=DIFF-ABS(FLOW)*0.1 ACOF=0. IF(TEMP .LE. 0. ) RETURN TEMP=TEMP/DIFF ACOF=DIFF*TEMP**5 RETURN END *-------------------------------------------------------------------------- SUBROUTINE SOLVE ****************************************************************************

相关文档
最新文档