《FORTRAN-95程序设计》学习笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《Fortran95程序设计》学习笔记by柳柳第1页共16页《FORTRAN95程序设计》学习笔记66RPGgg★目录★《FORTRAN95程序设计》学习笔记..........................................................................................1基础知识(基础、字符串、FORMAT、隐式、TYPE)..........................................................1流程与控制(if、select、do).....................................................................................................4数组(声明、隐式循环、整体操作、可变数组)....................................................................5函数与子程序(子程序、函数、全局变量)............................................................................6MODULE与面向对象(重载操作符、虚函数)......................................................................9文件相关(OPEN、WRITE、READ)....................................................................................10指针(指向变量、数组、函数).........................................................................................11VisualFortran编译器(DLL,VB调用)..........................................................................12数值算法与IMSL(数值算法插件)..................................................................................14常用库函数(数学、数组、零碎、子程序).....................................................................15基础知识(基础、字符串、FORMAT、隐式、TYPE)★【小玩意】二进制观察器:装在M..VisualStudio\DF98\bin,有一个Bitviewer,可以观察变量储存方式★【语法】续行:行结尾或行开头使用&符号;注释:使用!符号★【语法】数学表达式:+;-;*;/;(;);**乘幂★【语法】程序结束:STOP(Ruby的exit)★【语法】输出:write(*,*),完整写法:write(unit=*,fmt=*)建议:少用print,尽量用write★【语法】声明整型:integer(kind=4)a;其中kind是使用的bytes数,4or2其他写法:integer*4a;integer(4)a浮点:real(kind=4)a;有效数位6位(12345678存为1.234567E7),如果是kind8则为15位有效数字此外:1E10:单精10^10,1D10:双精10^10复数:complex::a=(2,3)《Fortran95程序设计》学习笔记by柳柳第2页共16页实部:real(a);虚部:imag(a)布尔型:Logical,.true.和.false.★【语法与函数】字符串:character(20)string注意理解,fortran的弱智字符串就是一个长度不能变的一维的东西,极其猥琐,和Java、Ruby不能相提并论的string(13:13)=“a”:对第13个字节的读、存string(2:3)=“go”string(6)=“我的妈呀”:从第6个位置开始设置为“我的妈呀”a=string_a//string_b:用“//”连接两个字符串【常用函数】char(num),ichar(char):ASCII码的转换相关功能【常用函数】len(string),len_trim(string):长度,去掉尾部空格后的长度【常用函数】index(string,key):找key在string首出现的位置【常用函数】trim(string):返回去掉尾部空格的字符串(用途不大)【函数】repeat(char,int):返回一个重复int次的char串character(len=20)string普通声明;character(len=*)string接收的时候可自动长度★【规范格式】FORMAT格式化e.g.write(*,100)A100format(I4)这里是100号标识调用的格式参数控制符(前面加数字为重复次数,如4I6或aI6。(其中a为一个int))A5:输入/出5个字符常用功能I5[.4]:输5位整数,最少4位常用功能BN,BZ:定义空格为无东西或为0F5.4,D5.4:5位浮点数,小数占4位其中前面一个常用E5.1[E2]:5位浮点,小数占1位,指数占2位4X:4个空格常用功能/与\:/为中止本行,\为强制不换行强制不换行常用Tn,TLn,TRn:移动到第n列/左移n列/右移n列Write(*,”(2X,I5)”)a;一般使用这种方法进行格式化即可,推荐。注意,complex要用两个浮点数来输出《Fortran95程序设计》学习笔记by柳柳第3页共16页★IMPLICIT命令(隐式表达)默认:I、J、K、L、M、N为整数,其余浮点(不好)隐式声明:implicitinteger(A,B,C):A、B、C开头的自动为整型,无需单独声明implicitinteger(A-F,I,K):A-F、I、K开头的自动为整型implicitreal(M-P):M-P开头自动视为浮点数implicitnone:无隐式声明,最常用,但个人认为在自己有把握的情况下还是可以自定义一些隐式来方便程序书写★【语法】常数parameter的声明方法1:real,parameter::pi=3.14方法2:realpiparameter(pi=3.14)★【常用功能】类型转换(realinteger)real(int_a):返回int_a的浮点数int(real_a):返回real_a的整型★【语法】设初值:integer::a=1★【语法】等价声明:equivalence(array(1,1,5),A)两者使用同一块内存,如上,调用A就是调用array(1,1,5),但是调用A比较快★【语法】type,自定义数据类型,可组合integer,real,char等,类似一个只有公开变量的类type::personcharacter(20)::nameinteger::ageendtypeperson声明:type(person)::a使用:a%name,a.name(Ruby:一个全是attr_accessor的class)★【用途不大的函数】kind的使用:select_ind_kind(n):返回记录n位整数所需的kind;select_real_kind(n,e)n位有效,指数e位所需的kind《Fortran95程序设计》学习笔记by柳柳第4页共16页流程与控制(if、select、do)★【语法】if条件分歧:if(逻辑)then注意,避免浮点数相等,浮点用abs(a-b)误差的方法程序执行内容elseif(逻辑)then程序执行内容else程序执行内容endif单行if:if(逻辑)then内容★【语法】逻辑标志:==.EQ.;/=.NE.;.GT.;=.GE.;.LT.;=.LE.;.and.;.or.;.not.★【语法】selectcase功能selectcase(某)这个某可以是整数和字符,Logicalcase(70:90)这个case只能用常数内容case(60:69)内容casedefault内容endselect★【语法】两个小东西:pause:暂停;stop:退出★【语法】二进制的逻辑运算iand和ior举例:a=2(二进制10);b=4(二进制100);c=iand(a,b)则c=6★【语法】循环结构doI=1,5,1分别是开始,结束,step,亦可dowhile(条件)执行内容enddo★【流程控制语法】《Fortran95程序设计》学习笔记by柳柳第5页共16页cycle:执行下次循环(Ruby:next)exit:循环中断(Ruby:break)★【署名的循环】outdo:doI=1,3inner:doJ=2,4内容署名后可以使用诸如if(..)exitoutdo;if(..)cycleinner这种enddoinnerenddooutdo★【语法】臭名昭著的:goto行数数组(声明、隐式循环、整体操作、可变数组)★【语法】数组的声明:Datatypename(size)其中Datatype是类型也可是自定义的type比如:integera(10)或integer,dimension(10)::a类似声明多维数组:integera(3,3)亦可a(0:3,-3:3)这样自定义某维范围★【诡异东东】隐式循环与赋初值:DataA/1,2,3,4,5/;DataA/5*3/5个3,不是计算Data(A(I),I=2,4,2)/2,4/I=2,4,2隐式循环,起、末、STEP,类似do循环Integer::a(5)=(/1,(2,I=2,4),5/)连续3次2,如果(I,I=2,4)则是2,3,4Write隐式循环:write(*,”(I3,I3,/I3,I3)”)((m(r,c),c=1,2),r=1,2)连续输出m(1,1),m(2,1),m(1,2),m(2,2)初始化统一赋值:ingeter::a(5)=5;相当于a(1)=a(2)=..=a(5)=5★【语法】数组整体操作:a=5;将左右值设置为5a=(/1,2,3/);重设数值,大小要相同a=b;同位置的这是为相等数值。注意,不是地址连接,是赋值!a=b+c;a=b–c;a=b*c;a=b/c;a=sin(b):也是对位置整体的操作★【技巧】其他数组操作:a(3:5)=5;a(3:)=5;a(1:3)=b(4:6);a(:,:)=b(:,:,1)如a(1-5,1-5)=b(1-5,1-5,1)a(1:10)=a(10:1:-1)类隐式循环翻转a。注意这里的操作过程,先寄存右式,再赋值左边《Fortran95程序设计》学习笔记by柳柳第6页共16页★【语法】WHEREwhere(a3)对所有a3的位置b=1设置b=1,注意,a、b同大小elsewhere亦可elsewhere(a5)这样的东西b=2endwhere★【语法】FORALL:使用方法forall(范围1,范围2…条件)forall(I=1:5,J=1:5,a(I,J)/=0)a(I,J)=1/a(I,J)相当于:doI=1,5;doj=1,5;ifa(I,J)/=0…★【内存细节】数组保存:假设一个A(3,3),则内存排列:A(1,1)=A(2,1)=A(3,1)=A(1,2)=A(2,2)=A(3,2)=A(1

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功