fortran90-知识点整理

上传人:痛*** 文档编号:104669239 上传时间:2022-06-10 格式:DOC 页数:19 大小:69KB
返回 下载 相关 举报
fortran90-知识点整理_第1页
第1页 / 共19页
fortran90-知识点整理_第2页
第2页 / 共19页
fortran90-知识点整理_第3页
第3页 / 共19页
点击查看更多>>
资源描述
. . . . . Fortran90关于变量说明的新功能:1.在变量说明的同时,可以给变量赋初值。 INTEGER:I=5,J=126 REAL:X=7.2,Z,W=774.22.在说明变量的同时也可说明其种别 REAL(KIND=4):X,Y 或 REAL(4):X,Y3.在说明变量的同时,还可说明变量的属性INTEGER,PARAMETER:I=5,J=123 Ps :PARAMETER 属性1功能:用一个符号代表一个常量,称为符号常量常数2写法:Real,Parameter :G=9.8 &说明类型时赋值3位置:位于可执行语句之前 REAL,DIMENSION(1:10):A2.3.6 派生数据类型 根据需要而由根本数据类型定义新的数据类型。在一个派生类型中可包含多个根本类型。如:TYPE STUDENT (定义开始) CHARACTER(LEN=20):DEPARTMENT CHARACTER(LEN=10):CLASS CHARACTER(LEN=15):NAME INTEGER:NUMBER 成员定义 END TYPE STUDENT 定义完毕派生类型变量的定义: TYPESTUDENT:PERSON变量的赋值: PERSON=COMPUTER,92_2,LI LIN,21成员的表示: PERSON%CLASS=“92_2 PERSON%NAME=“LI LIN主程序其他限制主程序的可执行局部不能包含有RETURN语句或者ENTRY语句。程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名一样,也不得于主程序的任何局部名一样。 在主程序的作用围的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序SAVE语句不起作用。主程序的任何部过程的定义必须跟在CONTAINS语句之后。2.3.2 子程序 子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体表达要通过主程序或子程序的调用来实现。 按子程序与主程序的位置关系分为部过程和外部过程。2.4.3 模块 模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元没有可执行语句,除了说明语句外,最多包含部过程。模块的主要作用是供其它程序单元引用。 程序单元引用模块,实际是将模块的全部语句复制到本程序单元。因此模块起共享与复制的作用。模块的引用采用语句: USE 模块1,模块2,根本语句概述程序的最根本的语句主要有四种:类型说明语句、赋值语句、输入语句、输出语句。运用这些根本的语句,就可以编写一些简单的程序。在函数FORTRAN 90配置的函数称为在函数。在函数分为三种:根本函数 : SIGN符号函数值:|A1|(假设A20) -|A1|(假设A20)SIGN(A1,A2)Eg : SIGN(-3.0,2.0)=3.0 SIGN(3.0,-2.0)=-3.0 某些函数参数只能为实型如:log(2.0) (loG2错)转换函数函数名含义FORTRAN举例INT(X)实型转换整型、复型的实部转换整型INT(2.3)=2INT(1.2,3.5)=1REAL(X)整型转换实型、复型的实部转换实型REAL(8)=8.0REAL(1.2,3.5)=1.2COMPLEX(X,Y)将X,Y合成为复型COMPLEX(2.3,1.5)=(2.3,1.5)INT(X,KIND):将X值转换为整型,以KIND的值作为种别参数REAL(X,KIND):将X值转换为实型,以KIND的值作为种别参数COMPLEX(X,Y,KIND):将X,Y转换为复型,以KIND的值作为种别参数查询函数KIND()SELECTED_INT_KIND()SELECTED_REAL_KINDPRECISION()RANGE()不轻易使用整型量除整型量 1.0/2 2.0*(-1)运算对象类型一样时,运算结果的类型为同一类型注意:5/2=2 1/2=0 !运算对象类型不同时,系统一般先转换成一样类型后再运算转换规那么是:较低级的类型转换为较高级的类型数据类型隐含的上下次序为由低到高: 整型实型 双精度 复型例: 8/5+2.0*5/2=6.0逐步转化赋值语句1、类型要求逻辑型、字符型的赋值语句要求“=两边类型一样数值型赋值,不区别整型、实型和复型2、种别方面 字符型要求种别一样其余类型的e、V种别允许不同输入输出语句1、 I/O的对象 列在中 I/O是相对于存而言的,键盘属于输入设备,显示器属于输出设备,优盘、硬盘既是输入设备,又是输出设备。2、I/O的方向与语句READ U,f U:设备(部件) f:格式WRITE其中: 输入 READ语句 输出 PRINT语句,只输出到显示器 WRITE语句,适合任何输出设备U(部件) * : 系统约定设备某个值: 指定通道号(设备逻辑号、文件号) 表控格式I/O*: 系统约定的格式。f(格式) 根本格式(自定格式)I/O:按用户要求的格式组织I/0。 带控制信息表的I/O:I:碰到回车ENTER为一个记录。O:一行为一个记录。程序执行过程中按表控格式输入数据各数据间有分隔符: ,或空格类型匹配:整型:带小数点只取整数局部; 复数:实部,虚部; 字符:一串字符:赋值时长度转化或一串字符 即可省略。 逻辑:以T或F作为第一个字母的字符串点号1个、空格多个在前忽略3.输入的数据必须是常数,不能是变量和表达式如输入2+1,那么出错。4.输入数据个数: 1不得少于变量的个数; 2可分行输入; 3多余的数据不起作用5.空格可以多个,/表示输入数据完毕,后面的数据被取消,没有输入数据的变量值为原值;Read*,A,B,C 输入: 2,1/3 结果: A=2 B=1 C=06、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*c: r为重复数 4*0.5,2*3,2*AB,3*1.0,-1.0输入输出的三种不同的格式:1表控格式的输入输出2有格式的输入输出3带控制信息表的输入输出整型编辑符:Iw.m1I 编辑符控制输出:功能:用于整型数据的输入输出格式: Iw Iw.mrIww输入输出数据字段总宽度m至少m位数字r为重复系数 例1设 J=10, K=-12,L=12 WRITE (*,(I3,I5,I7)J,K,L10-12123注意: 1数字在指定的区域右端对齐,不足w那么左边补空格。 2负数的符号也包含在字段宽度 3如果应输出的列数超过了规定的字段宽度,那么不输出有效数据,以w个*填充。 4、BN, BZ :Blank interpretation Specifies interpretation of blanks in numeric fields 空格是否当0处理仅用于输入格式语句,如 read “(BN,2I3),I,J 例2如果将格式串改为:“I3,I5.4,I7.5 那么输出:10-001200123 例3如果L=12345610-0012123456 !Iw.m :m=n+d+2 当实型数值大于或等于0.0时,那么w=n+d+1 用此来确定w的宽度注意:1 w包括数符和小数点两位2 假设数据小于w位,那么左边补空格3 输出值时舍入,而不是截断4. 如果是科学计数法那么转换小数形式字符型编辑AA用来编辑字符型变量,它不关心该字符串的长短如何。例: CHARATER*5 A,B,C READ*,(A,A,A)A,B,CWRITE*,(A,2X,A,2X,A)A,B,CEND输入:ABCDBASICFORMAT结果:ABCDBASICFORMA ! 2X表示X编辑描述符功能1:在输出时产生空格,它的一般形式为:nX关系表达式与逻辑表达式关系运算符: 、 =、 、 =、 =(等于)、 /=(不等于) (常用).GT.、.GE.、.LT.、.LE.、.EQ.、.NE.注意1、每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式; 错例:2Xb)c2、运算对象: 关系运算符两边的运算对象类型应相容: 错例:A= =.TRUE. 2,=,0) PRINT*,X 执行过程: 1、计算条件表达式的值 2、真 右边语句 IF的下一个语句 3、假 IF的下一个语句 注意: 1.右边通常为一条且只一条可执行语句。 错例:IF (AB) T=A;A=B;B=T 2.不能为以下语句: END、另一个逻辑IF、 块IF、ELSIF、ENDIF、DO 错例:IFX=I) PTINR*,IEND DO II隐含DO循环隐含DO循环实际上是带控制变量的DO结构。但简化成只有DO结构的第一句,且把DO关键字隐去。隐含DO循环的形式为:list,v=u1,u2,u3说明:1、左括号相当于DO,右括号相当于ENDDO;2、List可以是一个或多个常量、变量、数组元素等,甚至可以是另外的隐含DO循环隐含DO循环嵌套不能独立存在,主要用于输入输出语句,常用于数组的输入输出。如:READ *,A(I),I=1,5 READ *,A(1),A(2),A(3),A(4),A(5)隐DO、显DO执行过程的区别1、输入、输出格式的区别:PRINT *,I,I=1,3 PRINT*,1,2,3输出一行DO I=1,3 PRINT*,1PRINT*,I PRINT*,2ENDDO PRINT*,3 输出三 行几种常见的隐含DO循环的形式1.按指定步长读写。例如 PRINT *,J,J=1,7,22.隐含DO循环与普通变量混合使用。例如 PRINT *,A,B,X(I) ,I=1,3,C3.用于输出一些特殊符号。例如 PRINT *,-,I=1,804.隐含DO循环可以并列出现。例如 print *,(I,I=1,2),(J,J=1,2)程序单元和过程子程序单元不能独立存在,只能被主程序单元或被其它子程序单元调用,甚至可以递归调用调用本身子程序又称过程的分类1、 函数子程序分为:部函数子程序,外部函数子程序2、 子例行子程序分为:部子例行子程序,外部子例行子程序外部函数子程序Visual Fortran90的函数:1、在函数系统函数、标准函数如:sin、cos、sqrt、abs、kind2、Function语句编写的函数自定义 分为部函数、外部函数函数子程序的编写方法RECURSIVEFUNCTION 函数名(虚元表)RESULT(结果名)说明局部程序体:具体计算END FUNCTION 函数名如:FUNCTION FACT(N) RESULT(FACT_RESULT) IMPLICIT NONE INTEGER:N,I,FACT_RESULT FACT_RESULT=1 DO I=1,N FACT_RESULT=FACT_RESULT*I ENDDO END FUNCTION FACTPROGRAM MAININTEGER:FACT,SUM=0,IDO I=1,5SUM=SUM+FACT(I)ENDDOPRINT*,SUMEND说明:子程序END语句写法:END FUNCTION 函数名子程序END语句功能:1、函数单位的完毕标志 2、将控制返回到主调程序。子程序开始语句的写法RECURSIVEFUNCTION 函数名虚元表RESULT(结果名)1、作为函数子程序的第一行注释行除外。2、如果函数是递归的,那么应以RECURSIVE开头。3、函数名与普通变量名的取法一样,且为全局名,即作用域为整个程序,不得与已有的全局名同名。4、主调程序与被调程序两个单位之间的数据传递:RESULT (结果名):子程序的一个输出结果一般写法:函数名_RESULT,用于保存一个计算结果,称为函数值。且结果名有类型,必须在子程序说明局部说明类型。虚元表:子程序的所有输入,与除函数值之外的其他计算结果的输出。虚元之间用逗号分隔,都要在说明语句中说明类型。如果没有虚元,函数名后是一对空括号。5、虚元的含义:编写子程序时没有具体值调用时或调用完毕后才获得数值,因此只是一个符号,表示输入、输出,名字可随便用户取。6、虚元可以是变量名、数组名、过程名、指针等。7、虚元的可选属性INTENT:INTENT(IN):表示函数开始时,虚元从实元中获得值,作为子程序的输入(不得再改变其值)INTENT(OUT):表示函数完毕时,把虚元的值传送给实元,作为子程序的输出对应的实元不能是表达式INTENT(INOUT):表示虚元既要从实元中获得值,又要向实元传送值,作为子程序的输入输出。例:REAL,INTENT(IN):X,Y子程序程序体的写法分为说明局部和执行局部。1、说明局部应对程序体一切变量、数组等实体包括虚元作出说明,同时还要说明函数结果变量名,但不可说明函数名。2、执行局部中必须对函数结果名至少赋值一次。外部子例行子程序外部子例行子程序:过程的另一种形式。用户定义,用于完成复杂计算任务,返回一个或多个值,或用于其它数据处理。外部子例行子程序的结构RecursiveSubroutine 子程序名虚元表说明局部程序体End Subroutine 子程序名与函数子程序的区别1.没有RESULT关键字。2、虚元:负责子程序的全部输入和全部输出3、无虚元时:SUBROUTINT 子程序名 或 SUBROUTINT 子程序名4、函数子程序的调用是表达式形式。而子例子程序必须通过CALL语句来调用。 CALL 子程序名实元表如:SUBROUTINE FACT(N,FACT_VALUE)IMPLICIT NONEINTEGER,INTENT(IN):NINTEGER,INTENT(OUT):FACT_VALUEINTEGER:IFACT_VALUE=1DO I=1,NFACT_VALUE=FACT_VALUE*IENDDOEND SUBROUTINE FACTPROGRAM MAININTEGER:SUM=0,I,VALUEDO I=1,5CALL FACT(I,VALUE)SUM=SUM+VALUEENDDOPRINT*,SUMEND待留字符型数据根底字符型常量与变量说明 (1)字符常量区分字母大小写 (2)空格为有效字符 (3)字符不受fortran90字符集的限制 (4)单撇号为有效字符时,改写为两个单撇号或双撇号 (5)种别参数用前缀法表示 (6)长度=0字符型常量长度的计算 长度为字符的个数: 起止界不算 两个单撇号或双撇号算一个 空格为有效字符算一个字符型变量的类型说明:1、一般形式:Character (len=n1,kind=n2 ),属性列表: 变量名=初值2、只有长度说明而无种别参数说明时,可采用以下说明: Character(len=7):A Character(7):A Character*7:A3、如假设个别说明,可在变量后指明其具体长度:例: character 8: strg, strh, stri*12 4、不说明长度,长度默认为1 5、长度可为整型表达式,但要加括号例: character(2):a,b*(2+3)6、有时可把长度值写成一个星号,表示此处暂不指明其长度,也可理解为长度任意,但要加括号。例: CharacterLEN=*:CH,PARA Character*:CH,PARA Character*:CH,PARA Character2: CH,PARA*使用围:1具有PARAMETER属性的字符常量 Character(*),parameter:para=FORTRAN_90 字符串长度取对应的字符常量的长度。2用字符变量作为虚元时,虚元的长度取对应实元的长度 虚元可以和任意长度的实元相结合,有利于提高子程序的通用性。字符子串子串的一般形式为:字符变量名e1:e2其中,e1和e2为整型表达式,表示起始和终止位置。 1=e1=e2w,输入的字符不能满足,在右边补足L-w个空格 假设LL,在字符变量左边补足w-L个空格输出右对齐,如上例中B; 假设wL,从左边截取w个字符输出,假设上例中C。 字符型数组如果具有Dimension属性,就成为字符数组。例: character(3),dimension(4):aA的每个元素的长度均为3A(1)(1:1)表A(1)中的第1个字符用于字符处理的在函数1.求字符串长度函数LEN:字符串的长度 例:LEN(ASD) 值5LEN_TRIM:去掉尾部空格后的长度。 例:LEN _TRIM(ASD ) 值3注意:假设参数是数组名,那么结果为数组中元素的长度。例:CHARACTER(LEN=5),DIMENSION(1:20):A那么 LEN(A)的值是5。2.除去字符串尾部空格函数TRIM 例:TRIM(ASD ) 值ASD数组数组不得重复说明 例:INTEGER,DIMENSION(2):A INTEGER,DIMENSION(2,3):A通过下标引用数组元素下标表达式应是整型表达式,允许出现+ - * 等算数运算符。操作数可以是常数、变量,也可以是简单的在函数或数组元素,但表达式的值一定是整数。 d1 = 下标表达式的值 = d2例:A(3*2),A(ABS(-3),A(5+I),A(A(I)一维数组的输入与输出方法一、使用数组名输入输出该数组的所有元素PROGRAM SUM_DIMIMPLICIT NONEINTEGER,DIMENSION(15):AINTEGER:S=0,IREAD*,A A代表15个元素一行输入或假设干行 or 使用自定格式:READ (5I4),ADO I=1,15S=S+A(I)ENDDOPRINT*,A A代表15个元素打印一行 or 使用自定格式:PRINT (5I4),APRINT*,SEND使用数组片段输出 DO I=1,11,5WRITE(*,(1X,5I4) A(I:I+4)ENDDO 1 2 3 4 5 6 7 8 9 1011 12 13 14 15数组构成器如果数组中需要数据,除了可以使用READ语句外,还可使用数组构成器对数组全部或局部元素赋值。数组构成器是左右两端用 “/ 和 “ /定界的同类型数据的集合。数组构成器的一般写法1、值的序列:例: (/1,2,3,4/)2、 隐含DO循环法,其一形式为:/隐含DO表/例: (/(SQRT(REAL(I),I=1,4)/)3、数组元素法,其一般形式为: /数组元素,数组元素,数组元素 /例: (/V(3),V(6),V(7),V(9)/)4、数组片段法,其一般形式为:/数组片段/例:(/V(3:9:3)/)相当于:(/V(3),V(6),V(9)/)二维数组中:使用数组名按列输入输出所有元素:19 / 19
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!