收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

海洋数据分析 -海洋数据分析岛

[复制链接]
! p/ s3 c3 M6 a* b' f

要开始编程之前,首要要了解书写的规则以及能处理的数据类型。了解咱们手上的工具,才能更好得将其利用。

( \* b/ a: k% x& p: c

书面格式

. X- |0 Y0 |6 B

代码的编写格式有两种,自由格式(Free Format)和固定格式(Fixed Format)。程序代码扩展名为.F / .FOR为固定格式,.F90为自由格式。推荐使用自由格式进行编码。

4 s, Y% d( D6 b- ^9 [

但是自由格式就是完全自由,可以随意编码吗?答案当然是否定的。与固定格式相比,它不会规定每一行的第几个字符有什么作用,但是它也有需要遵守的规则

每行可以编写132个字符叹号“!”后面的文本都是注释,没有(编程)意义代码不为区分大小写两行代码可以用符号“&”进行连接变量取名需要以字母开头,可以表现为字母和数字混合,且长度不超过32
自由格式的简单例子,引自高PPT

数据格式

7 j4 G0 H' q8 W

与python不同,fortran程序中出现的每一个数据必须声明类型,且每一数只有一种类型。数据类型是指使用Fortran在计算机内存中记录文本、数值等数据的最小单位及方法。

$ T" g% B5 D! F( j8 P

数据类型:整数(integer)、浮点数(real)、复数(complex)、字符(character)、逻辑判断(logical)

整数需要提前声明 integer :: x,y,z数目大小不能太大,长整型占用32bits(4bytes)的空间,保存的范围为 −231+1∼231-2^{31}+1\sim2^{31} 之间,有的编译器还会提供短整型、更短整型整数和实数之间的转化,可以直接使用编译器提供的函数
real(9) = 9.0
实数/浮点数

1.精度问题。利用kind进行精度说明,值取4为单精度,值取8为双精度。实数的精度设置十分重要,将会影响最后的计算结果是否正确。

% I4 M I# L Q: K, i/ L
real(kind=4) :: distance
0 ^# Q- ` N, J6 D) }7 R$ R, g6 J1 W

2.两个实数相等问题。输出后,由于ab精度不同,他们的值也不同。

% d3 V3 z |3 T2 ~ H$ v0 u
program test . `9 b$ |6 o0 b [ implicit none 6 c3 r( _6 |$ V- O real(KIND=4) :: a 9 ]; _- n9 a& p, i' | real(KIND=8) :: b5 y0 n0 e: H$ ]! }0 \ a=0.123456789123456+ Y0 S5 \9 T) Q( `. W5 Y b=0.1234567891234566 {/ P! u( t1 C8 |$ T' y$ F H# c write(*,*) a,b=,a,b, N' ?5 x% C( `: {7 N' t end + ]$ o3 `6 B6 v. u% I% t3 {0 I; W !!!输出结果: a,b = 0.123456791 0.12345679104328156 5 H2 a0 n4 s6 L5 c
8 ~/ H( r1 X8 f9 e

3.实数与整数之间的转换

& C) [$ _4 V2 o4 V D* h
int(7.8) = 7 !忽略小数部分 2 y5 ]) ]5 }% {, P3 k- m. C nint(7.8) = 8 !四舍五入后的结果. A- k# { @) F' U3 |& F. f( C ceiling(7.8) = 8 !大于等于的整数, t7 w, H/ \ E& u+ l floor(7.8) = 7 !小于等于的整数
字符型
charcter(len=16) :: atmosphere " O- @9 w5 Q( m$ G charcter(len=20) :: ocean 6 }# u% w; l" x Z- b7 O5 ?) q f9 ~$ c atmosphere = 1234567890 # D& b9 ^5 Y4 @& B9 [ ocean = 123456789123456 !字符赋值注意使用引号$ d+ w( n- C% z" A0 \9 i0 O) v n/ n4 u$ F/ I* [2 L& A
逻辑型

对于较长的代码,灵活使用逻辑型变量,可以提高代码的多样性。

: \: Q+ X! t. P4 S
logical :: a,b ) q3 m# h$ C$ Z. ` a = .true. 8 M c; A( d: H b = .false.. N4 u8 b+ g9 D8 c m if(a)then0 J% G- i3 G; a5 N8 u2 q 0 G4 M; J4 ?6 S+ K endif* g/ ]( w2 T4 W2 N+ ]
复数型(不常用)
complex :: a % r* s7 z% W- Z `0 I+ u a = (a1,a2) # {' v' |+ o( K, G
5 z: t; w( Y+ X* H+ x

Fortran的数学表达

1 v3 A0 B9 g7 N r# X- o

数学运算符的运算优先级,由高到低排列如下

( ) 括号里优先计算* * 乘幂* 乘法 / 除法+ 加法 - 减法

需要注意:乘号容易忘记写

. c* f5 Q, I `8 \, ]! Q

Fortran的输入输出

8 o- Y, z9 e2 \

输入

( k+ v/ a7 x* ]+ x( @& s

建议使用格式化进行输入输出,这样不仅可以使得显示更加美观,在某些情况下,设置恰当的输入格式才能得到正确的数据。

方式1
integer :: a 7 U! _4 Q! |' `: W! h/ o wirte(*,100) a ! [: i* Z& G% O5 e6 a 100 format(I4). K) _( E- u7 i% o% d
/ Y5 L+ I* F t1 ]- h C

其中代号为100的这一行,作为上一行设置的输出格式

8 C! U6 \" B# K8 K' q' I

当不设置输出格式时,我们发现数字前面会出现一段额外的空格,当设置的输出格式为(I4)时,也是表示用4列来显示整数a的数值。

方式2,推荐
write(*,"(1X,I5)")9 ]/ r- ?. ^. ~/ ]9 ] $ y) w4 o- `; i$ ? write(*,"((,i2,,,i2,))") i,j- A3 f+ f& X& _( ] !输出:( 1, 2) l; Q; y$ A9 C q# R! ^# X% M * a+ r! i2 z4 k0 c# a& J write(*,(5f7.2) list(% Y' [# V9 P0 _: c9 Q !每行5个的形式输出list数组 \9 v, ]# E7 |3 q ' e- |3 {9 B0 E0 Q. r write(*,(mf7.2) list(, g: K# W' m2 X/ s7 T; s+ ~ m>=size(list() 9 T i6 G$ J B) T& A4 E !在一行内全部输出! t6 `3 \0 i4 v Y" a& G
方式3
character(len=10) :: fmtstring 5 v) g9 q# m( |+ ^- o; r$ _% e fmtstring = (I3) : C# v8 z9 r ]- J3 @+ X write(*,fmtstring) 3, E% p- {, S7 `3 P# S: Y* _% {
: x% _/ s: _& m" L! [4 J: h

