Fortran学习笔记:01 基本格式与变量声明

Fortran学习笔记目录

01 基本格式与变量声明

格式

固定格式(Fixed Format):Fortran77 程序需要满足一种特定的格式要求,具体形式参考教材

自由格式(Free Format):Fortran90之后程序书写形式更为自由

数据类型

Fortran 95包含的数据类型

数据类型 关键词 C中对应
整型 integer int/long ...
浮点型 real float/double ...
复数 complex <complex.h>
字符/字符串 character char ...
逻辑判断 logical bool ...
自定义结构体 type() struct

表达式与逻辑运算

!Fortran 95支持逻辑符号

+、-,*、/:加减乘除

** :乘方

==:等于

/=:不等于

>:大于

>=:大于等于

<:小与

<=:小于等于

逻辑判断式 含义
.AND. 且,两边都成立时,表达式成立
.OR.
.NOT.
.EQV. 两边相等时为true
.NEQV. 两边不等时为true

注意:浮点型的逻辑判断,需要考虑有效位数截断的问题,例如,2.0000001不等于2,需要使用\(abs(a-2)<2e-5\),这种方式来作判定

代码结构

Fortran语言不区分大小写

program main                    !自定义程序名称 main
    write(*,*) "Hello World"    !输出字符
    stop                        !程序停止
end                             !main程序结束

输出与输入

输出

    write(*,*) "Hello World"    !输出字符

write(*,*)中,第一个*表示默认输出位置,第二个*表示默认输出格式,完整表述为以下格式

    write(unit=6,fmt=*) "Hello World"

unit=6 表述输出至屏幕,等效于unit=*。

输入

program main
    integer a,b,c
    write(*,*) "please input 3 number"
    read(*,*) a,b,c
    write(*,*) a+b+c
end

read(*,*)与write(*,*)表示意义基本一致,read(*,*)等效于

    read(unit=5,fmt=*) a,b,c

unit=5 表示由键盘输入,等效于unit=*。

格式化输入与输出

《Fortran95教程》4-4节

program main
    integer a
    real b
    complex c
    logical d
    character(len=20) e
    a=10
    b=12.34
    c=(1,2)
    d=.true.
    e="Fortran"
    write(*,"(1X,I5)") a
    write(*,"(1X,F6.3)") b
    write(*,"(1X,F4.1,F4.1)") c
    write(*,"(1X,L3)") d
    write(*,"(1X,A10)") e
end

声明常规数据类型

声明整型数据进行运算

program main
    integer a,b
    a=3
    b=4
    write(*,*) "a=",a
    write(*,*) "b=",b
    write(*,*) "a+b=",a+b
    write(*,*) "a-b=",a-b
    write(*,*) "a*b=",a*b
    write(*,*) "a/b=",a/b
    write(*,*) "a**b=",a**b
    stop
end

注意整型除法的截断问题

integer默认使用长整型进行声明,可以自定义数据类型存储长度,例如:

integer(kind=4) a

定义整型变量存储空间大小为4。

声明浮点型数据进行运算

program main
    real :: a ,b
    a=2.5
    b=3.5
    write(*,*) "a=",a
    write(*,*) "b=",b
    write(*,*) "a+b=",a+b
    write(*,*) "a-b=",a-b
    write(*,*) "a*b=",a*b
    write(*,*) "a/b=",a/b
    write(*,*) "a**b=",a**b
    stop
end

real自定义数据长度同上

real(kind=8) a

声明复数型数据进行运算

program main
    complex :: a ,b
    a=(1,1)
    b=(1,-1)
    write(*,*) "a=",a
    write(*,*) "b=",b
    write(*,*) "a+b=",a+b
    write(*,*) "a-b=",a-b
    write(*,*) "a*b=",a*b
    write(*,*) "a/b=",a/b
    stop
end

复数运算符合相应复数运算规则

声明字符与字符串

声明字符与字符串

program main
    character :: a
    character(20) :: b
    a="H"
    b="Hello World"
    write(*,*) a
    write(*,*) b
    stop
end

字符串操作:数组索引、切片操作

program main
    character(len=30) :: first,second
    first="Good morning"
    second=first(1:4)
    write(*,*) first
    write(*,*) second
    first(6:)="evening"
    write(*,*) first
    write(*,*) first//second
    stop
end

字符串相关函数

函数 功能
CHAR(num) 返回num对应的字符
ICHAR(char) 返回char字符对应的字符编号
LEN(string) 返回字符串string声明空间长度
LEN_TRIM(string) 返回字符串除去尾端空格后的字符长度
INDEX(string,key) 返回key在string中第一次出现的位置
Trim(string) 返回清楚尾端空格后的字符串
program main
    character(len=20) :: string
    character(len=5) :: substring
    string="Have a nice day!"
    substring="nice"
    write(*,*) ichar("A")
    write(*,*) char(65)
    write(*,*) len(string)
    write(*,*) len_trim(string)
    write(*,*) index(string,substring)
    stop
end

逻辑变量

true与false分别为.true..false.

program main
    logical a,b
    a=.true.
    b=.false.
    write(*,*) "a=",a,"b=",b
    stop
end

声明变量注意事项

变量名前缀必须是英文字母

IMPLICIT命令

implicit integer(A,B,C)  !A,B,C开头变量视为整型
implicit integer(A-F)    !A-F开头变量视为整型
implicit real(M-P)       !M-P开头变量视为浮点型
implicit none            !关闭默认类型,所有变量都需要声明

其他变量声明

常数声明方法(PARAMETER)

program main
    implicit none
    real pi
    parameter(pi=3.1415926535)
    write(*,"(F6.4)") sin(pi/6)
end

还可以等效成以下声明语句

real,parameter :: pi=3.14159

::表示类型申明的形容词已经添加完毕,后面紧随变量名称

设置变量初始值

Fortran95 可以直接在变量声明后进行赋值,而Fortran77需要使用DATA命令进行赋值

program main
    implicit none
    integer :: a=1
    real :: b=2.0
    complex :: c=(1,2.0)
    character(len=20) :: str="Fortran95"
    write(*,*) a,b,c,str
end

等价申明(EQUIVALENCE)

两个以上的变量使用同一块内存,类似于多个指针指向同一块内存,可以用来精简代码,节省内存。

    integer :: a,b
    equivalence(a,b)		!a,b两个变量名共享同一块内存

声明语句在程序中的位置

声明语句必须放置在可执行操作语句之前,也就意味着,程序中所有使用的变量必须首先声明。

变量类型转换

program main
    implicit none
    integer :: a=1,b=2
    write(*,*) a/b
    write(*,*) real(a)/b
end

real()函数可以将变量转化为浮点型变量

自定义数据类型

结构体,type定义结构体,%获得结构体数据成员

program main
    implicit none
    type:: person
        character(len=30) :: name
        integer :: age
        real :: weight
    end type

    type(person) :: a
    write(*,*) "name:"
    read(*,*) a%name
    write(*,*) "age:"
    read(*,*) a%age
    write(*,*) "weight:"
    read(*,*) a%weight

    write(*,100) a%name,a%age,a%weight
    100 format(/,"name:",A10/,&
              &/,"age:",I10/,&
              &/,"weight:",F5.2)
end
posted @ 2021-09-21 15:36  陈橙橙  阅读(2094)  评论(0编辑  收藏  举报