fortran教程2:数据类型

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


上节内容 fortran安装和编译

数据类型

fortran共有5中数据类型

整数实数复数逻辑字符
integerrealcomplexlogicalcharacter

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])可以将xy转换为x+iuy默认为0。

其他的数据类型转换主要涉及到整型和实型由整数变成实数非常容易只需考虑转换的位数问题dble将整数转换为双精度浮点数real(a [,kind])函数可将a转为kind位的实数。

反之则稍微复杂由于涉及到舍入问题故有四种转换函数

函数说明函数说明
int取a的整数部分nint四舍五入
ceiling向上取整floor向下取整

有两个函数也有取整功能但不改变数据类型aintanint的功能与int, nint相同但返回值是实数。

字符虽然看上去和数字没什么关系但其编码过程仍然需要与数字进行意义对应fortran中提供了ASCII码的转换函数

  • ACHAR(n) 将ASCII转为字符 n = 0 , 1 , ⋯   , 127 n=0,1,\cdots,127 n=0,1,,127
  • CHAR(n) 将ASCII转为字符 n = 0 , 1 , ⋯   , 255 n=0,1,\cdots,255 n=0,1,,255
  • IACHAR(c) 将字符c转为ASCII范围是 0 , 1 , ⋯   , 127 0,1,\cdots,127 0,1,,127
  • ICHAR(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

由于指针只有在面对复杂的数据结构时才会绽放威力所以这里就不细说了。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6