fortran教程2:数据类型

文章目录

    • 数据类型
    • implicit函数
    • 数据类型转换

上节内容:
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 addNumimplicit complex(A-C)implicit real(D-G)implicit integer(i,j,k)a = 1d = 1i = 1print *, a, d, iend 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,⋯,127n=0,1,\cdots,127n=0,1,,127
  • CHAR(n) 将ASCII转为字符,n=0,1,⋯,255n=0,1,\cdots,255n=0,1,,255
  • IACHAR(c) 将字符c转为ASCII,范围是0,1,⋯,1270,1,\cdots,1270,1,,127
  • ICHAR(c) 将字符c转为ASCII,范围是0,1,⋯,2550,1,\cdots,2550,1,,255

指针

fortran中,指针需要用关键字pointer来声明,通过函数allocate来开辟指针的内存,具体示例如下

program ptTest
implicit noneinteger, pointer :: p1allocate(p1)p1 = 1print *, p1p1 = p1 + 4print *, p1end program ptTest

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注