fortran教程2:数据类型
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
上节内容 fortran安装和编译
数据类型
fortran
共有5中数据类型
整数 | 实数 | 复数 | 逻辑 | 字符 |
---|---|---|---|---|
integer | real | complex | logical | character |
kind
参数可以指定变量所占位数例如integer(kind=4)
表示占据4byte的整型也就是32位整型。
len
参数可以声明字符个数例如character(len=80)
表示长度为80的字符串。
在声明变量时数据类型和变量名之间用::
隔开正如上节示例程序中的real :: a, b, res
。
fortran
除了变量之外还有常量例如logical
类型的两个值.true.
和.false.
就是两个常量。除此之外若想创建常量需要用到parameter
命令例如
real pi
parameter(pi=3.1415926535)
也可以在声明时直接赋值
real, parameter :: pi = 3.1415926535
implicit函数
通过implicit
可以将变量的首字母和数据类型关联起来例如implicit integer(A-F,I,K)
可以指定以A-F
或者I, K
开头的变量为整型当然fortran是不分大小写的。
! impliTest.f95
program addNum
implicit complex(A-C)
implicit real(D-G)
implicit integer(i,j,k)
a = 1
d = 1
i = 1
print *, a, d, i
end program addNum
编译之后得到结果
>gfortran impliTest.f95
1>a.exe
(1.00000000,0.00000000) 1.00000000 1
fortran
对变量首字母是有默认要求的即不加任何implicit
的情况下变量名以i, j, k, l, m, n
开头即为整型否则位浮点型此即fortran77的I-N规则。惊闻此讯那不得赶紧尝鲜一下77年的规则
但刚刚在试复数时发现了一个问题尽管复数是fortran的内置类型但要怎样才能创建一个复数呢
这就是接下来要说的数据类型转换。
数据类型转换
首先要解决的问题是创建复数的问题这个很容易只需cmplx(x, [y, kind])
可以将x
和y
转换为x+iu
y
默认为0。
其他的数据类型转换主要涉及到整型和实型由整数变成实数非常容易只需考虑转换的位数问题dble
将整数转换为双精度浮点数real(a [,kind])
函数可将a
转为kind
位的实数。
反之则稍微复杂由于涉及到舍入问题故有四种转换函数
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
int | 取a的整数部分 | nint | 四舍五入 |
ceiling | 向上取整 | floor | 向下取整 |
有两个函数也有取整功能但不改变数据类型aint
和anint
的功能与int, nint
相同但返回值是实数。
字符虽然看上去和数字没什么关系但其编码过程仍然需要与数字进行意义对应fortran
中提供了ASCII码的转换函数
ACHAR(n)
将ASCII转为字符 n = 0 , 1 , ⋯ , 127 n=0,1,\cdots,127 n=0,1,⋯,127CHAR(n)
将ASCII转为字符 n = 0 , 1 , ⋯ , 255 n=0,1,\cdots,255 n=0,1,⋯,255IACHAR(c)
将字符c
转为ASCII范围是 0 , 1 , ⋯ , 127 0,1,\cdots,127 0,1,⋯,127ICHAR(c)
将字符c
转为ASCII范围是 0 , 1 , ⋯ , 255 0,1,\cdots,255 0,1,⋯,255
指针
在fortran
中指针需要用关键字pointer
来声明通过函数allocate
来开辟指针的内存具体示例如下
program ptTest
implicit none
integer, pointer :: p1
allocate(p1)
p1 = 1
print *, p1
p1 = p1 + 4
print *, p1
end program ptTest
由于指针只有在面对复杂的数据结构时才会绽放威力所以这里就不细说了。