声明长度为10的字符串,内容设置为输出一个整数的格式。

# b/ F, f8 o1 H5 D3 t* m6 V

常用的格式化

$ x; [2 r* D" [2 \

一般来说,最常用的几种格式为“I, F, E, A, X”,不同格式之间可用用,隔开,或者不用

Iw[.m], egI4,I0是特殊描述符,此时w=整数的长度以w个字符宽度输出整数,至少输出m个数字,当数值宽度大于w时输出*。Fw.d, egF9.3以w个字符宽度输出浮点数,小数字符占d个宽,数值大雨输出宽度时出现*Ew.d[Ee], egE15.7,E9.2E3w个宽度输出浮点数,小数部分占d个,指数部分占e个Aw以w个字符宽来输出字符串,不足w个字符的部分会自动补上空格nX输出位置向右移动n位/换行输出Tc把输出的位置移动到本行的第c个字节

输出

0 Y, T S+ @ f3 u
write(*,*) "nice to meet you!"
write,作用是显示后面双引号中的字符串。其中括号里第一个*表示输出位置使用默认值,即屏幕,如果写成unit=6表示的也是屏幕;第二个*表示不特别设置输出格式。write每执行一次命令后,会在佛那个换到下一行准备下一次的输出其中“”是为了输出字符,若想要输出“”需要使用两层双引号双引号和单引号都可以用来输出字符,但是若想要输出双引号时,就需要连续使用两个双引号
print *, "nice to meet you too!"
" L8 T3 w1 t/ M( z

这里的*表示不限定输出个格式,且该命令只能正对屏幕来使用。因此建议使用write来作为输出工具

0 Z& g4 x8 h1 d7 y' v" C; Q 9 @- Q+ E" D9 T) C+ N: l8 t / H' k6 ~- r5 a2 S7 O) `& C$ i) x / t5 r) E9 L0 Y/ y6 Q : R' v, J' ^0 j. S! W! u
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
太美
活跃在6 天前
快速回复 返回顶部 返回列表