Fortran 95学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a=1
b=2
call showCommon()
end
subroutine showCommon()
implicit none
integer ::num1,num2
common num1,num2 !定义num1,num2是全局变量中的第1及第2个变量
write(*,*) num1,num2
return
.eqv.两边表达式的逻辑运算结果相同时,整个表达式就成立
.neqv.两边表达式的逻辑运算结果不同时,整个表达式就成立
多重判断
If(条件1) then
……
Else if(条件2) then
Else
……
End if
浮点数及字符的逻辑运算
使用浮点数来做逻辑运算时,要避免使用“等于”的判断。因为使用浮点数做计算时,有效位数是有限的,难免会出现计算上的误差,理想中的等号不一定会成立。要使用浮点数来做“等于”的逻辑判断时,最好用其他方法来取代(ABS这个函数是取绝对值。使用误差小于某一个值来进行判断)
IF基本用法
If(逻辑判断式) then
……
End if If(逻辑判断式) then
……
Else
……
End if
逻辑运算符:
Fortran 90 Fortran 77
==判断是否“相等”.eq.判断是否“等于”
/=判断是否“不相等”.ne.判断是否“不等于”
>判断是否“大于”.gt.判断是否“大于”
integer ::c,d
common /group1/c,d !c,d放在group1的全局变量空间中
Exit功能:可以直接“跳出”一个正在运行的循环
署名循环
循环还可以取“名字”,这个用途是可以在编写循环是能明白地直到End do这个描述的位置是否正确,尤其是在多层循环当中。署名的循环也可以配合Cycle、exit来使用。
数组(Array)
数组的声明方法:Datatype name(size)
赋初值:
在fortran77中则要使用Data命令设置初值
Fortran 90 Fortran 77
program ex90
implicit none
integer ::a=1
real ::b=2.0
complex ::c=(1.0,2.0)
character (len=20) ::str="Hello Acuzio!"
Integer i
Integer ::a(5)
Forall(i=1:5)
A(1)=5
End forall
Forall详细语法为
Forall(triplet1[,triplet2[,triplet3……]],mask)
……
End forall
其中mask用来做条件判断
Fortran90可以声明可变大小数组
Real ::guess
Do while(abs(guess-weight)>e)
Write(*,*) “Weight”
Read(*,*) guess
End do
循环控制:
Cycle和exit
Cycle命令可以略过循环的程序模块中,在cycle命令后面的所有程序代码,直接跳回循环的开头来进行下一次循环
l每个case中所使用的数值必须是固定的常量,不能使用变量
Pause, continue, stop
Pause的功能就跟它的字母意义相同,程序执行到pause时,会暂停执行,直到用户按下enter键才会继续执行。
Continue无实际用途
Stop结束程序执行
Fortran 90的库中,IAND用来做二进制的AND计算,IOR用来做二进制的OR计算
write (*,*) a,b,c,str
end program ex77
implicit none
integer a
real b
complex c
character (len=20) str
data a,b,c,str/1,2.0,(1.0,2.0),’Hello ‘/
write (*,*) a,b,c,str
Implicit real(M-P) !M到P开头的变量都视为浮点数
Implicit none !关闭默认类型功能,所有变量都要事先声明
常数的声明方法(Parameter)
Program ex
Implicit none
Real ::pi
Parameter(pi = 3.14129)
Write(*,”(F4.2)”) sin(pi/6)
Character(len=30) ::name
Integer ::age
Integer ::length
Integer ::weight
End type person
Type(person) ::a !声明一个person类型的变量
a%name !引用person中的name
Kind的使用
Kind描述如果搭配上一些Fortran90的库函数,可以增加程序代码的“跨平台”能力
Fortran 90隐含式循环的功能可以更强大
Integer ::a(5)=(/(I,I=1,5)/) !设置结果:a(1)=1,a(2)=2,a(3)=3,a(4)=4,a(5)=5
Where
Where是Fortran95添加的功能,它也是用来取出部分数组内容进行设置
Forall
Forall是fortran95添加的功能。间断地说,它也可以看出是一种使用隐含循环来使用数组的方法,不过它的功能可以做得更强大。
integer A(5)
Data a /1,2,3,4,5/ Integer a(5)
Data a /5*3/ !5个3 Integer A(5)
Integer i
Data(A(i),i=2,4) /2,3,4/
!这是一个隐含式循环,I会从2增加到4,依照顺序到后面取数字。初值设定结果为A(2)=2、A(3)=3、A(4)=4,A(1)和A(5)没有设定
Integer,allocatable ::a(:) !声明一个可变大小的一位数组
Integer ::students
Read(*,*) students
Allocate(a(students)) !配置内存空间
计算机的内存是有限的,当然也就不能无限制地去要求空间来使用。所以allocate命令在内存满载是,有可能会要求不到使用空间。Allocate命令中可以加上stat的文本框得知内存配置是否成功
DO循环
Integer, parameter ::index = 1
Integer, parameter ::counts = 100
Do index,counts,1
……
End do Real,parameter ::weight =45.0 !答案
Real,parameter ::e=0.001 !误差
end
等价声明(equivalence)
把两个以上的变量,声明它们使用同一个内存地址,就是“等价声明”。使用同一个内存位置的变量,只要改变其中一个变量,就会同时改变其他变量的数值
Integer a,b
Equivalence(a,b)
Fortran 90的自定义数据类型
使用关键字:type
Type ::person
>=判断是否“大于或等于”.ge.判断是否“大于或等于”
<判断是否“小于”.lt.判断是否“小于”
<=判断是否“小于或等于”.le.判断是否“小于或等于”
逻辑判断式
.and.交集,如果两边的表达式都成立,整个表达式就成立
.or.并集,两边的表达式只要有一个成立,整个表达式就成立
.not.逻辑反向,如果后面的表达式不成立,整个表达式就成立
If(.not. allocated(a))then
Allocate(a(5))
End if
函数
子程序(subroutine)的使用
子程序代码以subroutine开头,它同样要取一个名字,以end或end subroutine来结束。严格地讲,end subroutine后还可以再接上这个子程序的名字
program ex
implicit none
integer ::a=1
integer ::b=2
call add(a,b)
end
subroutine add(first,second)
implicit none
integer ::first,second
write(*,*) first+second
real ::a,b
real ::add
add =a+b
return
end
全局变量
Common是fortran77使用“全局变量”的方法,它用来定义一块共享的内存空间
program ex
implicit none
integer ::a,b
common a,b !定义a,b是全局变量中的第1及第2个变量
Fortran 90提供库函数来判断所要记录的数值值域范围所需要的kind值
Selected_int_kind(n) :返回如果想要记录n位整数时,所应声明的kind.返回-1时,表示无法提供所想要的值域范围
Selected_real_kind(n,e) :返回如果想要能够记录具有N位有效位数、指数达到e位的浮点数所需要的kind值。返回-1表示无法满足所要求的有效位数、返回-2表示无法满足所要求的指数范围、返回-3表示两者都无法满足
return
end
函数的调用
program ex
implicit none
real ::a=5,b=4
real,external ::add !声明add是函数而不是变量
!调用函数add,调用函数不必使用call命令
wriwenku.baidu.come(*,*) add(a,b)
end
function add(a,b)
implicit none
Implicit命令的功能是用来设置“默认类型”。所谓的默认类型,是指Fortran不经过声明,由第一个字母来决定变量类型。可以经过Implicit描述来决定哪些字母开头的变量会自动使用某种类型
Implicit integer (A,B,C) !A、B、C开头的都被视为整型数
Implicit integer(A-F,I,K) !A到F及I、K开头的变量都视为整型数
end
Block data
关于common还有最后要介绍的就是设置初值的方法,common变量不能直接在子程序或主程序中使用data来设置初值,要在block data程序模块中使用data命令来设置初值
program ex
implicit none
integer ::a,b
common a,b !a,b放在不署名的全局变量空间中
end
在Fortran90里,Parameter可以作为形容词,和变量的声明同时写在一起
Real, parameter ::pi=3.14159 !这里pi前面的冒号不能省,和上面代码不同(上面的可以省略)
设置变量的初值
变量内容并不一定要在程序执行时才设置,可以在声明时同时给予初值。在Fortran90偶那个,在设置变量初值时,直接把数值写在声明的变量后面就行了。使用这个方法来设置初值是,不能省略声明中间的那两个冒号(Fortran90)
Fortran 95
变量名称的取名策略:变量的名字中可以使用的字符集包括英文的26个字母、0~9这10个数字以及下划线“_”,不过前缀必须是英文字母。变量名称的长度限制随着各家编译器的不同而不同,Fortran标准规定最少要支持到6个字符,Fortran90则最少要支持到31个字符
Implicit
Fortran标准中有一项不太好的功能,它的变量不一定要经过程序声明才能使用,编译器会根据变量的第一个字母来自东决定这个变量的类型。第一个字母为I、J、K、L、M、N的变量会被视为整数类型,其他的变量则会被当成浮点数来使用。
Select case语句
Select case(变量)
Case(数值)
……
Case(数值2)
……
Case default
……
End select
在case里的冒号前后放两个数值时,代表在这两个数值范围中的所有数值
Remark:
l Select case只能使用整数(integer)、字符(character)及逻辑变量(logical),不能使用浮点数及复数
Allocate(a(100),stat=err) !err是事先声明号的整型变量,做allocate这个动作时会经有stat这个叙述传给err一个数值,如果err等于0则表示allocate数组成功,而如果err不等于0
则表示allocate数组失败
Deallocate(a)表示删除分配的内存
跟allocate相关的函数还有allocated,它用来检查一个可变大小的矩阵是否已经配置内存使用,他会返回一个逻辑值
相关文档
最新文档