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

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

[复制链接]
; e7 v4 S( h- R/ c

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

5 b7 ~" n! A" O6 n7 h

书面格式

/ ]* K* m1 S; O! ~% t5 e" S

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

8 l, }+ @/ i1 n& @: f( R

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

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

数据格式

# j6 _, S* W5 N5 W, }5 {

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

0 c4 p0 c& ^) O9 g: K( y i. @

数据类型:整数(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为双精度。实数的精度设置十分重要,将会影响最后的计算结果是否正确。

$ |& S0 h7 ^' C1 O4 P5 e9 m$ f
real(kind=4) :: distance
5 o+ L1 B' H# U$ y4 _ N

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

# L2 `) J# p# g9 |; {9 h5 J# {5 m% y
program test / q# F! K9 E' Z. _ K; t7 P implicit none0 Q6 }/ i6 e5 K; |/ N9 I, R, E6 s3 v real(KIND=4) :: a ; m( k- y" |, C! ` real(KIND=8) :: b 7 u, x- E1 U2 {6 @& V a=0.123456789123456 6 i1 M+ T& g7 Z8 b% o3 k b=0.123456789123456 9 k0 s( W/ e$ V+ Q write(*,*) a,b=,a,b/ [ }5 a% @% B- U! u' i, z4 n end * T5 A: _$ [; H7 } !!!输出结果: a,b = 0.123456791 0.12345679104328156 . l$ \1 C I1 i5 t8 o. w, g
+ d3 N) Z( F& B+ q' y ^

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

3 o" k5 z6 |5 c9 J# S4 r1 \* x% w, s
int(7.8) = 7 !忽略小数部分% Z0 z) U, b* o% O; G( d4 E+ }3 O% [ nint(7.8) = 8 !四舍五入后的结果# v. W! n9 t. x, ^3 }& Q9 D ceiling(7.8) = 8 !大于等于的整数 ! B# A2 L! j5 a4 [( `. D floor(7.8) = 7 !小于等于的整数
字符型
charcter(len=16) :: atmosphere & D% b/ Z G! A' ~: [# W( W7 C charcter(len=20) :: ocean. G% @; \, v0 y3 H& \/ Q4 G , _' e" P! ?+ D atmosphere = 1234567890 7 K' E K9 E( o6 y0 Z% E8 j( Z" x; B ocean = 123456789123456 !字符赋值注意使用引号4 m. G a* D! P. A% ^/ r ' Q. C! A. q4 M% n) h
逻辑型

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

" p7 M/ e4 T6 K6 X- m# \
logical :: a,b , K$ W8 T+ y; f0 ? a = .true. ' m9 p8 w, y' n0 `" |0 ? b = .false.' v- A' j* B) I5 S$ @- W if(a)then 0 n4 N" J) V) m - {+ F4 m8 g9 O4 D; s7 g8 K4 v( @5 R endif: t8 p( a( i8 y8 Q1 H
复数型(不常用)
complex :: a 3 A. ~8 G$ y% m# z; I" { a = (a1,a2)1 x6 t6 v6 _/ y
$ O0 @+ O/ i+ @4 e1 M

Fortran的数学表达

# |' L4 I; f, [" L0 y8 f

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

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

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

3 {8 b. G- E. s) X7 m

Fortran的输入输出

* G( {& u$ ]9 W z9 ]

输入

- c9 c/ Q& h8 A/ _# |' q& S, b* ]

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

方式1
integer :: a & d4 o1 J- T6 F4 e, ^ wirte(*,100) a 0 t I' }9 a# O! R 100 format(I4) ; [( _/ g$ ~% ?( h& f6 j
# i! v) @. h) l4 f

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

9 q4 h. W1 c0 q9 b

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

方式2,推荐
write(*,"(1X,I5)") 9 ]/ L# ^7 m4 N# Q: K1 g [( h 7 d8 H6 [+ s1 w8 ` write(*,"((,i2,,,i2,))") i,j , n: q8 v5 x# J1 O !输出:( 1, 2)# a; M$ {" X+ r4 E 0 Y) l( p1 c7 Z2 f write(*,(5f7.2) list( : s2 p3 X/ Z1 J: A7 o. z !每行5个的形式输出list数组+ u1 K4 t+ r# `5 m3 Q, ^2 f( A ; N2 I# @& i2 C, X5 O: l8 _ write(*,(mf7.2) list(5 n. _6 r0 v, k: H. c m>=size(list() 9 ]% W' Z6 R$ l !在一行内全部输出/ e5 L$ ^7 G2 j7 [! @' ?2 a
方式3
character(len=10) :: fmtstring7 X7 R O4 K" Q5 j- o! ^6 L fmtstring = (I3)" t" O# R; F3 K: [$ n write(*,fmtstring) 3) O5 }0 p* w$ T7 ?
% b5 r! y* F# B% ^- B: E9 D# p' g# D

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

" ]/ d) a$ k, ~- @' X' s, x M

常用的格式化

5 w3 m- I4 d e7 u

一般来说,最常用的几种格式为“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个字节

输出

# ]; R! V( z+ U% ~- k T
write(*,*) "nice to meet you!"
write,作用是显示后面双引号中的字符串。其中括号里第一个*表示输出位置使用默认值,即屏幕,如果写成unit=6表示的也是屏幕;第二个*表示不特别设置输出格式。write每执行一次命令后,会在佛那个换到下一行准备下一次的输出其中“”是为了输出字符,若想要输出“”需要使用两层双引号双引号和单引号都可以用来输出字符,但是若想要输出双引号时,就需要连续使用两个双引号
print *, "nice to meet you too!"
h( b* C1 c+ J' x2 z

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

& Y1 }) z) Z4 q9 f9 {9 _ 8 Z# Q6 R$ \9 R6 X& u5 _1 } ; r( ^( Y p4 k2 H2 d$ a( U8 [$ G8 ?& |/ I T5 ?5 y+ e: L& A 9 {: _( Q1 E6 j7 g5 ~" T
回复

举报 使用道具

相关帖子

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