fortran 语言总结

fortran
对大小写不敏感
语句以数字开始,表示语句的标号
fortran长项与数值计算
注意文件的后缀名

/=和.ne.都是表示不等于

规则:
保留字使用大写,如PROGRAM,READ,WRITE
程序的变量使用小写
fortran.f90
编译
[asc15@mic01 fortan]$ ifort fortran.f90

INTERGRE
REAL
LOGICAL

开始
“!”号后的字符均被视为注释.但字符串中的!除外.
注释行必须单独占一行,不能出现在其他语句的行尾.
续行的定义. 续行定义”&”
当一行的最后为”&”时,下一行与本行接续.
当一行的第一个字符是”&”时,本行与上一行接续.

**表示乘方

变量
默认式:
凡是以字母 I,J,K,L,M,N六个字母开头的,即认为是整型变量,其他为实型变量.

显示的声明变量:
INTERGR :: day,month

声明字符串:
CHARACTER (len=15) :: var1
CHARACTER (l15) :: var1

常量
REAL,PARAMETER :: PI=3.14
可以将某一字母开头的全部变量指定为所需类型.
变量名的声明和应用
类型说明语句 > IMPLICIT语句 > “I,J,K,L,M,N”规则

IMPLICIT NONE 语句,出现在PROGRAM 语句后和类型声明语句前
使fortran 默认提供的输入值的功能丢失.
没有出现在显示类型声明语句中的变量被认为是错的.

内置函数
输入输出
输入语句
READ(,) input_list
ERITE(,) output_list

数组
real,dimension(16) :: voltage
16个元素为实数型数组.
dimension属性来说明数组的大小.
下标从1开始
定义形式1
类型说明符 [::] 数组名 ([下标下界:]下标上界[,])[,]
real :: a(1;2,2:4)
integer b(10)

定义形式2
使用 dimension 说明数组
格式 dimension [::] 数组名(小标下界,下标上界) 省略默认为1
dimension :: a(10),b(2:11)
integer :: a

定义形式3
dimension ([下标下界],下标上界) [::] 数组名
dimension (10,4:10) :: a,b,n
integer :: a
real(8) :: n

定义形式4
[类型说明,] dimension [::] 数组名 ([下标下界:]下标上界[,..][,..])
[类型说明,] dimension ([下标下界:]下标上界[,..][,..])[::] 数组名 [,..]

real,dimension::i(10),m(10,5)
real,dimension(10),m(10,5) :: a,c

操作整个数组
如果两个数组有相同的结构,可以像普通的变量进行算术操作.

数组赋值

data 语句进行数组赋值

声明常量
parameter(PI=3.1415926)

种别和属性
种别参数来指定变量的存储空间,达到优化使用存储空间,防止精度丢失的目的.

取整函数
C=INT(X)

关系运算符
.gt. 大于
.ge. 大于等于
.lt. 小于
.le. 小于等于
.eq. 等于
.ne. 不等于

逻辑运算符
.and. 逻辑与
.or. 或
.not. 非
.eqv. 等价
.neqv. 不等价

IF语句
if (逻辑表达式) then
XX
else if (逻辑表达式) then
XX
else
XX
end if

SELECT CASE
INTEGER :: temp_c
temp : SELECT CASE (temp_c)
CASE (:-1)
..
CASE(1:20)
..
CASE DEFAULT
..
END SELECT temp

Do 循环规则
do
..
IF() EXIT
..
end do

WHILE
..
IF logical_expr EXIT
..
END OF WHILE

隐式循环
实际上一种带控制循环变量的do循环,简化成只有do循环
i=m1,m2[,m3]
m1 循环初值,m2循环的终值,m3表示循环的增量,省略默认为1

exit语句的作用是停止循环并使流程控制退出循环结构
exit [do构造名]

迭代或计数循环
DO index=istart,iend,incr
..
END Do

开始处istart赋值给index.如果index*incr<=iend*incr
每次执行过后
index+=incr

例子
DO i=1,10

ENDDO
程序结束 End
只能有一个end语句
程序单元最后一行

CYCLE 和 EXIT
cycle 在do循环体内执行,当前循环的执行终止,控制器返回到循环顶部.相当于
continue

exit 相当于break
程序终止stop
唯一作用便是终止程序
可以出现在程序的任意位置,且可以有多个

程序暂停 pause

fortran 按照列优先

IMPLICIT NONE
加入这个叙述之后,会把内定型态的功能关闭

外部过程
子程序,通过call语句中使用过程名来调用.并通过参数表来获取输入参数.
SUBROUTINE name (argument_list)
..
..
RETURN
END SUBROUTINE name

SUBROUTINE 标志着子程序的开始,定义了子程序名和相关参数表.

INTENT
地址传递方案.
real, INTENT(IN) :: y(*)
传递数组给子程序

多维数组
a(:,1) 选取第一列
a(1,:) 选取第一行
a(1:3,1:3:5) 选取第1到3行,第1,3,5列

where结构
WHERE(value>0)
logval=LOG(value)
ELSEWHERE
LOGVAL = -9999
END WHERE

forall结构
FORALL(i=1:n,j=1:m,work(I,j)/=0)
work(I,j)=1./work(i,j)
END FORALL

你可能感兴趣的:(算法)