爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 20792|回复: 25

[参考资料] Fortran知识普及贴,不定时更新

[复制链接]

新浪微博达人勋

发表于 2011-6-21 12:13:53 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
Fortran 95
字符:Fortran不区分大小写
Fortran 格式:自由格式和固定格式。Fortran程序代码扩展名为:*.For 或*.F的文件就是指固定格式;以*.F90为扩展名的文件,就是自由格式。
固定格式:规定了程序代码每一行中每个字段的意义。第7~72个字符,是可以用来编写程序的字段。每一行的前5个字符只能是空格或数字,数字用来作为“行代码”。每一行的第6个字符只能是空格或“0”以外的字符。
第1个字符
如果是C、c或者星号*,这行文本会被当成说明批注,不会被编译
第1~5个字符
如果是数字,就是用来给这一行程序代码取个代号。不然只能是空格
第6个字符
如果是“0”以外的任何字符,表示这一行程序会接续上一行
第7~72个字符
Fortran程序代码的编写区域
第73个字符之后
不使用,超过的部分会被忽略,有的编译器会发出错误信息
自由格式:叹号(!)后面的文本都是注释。每行可以编写132个字符。行号放在每行程序的最前面。 一行程序代码的最后如果是符号&,代表下一行程序会和这一行连接;如果一行程序代码的开头是符号&,代表它会和上一行程序连接。
Fortran的数据类型
整型(Integer)
浮点数(Real)
复数(Complex)
字符(Character)
逻辑判断(Logical)—True or False
Remark: Visual Fortran安装好后,默认的安装目录C:\Program Files\Microsoft Visual Studio\DV98\bin下有一个Bitviewer程序可以用来查看各种数据格式实际在内存中的二进制数据。
Fortran的数学表达式
()(括号)
**(乘幂)
*(乘法)
/(除法)
+(加法)
–(减法)
输入(Write)输出(Print)命令
Fortran程序通常以Program描述来开头,Program后面还要接一个自定义的程序名称(这个名称可以完全自定义,不需要和文件名有任何关系)。Fortran程序最后还要有End描述,表示程序代码写到这一行结束。
Write(*,*)命令:括号中的两个星号都有各自的意义,第一个星号代表输出的位置使用默认值,也就是屏幕,第二个星号则代表不特别设置输出格式。
终归一句话,Write这个命令的最简单用法,就是在括号中挂上两个星号,再把所要输出的字符串用两个双引号引起来放在后面。
E.g.:write (*,*) “Hello, Acuzio!” 。
完整的写法 write(Unit = *, FMT=*) “Hello, Acuzio!”
把上面例子中用Print命令,程序执行的结果是一样的
Print *, ”Hello, Acuzio!”
Write命令注意:
1 每一次执行Write命令后,会自动切换到下一行来准备做下一次的输入
2 因为双引号是用来“输出”字符串的,所以想要输出双引号时,要连用两个双引号。
3 Fortran90可以使用双引号或单引号来封装字符串,Fortran77标准中只能使用单引号,不过大部分的Fortran77编译器还是可以接受双引号。
STOP命令:是终止程序的意思,它可以出现在程序的任何地方,程序执行到这个命令就会中止。除非必要,不要把Stop命令使用在主程序结束之外的其他地方。因为一个程序,如果有太多的终止点会容易出错。
Print的用法和write大致上相同,只是print后面不使用括号,而且只有一个星号。这个星号的意义是不限定输出格式。Print和Write的不同处就在于少了Write的第一个星号,也就是少了赋值输出位置的能力,Print命令只能针对屏幕来使用。建议尽量使用Write来做输出的工作,因为如果日后想把程序的输出转换到其他地方,例如转换到文件中,使用Write命令的程序改写起来比较容易,只有把UNIT值指到另一个输出位置就行了。

评分

