fortran教程2:数据类型
文章目錄
-
- 數(shù)據(jù)類型
- implicit函數(shù)
- 數(shù)據(jù)類型轉(zhuǎn)換
上節(jié)內(nèi)容:
fortran安裝和編譯
數(shù)據(jù)類型
fortran共有5中數(shù)據(jù)類型
| 整數(shù) | 實(shí)數(shù) | 復(fù)數(shù) | 邏輯 | 字符 |
|---|---|---|---|---|
| integer | real | complex | logical | character |
kind參數(shù),可以指定變量所占位數(shù),例如integer(kind=4)表示占據(jù)4byte的整型,也就是32位整型。
len參數(shù),可以聲明字符個數(shù),例如character(len=80)表示長度為80的字符串。
在聲明變量時,數(shù)據(jù)類型和變量名之間用::隔開,正如上節(jié)示例程序中的real :: a, b, res。
fortran除了變量之外,還有常量,例如logical類型的兩個值.true.和.false.就是兩個常量。除此之外,若想創(chuàng)建常量,需要用到parameter命令,例如
real pi
parameter(pi=3.1415926535)
也可以在聲明時直接賦值
real, parameter :: pi = 3.1415926535
implicit函數(shù)
通過implicit,可以將變量的首字母和數(shù)據(jù)類型關(guān)聯(lián)起來,例如implicit integer(A-F,I,K),可以指定以A-F或者I, K開頭的變量為整型,當(dāng)然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
編譯之后得到結(jié)果
>gfortran impliTest.f95
1>a.exe
(1.00000000,0.00000000) 1.00000000 1
fortran對變量首字母是有默認(rèn)要求的,即不加任何implicit的情況下,變量名以i, j, k, l, m, n開頭即為整型,否則位浮點(diǎn)型,此即fortran77的I-N規(guī)則。驚聞此訊,那不得趕緊嘗鮮一下77年的規(guī)則?
但剛剛在試復(fù)數(shù)時發(fā)現(xiàn)了一個問題,盡管復(fù)數(shù)是fortran的內(nèi)置類型,但要怎樣才能創(chuàng)建一個復(fù)數(shù)呢?
這就是接下來要說的,數(shù)據(jù)類型轉(zhuǎn)換。
數(shù)據(jù)類型轉(zhuǎn)換
首先要解決的問題是創(chuàng)建復(fù)數(shù)的問題,這個很容易,只需cmplx(x, [y, kind]),可以將x和y轉(zhuǎn)換為x+iu,y默認(rèn)為0。
其他的數(shù)據(jù)類型轉(zhuǎn)換主要涉及到整型和實(shí)型,由整數(shù)變成實(shí)數(shù)非常容易,只需考慮轉(zhuǎn)換的位數(shù)問題,dble將整數(shù)轉(zhuǎn)換為雙精度浮點(diǎn)數(shù);real(a [,kind])函數(shù)可將a轉(zhuǎn)為kind位的實(shí)數(shù)。
反之則稍微復(fù)雜,由于涉及到舍入問題,故有四種轉(zhuǎn)換函數(shù)
| 函數(shù) | 說明 | 函數(shù) | 說明 |
|---|---|---|---|
int |
取a的整數(shù)部分 | nint |
四舍五入 |
ceiling |
向上取整 | floor |
向下取整 |
有兩個函數(shù)也有取整功能,但不改變數(shù)據(jù)類型,aint和anint的功能與int, nint相同,但返回值是實(shí)數(shù)。
字符雖然看上去和數(shù)字沒什么關(guān)系,但其編碼過程仍然需要與數(shù)字進(jìn)行意義對應(yīng),fortran中提供了ASCII碼的轉(zhuǎn)換函數(shù)
ACHAR(n)將ASCII轉(zhuǎn)為字符,n=0,1,?,127n=0,1,\cdots,127n=0,1,?,127CHAR(n)將ASCII轉(zhuǎn)為字符,n=0,1,?,255n=0,1,\cdots,255n=0,1,?,255IACHAR(c)將字符c轉(zhuǎn)為ASCII,范圍是0,1,?,1270,1,\cdots,1270,1,?,127ICHAR(c)將字符c轉(zhuǎn)為ASCII,范圍是0,1,?,2550,1,\cdots,2550,1,?,255
指針
在fortran中,指針需要用關(guān)鍵字pointer來聲明,通過函數(shù)allocate來開辟指針的內(nèi)存,具體示例如下
program ptTest
implicit noneinteger, pointer :: p1allocate(p1)p1 = 1print *, p1p1 = p1 + 4print *, p1end program ptTest
由于指針只有在面對復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時,才會綻放威力,所以這里就不細(xì)說了。
總結(jié)
以上是生活随笔為你收集整理的fortran教程2:数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是雾化治疗
- 下一篇: 想换行做 5G 的开发者到底该咋办?