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]),可以將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,?,127n=0,1,\cdots,127n=0,1,?,127CHAR(n)將ASCII轉為字符,n=0,1,?,255n=0,1,\cdots,255n=0,1,?,255IACHAR(c)將字符c轉為ASCII,范圍是0,1,?,1270,1,\cdots,1270,1,?,127ICHAR(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
由于指針只有在面對復雜的數據結構時,才會綻放威力,所以這里就不細說了。
總結
以上是生活随笔為你收集整理的fortran教程2:数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是雾化治疗
- 下一篇: 想换行做 5G 的开发者到底该咋办?