参与人数 1金钱 +5 贡献 +1 收起 理由
mofangbao + 5 + 1 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-6-21 12:13:54 | 显示全部楼层
O(∩_∩)O哈哈~,沙发是我的啦
张宏文 于 2013-2-28 10:44 使用 抢沙发 抢夺本帖沙发
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-6-21 12:14:27 | 显示全部楼层
Integer:Integer(kind = 4) a      Integer *4 a        Integer(4) a
其中kind=4、*4、(4)都是赋值要使用4个bytes来存放整数的意思。
声明变量的原则:
l 变量的名称以使用英文字母为原则,可以内含下划线或数字,但前缀必须是英文字母
2 变量名字的长度,在77标准中最起码支持6个字符长,90标准中最起码支持31个字符长。也就是说在Fortran77中变量长度最后是在1~6之间,在Fortran90中变量长度则最后是在1~31之间
3 变量名称最好不要和Fortran的执行命令同名,也不能和主程序的名称或是前面声明过的变量同名。
4 程序中辨认变量时,不会区分它的大小写
Fortran90的声明语法多了一些变化,它可以在类型的后面先写两个冒号“::”,再写上变量的名称
Real:
Real(kind=4)表示单精度。Real(kind=8)表示双精度
Complex:
Fortran中声明复数的方法:Complex a
复数是有实部和虚部两个部分组成,而Fortran中保存这两个数字的方法是用两个浮点数来保存,所有复数也可以分成单精度及双精度两种类型。
要设置一个复数数值的方法如下:a=(x,y) !x为实部,y为虚部,当a=(3.2,2.5)时,表示a=3.2+2.5i
Character:
声明:character(len=10)a   character(10)a   character*10a  character*(10) a
字符串长度需要多少字符,就赋值多少数字给它
Program ex
Character(len=20) string
String = “Good morning.”
Write(*,*) string
String(6) = “evening.” !重新设置从第六个字符之后的字符串
Write(*,*) string
end
上例中 string(1:2) = “GO”      !字符串最前面两个字符会变成GO
String(13:13)=”!”     !字符串的第13个字符会变成叹号
用(//)可以把前后两个字符串连接起来

评分

参与人数 2金钱 +11 收起 理由
topmad + 5 很给力!
言深深 + 6 赞一个!很感谢分享

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-6-21 12:17:11 | 显示全部楼层
插空顶一个!期待续集!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-6-21 15:14:27 | 显示全部楼层
楼上清风的那个表情哪里搞来的 挺有意思

阿南的总结很好 学习了

点评

蓝月亮说对了...  发表于 2011-6-21 16:25
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-6-21 15:50:47 | 显示全部楼层
本帖最后由 蓝月亮 于 2011-6-21 15:51 编辑

这个我知道,回复的时候点击: QQ截图未命名.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-6-30 11:45:45 | 显示全部楼层
Fortran有关字符串运行的函数
Char(num)        返回计算机所使用的字符表上,数值num所代表的字符
IChar(char)        返回所输入的char字符在计算机所使用的字符表中所代表的编号,返回值是整数类型
Len(string)        返回输入字符串的声明长度,返回值是整数类型
Len_Trim(String)        返回字符串去除尾端空格后的实际内容长度
Index(string,key)        所输入的String和key都是字符串。这个函数会返回key这个“子字符串”在“母字符串”String中第一次出现的位置
Trim(string)        返回把string字符串尾端多余空格清除过后的字符串
Logical:
逻辑变量并赋值。Logical a = .true.
设置逻辑变量的方法:当设置“真”值或者“假”值,请注意要在true和false的前后要加上两个点
输入命令Read
Read(*,*)                 
  read命令在使用时和write一样,都有两个星号。代表的意义也是差不多的,第一个星号代表输入的来源使用默认的设备(也就是键盘),第二个星号代表不指定输入格式
格式化输入输出(Format)
Program ex
Integer a
a = 100
write(*,100) a !使用行代码100,也就是第五行的格式来输出变量a
100 format(I4) !最前面的100是行代码,把这一行程序代码给一个编号
End
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-6-30 11:46:00 | 显示全部楼层
Format格式
Aw        以w个字符宽来输出字符串
BN        定义文本框中的空位为没有东西,在输入时才需要使用
BZ        定义文本框中的空位代表0,在输入时才需要使用
Dw.d        以w个字符宽来输出指数类型的浮点数,小数部分占d个字符宽
Ew.d[Ee]        以w个字符宽来输出指数类型的浮点数,小数部分占d个字符宽,指数部分占e个字符
ENw.d[Ee]        以指数类型来输出浮点数
ESw.d[Ee]        以指数类型来输出浮点数
Fw.d        以w个字符宽来输出浮点数,小数部分占d个字符宽
Gw.d[Ee]        以w个字符宽来输出整数,最少输出m个数字
Iw[.m]        以w个字符宽来输出整数,最少输出m个数字
Lw        以w个字符宽来输出T或F的真假值
nX        把输出的位置向右跳过n个位置
/        代表换行
:        在没有更多数据时结束输出
kP        K值控制输入输出的SCALE
Tn        输出的位置移动到本行第n列
TLn        输出的位置向左相对移动n列
TRn        输出的位置向右相对移动n列
SP        在数值为正时加上“正号”
SS        取消SP
Fortran 90添加的格式
Bw[.m]        把整数转换成二进制来输出、输出会占w个字符宽,固定输出m个数字。m值可以不给定
Ow[.m]        把整数转换成八进制来输出,输出会占w个字符宽,固定输出m个数字。m值可以不给定
Zw[.m]        把整数转换成十六进制来输出,输出会占w个字符宽,固定输出m个数字。m值可以不给定

评分

参与人数 1金钱 +8 收起 理由
alice_water_wu + 8 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-6-30 11:46:22 | 显示全部楼层
变量名称的取名策略
变量的名字中可以使用的字符集包括英文的26个字母、0~9这10个数字以及下划线“_”,不过前缀必须是英文字母。变量名称的长度限制随着各家编译器的不同而不同,Fortran 标准规定最少要支持到6个字符,Fortran90则最少要支持到31个字符

Implicit
Fortran 标准中有一项不太好的功能,它的变量不一定要经过程序声明才能使用,编译器会根据变量的第一个字母来自东决定这个变量的类型。第一个字母为I、J、K、L、M、N的变量会被视为整数类型,其他的变量则会被当成浮点数来使用。
Implicit命令的功能是用来设置“默认类型”。所谓的默认类型,是指Fortran不经过声明,由第一个字母来决定变量类型。可以经过Implicit描述来决定哪些字母开头的变量会自动使用某种类型
Implicit integer (A,B,C) !A、B、C开头的都被视为整型数
Implicit integer(A-F,I,K) !A到F及I、K开头的变量都视为整型数
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)
end
在Fortran90里,Parameter可以作为形容词,和变量的声明同时写在一起
Real, parameter ::pi=3.14159 !这里pi前面的冒号不能省,和上面代码不同(上面的可以省略)

评分

参与人数 2金钱 +4 贡献 +2 收起 理由
言深深 + 4 + 1 辛苦了,哈哈
mofangbao + 1

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-6-30 11:47:27 | 显示全部楼层
终于更新了啊,继续顶起
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表