国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Fortran 語法備忘錄 (初級)
轉自:http://zhousicheng.googlepages.com/a_013
最簡單的fortran程序:
END
目錄:
【注釋】
【并行】
【續(xù)行】
【程序開始】
【常量】◆整型◆實型◆復型◆邏輯型◆字符◆例子◆其他進制
【變量】
【變量聲明】◆類型說明&種別說明◆屬性說明◆例子◆賦初值
【數組】◆三元下標◆向量下標◆數組賦值◆數組運算◆WHERE構造◆FORALL構造◆函數名稱◆動態(tài)數組
【派生類型】
【算術運算】
【關系運算】
【邏輯運算】
【判斷IF構造】
【GOTO循環(huán)】
【DO循環(huán)】◆隱DO循環(huán)◆無循環(huán)變量◆跳出循環(huán)◆DO WHILE
【多重選擇CASE構造】
【READ,WRITE 輸入輸出】◆文件◆WRITE語句◆READ◆I/O列表◆OPEN◆CLOSE◆定位語句◆內部文件
【FORMAT語句】
【一些說明】
【一些建議】
【注釋】
整行注釋,第一個字母為 C 或者 *
附加注釋,與句后面用 !
!--------------------------------------------------------
! 說明(F90)
!--------------------------------------------------------
【并行】
!--------------------------------------------------------
a=1.0  ;  b=2.0
!--------------------------------------------------------
【續(xù)行】
F90中一行為132列,允許有39個續(xù)行。在語句行最后加上續(xù)行符“&”號。如果字符串被打斷,跨2行以上,則在續(xù)行的開始位置也要加&號。
第6列上寫一個非空格和非零的字符(任何ASCII字符), 常用C
【程序開始】
!--------------------------------------------------------
PROGRAM main
END PROGRAM main
!--------------------------------------------------------
【常量】
◆整型 (默認4字節(jié))
100_1                        !單字節(jié)整型常量
2000
2000_4                      !4字節(jié)整型常量
◆實型 (默認4字節(jié))
print *, 3.14159265358979_8   ! 直接打印雙精度數
print *, 3.14159265358979_4   ! 直接打印單精度數(7位有效數字)
◆復型  (默認2×4字節(jié))
(a,b)=(實數,實數)
◆邏輯型 (默認4字節(jié))  .TRUE.  和 .FALSE.
a=.TRUE.
◆字符型 (F90用"")
name="char"
例:"I'm a boy."  (長為10字節(jié))
'I''m a boy.'  (長為10字節(jié))
字符子串:
A(3:11)    ->  'CDE12345F',
A(I+4:9)   ->  'E1234'(I=1),'1234'(I=2)
A(:5)        ->  'ABCDE'
A(11:)      ->  'FGH'
A(:)          ->  'ABCDE12345FGH'
A(3:3)      ->  'C'
A=A(:5)//A(6:)          !字符串的合并運算
求字符串長度的函數:LEN(字符串)
不計尾部空格的字符串長度函數:LEN_TRIM(字符串)
求子串在父串位置的函數:INDEX
驗證字符串的函數:VERIFY
除去尾部空格函數:TRIM
比較字符大小的函數:LGE、LGT、LLE、LLT
◆例如:
21_2+7.6_4     表示整型種別為2的數21與實型種別為4的數7.6相加。
3.8E-5_4
0.87D-16      禁止說明種別值
(4.7_8,5)      復數表示用括號,逗號分開前面的實部(種別值為8的實數)和后面的虛部(缺省種別值的整數)。
.FALSE._4     表示邏輯型,其常數值是假,種別值是4。
1_'計算數學'
1_'αβγ'         字符串的字符不只限于Fortran字符集內,處理系統(tǒng)支持的圖形符號也是允許的。
◆整數的其他進制:
在F90中,還可以根據需要定義二進制、八進制和十六進制正整數常量。二進制常量的表示方法是以字母B開頭,后跟定界符括起來的數字串,定界符可以是撇號或括號,數字是0或1,如:B'01011',B(01011)。八進制常量的表示方法是以字母O開頭,后跟定界符括起來的數字串,數字范圍是0至7,如:O'10472'。十六進制常量的表示方法是以字母Z開頭,后跟定界符括起來的數字或字母串,數字范圍是0至9,字母范圍為A至F,如:Z'18E2D'。但要注意,整數的這些形式,僅限于出現在DATA賦值語句中。
【變量】
變量可用字符: 字母A-Y,數字0-9,下劃線_  (最多31個字符)
數組 a(4)
【變量聲明】
F90程序中的數據都有三個特征:類型、種別、屬性
類型說明[(種別說明)][,屬性說明表] :: 變量名表[=初值]
例如:Real (KIND=4), DIMENSION(4)  ::  array               !同:Dimension array(4)
◆類型說明 & 種別說明
整型說明語句
INTEGER([KIND=]1) 或 INTEGER*1  -128—127
INTEGER([KIND=]2) 或 INTEGER*2  -32768—32767
INTEGER([KIND=]4) 或 INTEGER*4  -2147483648—2147483647 缺省值
實型說明語句
REAL([KIND=]4) or REAL*4   通常實數的范圍是10**-38—10**38之間的7位有效數字 缺省值
REAL([KIND=]8) or REAL*8   等價于雙精度型 DOUBLE PRECISION
雙精度說明語句
DOUBLE PRECISION
復型說明語句
COMPLEX([KIND=]4) or COMPLEX*8    缺省值
邏輯型說明語句
LOGICAL([KIND=]4) or LOGICAL*4  缺省值
字符型說明語句
CHARACTER([KIND=]1)
◆屬性說明
屬性關鍵字         描述  適用范圍
ALLOCATABLE  說明動態(tài)數組  數組
AUTOMATIC      聲明變量在堆棧中而不是在內存中  變量
DIMENSION      說明數組  數組變量
EXTERNAL        聲明外部函數的名稱  過程
INTENT            說明過程啞元的用意  過程啞元
INTRINSIC        聲明一個內部函數  過程
OPTIONAL        允許過程被調用時省略啞元  過程啞元
PARAMETER     聲明常量  常量
POINTER          聲明數據對象為指針  變量
PRIVATE          限制模塊中的實體訪問于本塊內  常量、變量或模塊
PUBLIC            允許模塊中的實體被外部使用  常量、變量或模塊
SAVE              保存過程執(zhí)行后其中的變量值  變量或公共塊
STATIC           說明變量為靜態(tài)存儲  變量
TARGET          聲明變量為目標  變量
VOLATILE        聲明對象為完全不可預測并在編譯時無優(yōu)化  數據對象或公共塊
◆例如:
REAL*8  a,b*4
REAL(8) a,b
REAL(LEN=8) a,b             !種類說明:([KIND=]種別值)
INTEGER,PARAMETER :: Long=SELECTED_REAL_KIND(9,99)       !屬性說明
REAL :: A=2.8_LONG, B=1.23456789E60_LONG
LOGICAL(KIND=2),DIMENSION(1:10) :: X                   !同DIMENSION*2  X(10) ??
CHARACTER(LEN=12,KIND=1) :: A,B
CHARACTER(KIND=1,LEN=12) :: A,B
CHARACTER(12,1) :: A,B
CHARACTER*12 :: A,B
CHARACTER(LEN=*),PARAMETER :: C_NAME='GIRL'    !*號表示長度暫不確定
CHARACTER(LEN=*),PARAMETER :: C_NAME='BOY'
CHARACTER(LEN=12) :: A,B*5,C,D*7,E                      !變量名后標出自己的特有長度
◆賦初值:
DATA 變量名表1/初值表1/[[,]變量名表2/初值表2/…]
例如:
DIMENSION A(10,10)
DATA A/100*1.0/                                      ! 按數組變量名統(tǒng)一初始化(重復次數*常數值)
DATA A(1,1), A(10,1), A(3,3) /2*2.5, 2.0/   ! 按數組元素逐個初始化
DATA ((A(I,J),I=1,5,2),J=1,5) /15*1.0/        ! 按隱DO循環(huán)初始化
DATA  cstuff/(-1.0,-1.0)/                            !復數初始化
CHARACTER (LEN=10) name                       !字符串初始化
CHARACTER BELL, TAB, LF, FF, STARS*6
CHARACTER*8 help
DATA name,STARS /'Zhang Fei','****'/
DATA BELL,TAB,LF,FF /7,9,10,12/                ! 用ACSII控制字符碼賦于字符變量
DATA  help(1:4),help(5:8) /2*'HELP'/            ! 用字符子串分段賦值
duiyul輸入的數據可以是.TRUE.(真)或.FALSE.(假),也可以是以T或F字母開頭的任何字符串
【數組】
!-----------------------------------------------------------------------
real a(10)
REAL        A(10,2,3)                     ! 類型說明
DIMENSION   A(10,2,3)                 ! DIMENSI0N語句
ALLOCATABLE B(:,:)                     ! ALLOCATABLE語句
POINTER     C(:,:,:)                       ! POINTER語句
REAL,DIMENSION(2,5):: D           ! 類型說明中的DIMENSION屬性
REAL,ALLOCATABLE::    E(:,:,:)   ! 類型說明中的ALLOCATABLE屬性
REAL,POINTER::        F(:,:)          ! 類型說明中的POINTER屬性
!-----------------------------------------------------------------------
數組的秩至少是1。如果沒有下標則指整個數組。下標必須用逗號隔開,可以用整型常量、變量或表達式,函數。
例如A指整個數組,A(1)指數組A的第1個元素,A(3:4)指數組A的第3和第4個元素,A(1:10:2)指的是數組A的第1,3,5,7,9個元素。數組片段本身也是數組。
◆三元下標:[下界]:[上界][:步長]。默認分別為最小、最大下標,步長默認為1。全部省略指數組全長。
例:
!-----------------------------------------------------------------------
REAL A(10)
A(1:5:2)=3.0  !把元素A(1),A(3),A(5)置為3.0
A(:5:2)=3.O   !把元素A(1),A(3),A(5)置為3.0,因為缺省下界為1
A(2::3)=3.O   !把元素A(2),A(5),A(8)置為3.0,因為上界缺省值為10
A(7:9)=3.0    !把元素A(7),A(8),A(9)置為3.0,因為缺省步長為1
A(:)=3.0       !和A=3.0相同,將A的所有元素置為3.0
!-----------------------------------------------------------------------
◆向量下標
向量下標是一個一維整數數組(即向量),它可以從整個數組中選擇片段。以任何順序來指定數組元素。
例:
!-----------------------------------------------------------------------
REAL A(10),B(5,5)
INTEGER I(4),J(3)
I=(/5,3,8,2/)    !定義向量I
J=(/3,1,5/)      !定義向量J
A(I)=3.O         !設置元素A(5),A(3),A(8),A(2)的值,同A(/5,3,8,2/)
B(2,J)=3.O      !設置元素B(2,3),B(2,1)和B(2,5)的值
!-----------------------------------------------------------------------
例:
INTEGER :: a(4)=(/0,1,2,3/),b(3)=(/1,4,3/)
則a(b)與a同類型,與b同形狀,取值為(/0,3,2/)。a(b)可以不是數組片段,而是更大的數組。如上面b為(/2,3,2,3,2,3/)時,a(b)為(/1,2,1,2,1,2/)。   (多對一數組片段,不可以在等號左邊被賦值!)
!-----------------------------------------------------------------------
例:
CHARACTER(1) :: symbol(0:1)=(/'F','M'/)
INTEGER :: bit(100)
若bit的元素列為0001101100111...,則symbol(bit)是用{F,M}字符構成的100字節(jié)的字符型數組FFFMMFMMFFMMM...。
!-----------------------------------------------------------------------
◆顯式形狀(Explicit-shape)數組
Dimension  ([下界:]上界[,[下界:]上界]…)
維界可以是常數或變量
◆自動(Automatic)數組
用于子程序中的顯型數組,維界可用變量表示,例:
!-----------------------------------------------------------------------
SUBROUTINE EXAMPLE(N,R1,R2)
DIMENSION A(N,5),B(10*N)
……
N=IFIX(R1)+IFIX(R2)
!-----------------------------------------------------------------------
此例中的A和B都是自動數組。子程序被調用時,數組A和B的上界通過傳入的變量N來確定,而以后N的值的變化對A和B的大小不會有影響。
◆可調(Adjustable)數組
一個主程序的顯型數組,作為子過程的一個啞元, 維界是啞元變量,或者常量。需要在子程序中用Dimension重新聲明。例:
!-----------------------------------------------------------------------
DIMENSION A1(10,35)
……
SUM1=THE_SUM(A1,10,35)
END
FUNCTION THE_SUM(A,M,N)
DIMENSION A(M,N)
SUMX=0.0
DO J=1,N
DO I=1,M
SUMX=SUMX+A(I,J)
END DO
END DO
THE_SUM=SUMX
END FUNCTION
!-----------------------------------------------------------------------
◆假定形狀(Assumed-shape)數組
作為子過程的一個啞元, 通過子程序來確定數組的維界(部分或者全部)
例:
!-----------------------------------------------------------------------
SUBROUTINE ASSUMED(A)
REAL A(:,:,:)              !數組A的秩為3,每一維的長度待定。當過程被調用時A將從傳遞的數組獲得形狀:
REAL X(4,7,9)
CALL ASSUMED(X)
!-----------------------------------------------------------------------
于是A獲得了數組維界(4,7,9),實際數組和假定形狀數組的值必須相同。如果上面過程中數組聲明了A(3:,0:,-2:),以啞元X(4,7,9)調用過程時,數組A的實際維界是A(3:6,0:6,-2:6)。
應用假定形狀數組為啞元的過程時必須有顯式的接口INTERFACE語句。
例:
!-----------------------------------------------------------------------
INTERFACE
SUBROUTINE SUB(M)
INTEGER M(:,1:,5:)
END SUBROUTINE
END INTERFACE
INTEGER L(20,5:25,10)
CALL SUB(L)
END
!-----------------------------------------------------------------------
在此例中數組M的維界是(1:20,1:21,5:14)。
◆假定大小(Assumed-size)數組
這種數組是在過程中的啞元,它從實際傳遞過來的數組獲得數組大小。除了最后一維的上界以外,其它所有特征(秩,長度和維界)都必須指定。聲明一個假定大小數組時,最后一個的上界用星號*表示。它的一般形式是:([顯型維界,][顯型維界,]...[下界:]*)。
例:
!-----------------------------------------------------------------------
SUBROUTINE ASSUME(A)
REAL A(2,2,*)
REAL X(7)
CALL ASSUME(X)
!-----------------------------------------------------------------------
則數組X的元素與數組A的對應順序是:
X(1):A(1,1,1)
X(2):A(2,1,1)
X(3):A(1,2,1)
X(4):A(2,2,1)
X(5):A(1,1,2)
X(6):A(2,1,2)
X(7):A(1,2,2)
A的第三維不是完整的,所以數組X不能作為啞元傳遞。
◆延遲形狀(Deferred-shape)數組
可分配數組必須以延遲形狀的形式來聲明。它每一維的長度只有在分配數組才被確定。聲明遲形數組時,秩由冒號確定,但長度是未知的。
例:
!-----------------------------------------------------------------------
REAL,ALLOCATABLE:: A(:,:,:)
INTEGER,ALLOCATABLE,TARGET:: K(:)
!-----------------------------------------------------------------------
可分配數組可由下列方式聲明:使用ALLOCATABLE語句、DIMENSION語句、TARGET語句或在類型聲明中使用ALLOCATABLE屬性。如果遲形數組以DIMENSION語句或TARGET語句聲明,則在其它語句中必須給出ALLOCATABLE屬性。
在遲形數組的大小、形狀和維界沒有確定之前,其任何部分都不能被引用,可分配數組的大小、形狀和維界在ALLOCATE語句執(zhí)行時才被確定。
例:
!-----------------------------------------------------------------------
INTEGER,ALLOCATABLE:: A(:,:)
REAL,ALLOCATABLE,TARGET:: B(:,:),C(:)
ALLOCATE(A(2,3),C(5),B(SIZE(C),12))
!-----------------------------------------------------------------------
◆數組賦值  (按列存儲,從左到右) A(1,1) A(2,1) A(1,2) A(2,2)
A=0
A(1:20)=A(20:1:-1)      ! 將A數組元素值倒序重排
◆數組構造器是由括號和斜線之間的一系列值或隱DO循環(huán)組成。其一般形式為:(/取值列表/)。取值列表可以是標量,隱DO循環(huán)或任意秩的數組。
例:
INTEGER A(6)
A=(/1,2,3,4,5,6/)                 ! 斜杠與括號間不能有空格
C1=(/4,8,7,6/)                     ! 標量表示
C2=(/B(I,1:5),B(I:J,7:9)/)     ! 數組表示
C3=(/(I,I=1,4)/)                   ! 隱DO循環(huán)
C4=(/4,A(1:5),(I,I=1,4),7/)   ! 混合表示
◆用方括號代替括號和斜線,例如下面兩個數組構造器是等價的:
INTEGER C(4)
C=(/4,8,7,6/)
C=[4,8,7,6]
◆冒號三元下標(代替隱DO循環(huán))來指定值的范圍和步長,例如下面兩個數組構造器是等價的:
例:INTEGER D(3)
D=(/1:5:2/)               ! 三元下標格式
D=(/(I,I=1,5,2)/)         ! 隱DO循環(huán)格式
◆數組運算
!-----------------------------------------------------------------------
A=B            ! 并行處理
do i=1,n
A(i)=B(i)
end do         !串行處理
!-----------------------------------------------------------------------
◆WHERE構造
WHERE語句的一般形式為:WHERE(屏蔽表達式) 賦值語句
WHERE構造的一般形式為:
!-----------------------------------------------------------------------
[構造名:] WHERE(數組邏輯表達式1)
[塊]
[ELSEWHERE(數組邏輯表達式2) [構造名]
[塊]]
[ELSEWHERE [構造名]
[塊]]
END WHERE [構造名]
!-----------------------------------------------------------------------
◆FORALL構造
FORALL是F95的新增功能。它是數組屏蔽賦值(WHERE語句和構造)功能的一對一元素的推廣,其方式有FORALL語句和FORALL構造。
FORALL語句的一般形式為:FORALL(循環(huán)三元下標[,循環(huán)三元下標]…[,屏蔽表達式]) 賦值語句
FORALL構造的一般形式為:
!-----------------------------------------------------------------------
[構造名:] FORALL(循環(huán)三元下標[,循環(huán)三元下標]…[,屏蔽表達式])
[塊]
END FORALL [構造名]
!-----------------------------------------------------------------------
屏蔽表達式是數組邏輯表達式,缺省值為.TRUE.。塊是賦值語句,或為WHERE語句或構造,或為FORALL語句或構造。
循環(huán)三元下標的形式為:循環(huán)變量=下界:上界[:步長]。循環(huán)變量是整型的。步長不能為0,缺省值為1。
◆函數名稱        描述
ALL(mask[,dim]) 判斷全部數組值在指定維上是否都滿足mask的條件
ANY(mask[,dim]) 判斷是否有數組值在指定維上滿足mask的條件
COUNT(mask[,dim]) 統(tǒng)計在指定維上滿足mask的條件的元素個數
CSHIFT(array,shift[,dim]) 進行指定維上的循環(huán)替換
DOT_PRODUCT(vector_a,vector_b) 進行兩個向量的點乘
EOSHIFT(array,shift[,boundary][,dim]) 在指定維上替換掉數組末端,復制邊界值到數組末尾
LBOUND(array[,dim]) 返回指定維上的下界
MATMUL(matrix_a,matrix_b) 進行兩個矩陣(二維數組)的乘積
MAXLOC(array[,dim][,mask]) 返回數組的全部元素或指定維元素當滿足mask條件的最大值的位置
MAXVAL(array[,dim][,mask]) 返回在指定維上滿足mask條件的最大值
MERGE(tsource,fsource,mask) 按mask條件組合兩個數組
MINLOC(array[,dim][,mask]) 返回數組的全部元素或指定維元素當滿足mask條件的最小值的位置
MINVAL(array[,dim][,mask]) 返回在指定維上滿足mask條件的最小值
PACK(array,mask[,vector]) 使用mask條件把一個數組壓縮至vector大小的向量
PRODUCT(array[,dim][,mask]) 返回在指定維上滿足mask條件的元素的乘積
RESHAPE(source,shape[,pad][,order]) 使用順序order和補充pad數組元素來改變數組形狀
SHAPE(source) 返回數組的形狀
SIZE(array[,dim]) 返回數組在指定維上的長度
SPREAD(source,dim,ncopies) 通過增加一維來復制數組
SUM(array[,dim][,mask]) 返回在指定維上滿足mask條件的元素的和
TRANSPOSE(matrix) 轉置二維數組
UBOUND(array[,dim]) 返回指定維上的上界
UNPACK(vector,mask,field) 把向量在mask條件下填充field的元素解壓至數組
◆用ALLOCATE語句動態(tài)分配數組
ALLOCATE語句動態(tài)創(chuàng)建可分配數組,使內存和對象相聯(lián)系。分配的對象可以被命名為任何有ALLOCATABLE屬性的變量。它的一般形式為:
ALLOCATE(數組名[維界符][,數組名[(維界符[,維界符...])] ] ...[,STAT=狀態(tài)值])。
例:
!-----------------------------------------------------------------------
REAL A(:),B(:,:,:)
ALLOCATABLE A,B
ALLOCATE(A(-
◆數組查詢:
數組形狀   shape(a)   m n
數組大小   size(a)    mxn
數組下限   lbound(a)  1 1
數組上限   ubound(a)  m n
【派生類型】
!--------------------------------------------------------
TYPE[,訪問屬性說明::] 派生類型名
成員1類型說明
成員n類型說明
END TYPE [派生類型名]
!--------------------------------------------------------
TYPE是關鍵字,表示派生類型定義開始。訪問屬性說明關鍵字是PUBLIC或PRIVATE,默認值是PUBLIC,即訪問方式是共用的。PRIVATE表示該類型是專用的,這個關鍵字只有當TYPE塊寫在模塊說明部分中時,才允許使用。如果不是在模塊內定義的派生類型,不可使用PRTVATE。
例如
!--------------------------------------------------------
TYPE CLASS_TYPE                                                !年級_類
CHARACTER(LEN=50) :: DEPARTMENT, MAJOR      !系,專業(yè)
END TYPE CLASS_TYPE
TYPE SCORES_TYPE                                              !成績_類
INTEGER(1) :: MATH, PHYSICS, ENGLISH
END TYPE SCORES_TYPE
TYPE STUDENT_TYPE
SEQUENCE                                                        !按定義的順序儲存各個成員
INTEGER(4) :: NUMBER                                       !學號
TYPE(CLASS_TYPE) :: CLASS                              !班級_類(系,專業(yè))
CHARACTER(LEN=10) :: NAME, ADDRESS            !姓名,地址
TYPE(SCORES_TYPE) :: SCORES                         !分數_類
END TYPE STUDENT_TYPE
TYPE(STUDENT_TYPE),DIMENSION(40):: STUDENT  !學生數組(40)有類別
TYPE(STUDENT_TYPE)  Myself
!--------------------------------------------------------
其中:STUDENT(6)%SCORES%PHYSICS                             !第6個學生的物理成績,該類型成員值
初始化一個成員:STUDENT(666666, 'BWL', '2004', 'John', 'Str. 1', 100, 100, 100)   !該類型的值
用DATA初始化:DATA Myself/STUDENT(666666, '2004', 'BWL', 'John', 'Str. 1', 100, 100, 100)/
個別元素初始化:DATA Myself%NUMBER, Myself%ENGLISH/88888, 99/
顯示初始化:      TYPE(REPORT),PARAMETER :: SHE=STUDENT(0,'','','','',0,0,0)
◆結構構造函數(派生類型名)
ME%CLASS=CLASS_TYPE("2004","BWL")          !引用CLASS_TYPE的結構構造函數,進行賦值
SHE=STUDENT_TYPE(22222,ME%CLASS,'Sherry','Str. 2',SCORES_TYPE(60,60,60))
【算術運算】
單項運算:(例 -a)
2項運算:加(+),減(-),乘(*),除(/),乘方(**)
乘方按“先右后左”,其它按“先左后右”原則
運算的優(yōu)先順序::① 括號 > ② 函數 > ③ ** > ④ * / > ⑤ + -
【關系運算】優(yōu)先級低于【算術運算】
.GT.   >
.GE.   >=
.LT.   <
.LE.   <=
.EQ.   ==
.NE.   /=
【邏輯運算】優(yōu)先級低于【關系運算】
.AND.
.OR.
.NOT.   (單元素操作 .NOT.A)
.EQV.
.NEQV.
順序是:.NOT. > .AND. > .OR. > .EQV. 和 .NEQV.
【判斷IF構造】  IF構造中的每一個塊,都可以嵌入一個完整的構造。但不可跨越2個塊。嵌套IF需要加構造名。
!--------------------------------------------------------
[構造名:]  IF (邏輯) THEN
...
ELSE IF (邏輯) THEN   [構造名]
...
ELSE   [構造名]
...
END IF   [構造名]
!--------------------------------------------------------
塊IF的執(zhí)行步驟為:先執(zhí)行塊IF語句,求出邏輯表達式的值,如果此值為“真”,則將流程轉到then塊。執(zhí)行then塊中各個執(zhí)行語句。執(zhí)行完then塊后跳過ELSE語句和else塊,流程轉到END IF語句處。如果邏輯表達式的值為“假”,則流程跳過then塊,轉到ELSE語句及else塊。執(zhí)行完else塊以后流程轉到END IF語句。
【GOTO循環(huán)】慎用!
!--------------------------------------------------------
GOTO (語句標號)
!--------------------------------------------------------
【DO循環(huán)】
!--------------------------------------------------------
[構造名:]  DO [[標號][,]] 循環(huán)變量=初值式,終值式[,增量式]
...
END DO [構造名]
!--------------------------------------------------------
循環(huán)次數可以從循環(huán)初值、終值和步長計算出來:次數=INT((終值-初值+增量)/增量)
例:對于DO I=1.5,3.6,1.2 不要根據INT((3.6-1.5+1.2)/1.2)=2而認為循環(huán)次數為2,而應當先將實型量轉化為整型量,即變成相當的循環(huán)語句 DO I=1,3,1 其循環(huán)次數為3次而不是2次。
例:對于DO X=1.5,3.6,1.2 由于循環(huán)變量不是整型的而是實型的,它的循環(huán)次數為2次。X取值分別是1.5,2.7。
◆隱DO循環(huán)只能作為輸入輸出表的一部分出現
(I/O列表,循環(huán)變量名=初值,終值,增值)
例如:  READ *,(VALUE(I),I=1,20)
表示讀入VALUE(1),VALUE(2),…,VALUE(20)的值。
WRITE(*,*) (A,B,N=1,5)
表示在當前設備用默認格式重復輸出A、B的值5次。
隱DO表可以嵌套,
例如:PRINT *, ((A(I,J), I=1,3), J=1,3)
◆無循環(huán)變量的DO構造
!--------------------------------------------------------
[構造名:] DO
...
END DO [構造名]
!--------------------------------------------------------
◆跳出循環(huán)方法:
EXIT [DO構造名]
CYCLE [DO構造名]
沒有構造名,則默認跳出為最內層的循環(huán)
可以用IF語句進行判斷:
!--------------------------------------------------------
[構造名:] DO
...
IF(邏輯表達式) Exit/CYCLE
...
END DO [構造名]
!--------------------------------------------------------
◆DO WHILE 當型循環(huán)
!--------------------------------------------------------
[構造名:] DO WHILE (邏輯表達式)
...
END DO [構造名]
!--------------------------------------------------------
【多重選擇CASE構造】
!--------------------------------------------------------
[構造名:]  SELECT CASE(case表達式)
CASE(case選擇符) [構造名]
...
[CASE DEFAULT [構造名]
...
END SELECT [構造名]
!--------------------------------------------------------
程序執(zhí)行時,CASE構造的控制機制是:(1)控制進入CASE構造后,先計算情況表達式的值;(2)如果第一個CASE語句選擇符值與情況表達式值相等則執(zhí)行語句塊1,轉出口;(3)如第一個選擇符值不為情況表達式的值,再查下一個CASE語句的選擇符值,滿足執(zhí)行語句塊2,轉出口,不滿足再查下一個CASE語句的選擇符值,直至全部情況選擇符值都檢查完;(4)如果全部情況選擇符值都不符情況表達式的值,且又有CASE DEFAULT語句,則執(zhí)行該語句后的DEFAULT塊,否則直接轉出口。
其中,case表達式是整型、字符型或邏輯型表達式,不能是實型和復型表達式。
(值表)                 表示等于該值,各值之間用逗號分開
(下界:)                表示大于或等于該值
(:上界)                表示小于或等于該值
(下界: 上界)         表示在這兩個值之間 (包括等于)
【READ,WRITE 輸入輸出】
READ *, a, b
READ (*,*) a, b
PRINT *, 'a=' , a , 'b=' , b
WRITE *,
WRITE (*,*)
WRITE (*,/)
Fortran支持兩種文件的訪問方式(順序訪問和直接訪問)和三種文件的結構(有格式、無格式、二進制)。順序訪問或直接訪問可以用于這三種結構的文件進行的每一種。因此,共有6種文件類型。
◆格式化文件,記錄數據內容的記錄是以ASCII字符的方式存在的,每一條記錄是以ASCII碼中的回車符CR(0D)加換行符LF(0A)來結束的,可以用文本編輯軟件打開格式文件并直接看懂其內容。OPEN語句默認的打開文件是格式文件
◆無格式文件,由一系列物理塊組成的記錄組成,所存儲的記錄序列的存放方式與其在內存中的存放非常相似,所以在輸入輸出時幾乎不需作轉化。
◆二進制文件,是處理最快、最簡潔的一種文件,也是最緊湊的存儲格式,適合于大批量數據的存儲。在程序中可以用帶有FORM=’BINARY’選項的OPEN語句來打開或建立二進制文件。
◆順序文件,數據必須一個記錄接一個記錄地按順序被訪問。也就是說,程序中要讀寫第N條記錄時,必須至少已對前面的N-1記錄進行過讀操作。
◆直接訪問文件,記錄可以以任意順序進行讀寫操作。文件中的記錄從1開始連續(xù)編號,記錄的長度是通過OPEN語句中的RECL選項來描述的。直接文件中的記錄是通過指定要訪問的記錄號來實現的。因此,如果想要實現數據的隨機訪問可以使用直接訪問文件。直接文件應用的一個最常見的實例就是數據庫。直接文件中的每個記錄的長度必須相等。用直接方式建立的文件可以使用順序方式打開進行讀操作。用順序方式建立的文件,只要記錄長度相等,也可以用直接方式打開進行讀操作。
!-----------------------------------------------------------------------------------------------
◆格式化順序文件(默認)
—個格式化文件是一個由按順序寫到文件中的有格式記錄序列組成的,當要對文件進行讀操作時,讀取的順序就是記錄在文件中的存放順序。文件中記錄的長度不一定相同,記錄也可以是空的。記錄用回車符(0DH)和換行符(0AH)分開。
◆格式化直接文件
在格式化直接文件中,所有記錄的長度都相同并且可以以任意順序讀寫。記錄的長度由OPEN語句中的RECL=選項指定,該長度應該大于或等于最長的記錄中的字節(jié)數。CR和LF是分隔符,不包括在RECL中。一旦某個直接訪問記錄被寫入就不能再刪除它,但可以覆蓋這個記錄。在輸出到一個格式化直接文件時如果數據沒有占滿一個記錄,則編譯系統(tǒng)將在剩下的位置上補以空格,保證文件只包含長度相同的完整的記錄。從文件中讀數據時,當I/O列表或格式描述符中要讀取的數據多于記錄中的數據時,編譯器也會以空格填充未讀數據的變量??梢酝ㄟ^在打開文件的OPEN語句中設置PAD=NO來避免填補空格,此時輸入記錄必須有和輸入列表和格式描述符所要求的一樣多的數據,否則會產生錯誤。PAD=NO對輸出沒有影響。
◆無格式順序文件
無格式順序文件中記錄的長度可以不同,文件以130或少于130字節(jié)為一個物理塊進行組織。每個物理塊包含著輸入到文件中的數據(最多128字節(jié)),編譯系統(tǒng)在物理塊之間加入兩個1字節(jié)長的長度值以說明每個記錄的起始和結束位置。一個邏輯記錄包含一個或多個物理塊,其大小可在程序中指定,編譯系統(tǒng)會相應地使用需要數量的物理塊。
◆無格式直接文件
無格式直接文件是一系列非格式的記錄,可以以任意順序讀寫記錄。記錄的長度都相同,由OPEN語句中的RECL=選項指定。沒有字節(jié)分隔符或其它表示記錄結構的字節(jié)。
◆ 二進制順序文件
二進制順序文件是一系列按同一順序和同樣二進制數個數來讀寫的值。其中沒有記錄邊界,沒有說明文件結構的特殊字節(jié)。數據讀寫時長度和形式都不改變。數據記錄的長度可以不等。對于任何輸入輸出數據,內存中的字節(jié)序列就是文件中的字節(jié)序列。二進制順序文件是處理最簡潔、速度最快的文件。
◆二進制直接文件
二進制直接文件存儲一系列二進制數記錄,它們可以按任何順序訪問。與二進制順序文件不同的是,這些記錄的長度是相等的,由OPEN語句中的RECL=選項指定。在二進制直接文件中可以寫入部分記錄,記錄中末使用的部分將以未定義數據填充。
在二進制直接文件中可以只使用一條讀或寫語句來讀寫到多于一條的記錄,而這樣的操作在無格式直接文件中將引發(fā)錯誤。在無格式直接文件中所能進行的一切操作在二進制直接文件中都是合法的,另外,在二進制直接文件中提供了一種不依賴于填充二進制數據O的對記錄的某部分進行讀寫操作的功能。二進制直接文件是所有6類文件中使用最靈活的一類。
◆WRITE語句
!--------------------------------------------------------
WRITE ({[UNIT=]單元|*}[,{[FMT=]格式說明符|[NML=]名稱列表組名|*}][,REC=記錄號][,IOSTAT=狀態(tài)變量名][,ERR=錯誤標號]) [I/O列表]
!--------------------------------------------------------
如果省略UNIT=,則第一個參數必須是“單元”。如果省略了FMT=或NML=,則格式說明符或名稱列表組名必須是第二個參數(格式化文件)。其后的幾項參數次序可以任意。
單元:外部文件時是一個指定設備號的整型表達式,內部文件時是一個字符串、變量、數組、數組元素或非字符數組。
格式說明符:對于格式寫操作是必需的,非格式寫操作時不能有。
名稱列表組名:如果它被說明,則I/O列表必須省略。
記錄號:一個整數表達式指定要被寫的記錄序號,僅用于直接文件。文件中的第一條記錄的記錄號為1,缺省值為文件中的當前位置。
狀態(tài)變量名:一個整型變量、數組元素。當無錯誤時,它返回值為0,有錯誤時則返回錯誤信息號。
錯誤標號:在同一個程序單位中的一個可執(zhí)行語句的標號。如果指定了它,I/O錯誤將把控制傳遞給此標號處的語句,省略時取決于狀態(tài)變量名的存在與否。
◆READ語句
!--------------------------------------------------------
READ({[UNIT=]單元|*}[,{[FMT=]格式說明符|[NML=]名稱列表組名|*}] [,REC=記錄號][,IOSTAT=狀態(tài)變量名][,ERR=錯誤標號][,END=文件結束標號][,EOR=記錄結束標號]) [I/O列表]
!--------------------------------------------------------
文件結束標號:讀到文件結束記錄時把控制傳遞給標號處的語句。
記錄結束標號:讀完一個記錄時把控制傳遞給標號處的語句。
◆I/O列表       在內存中的變量和外部設備及外部文件之間傳遞數據
格式化I/O       (見Format語句)
直接列表I/O    一系列由逗號或空格分開的值,分隔符(逗號,斜杠或空格),斜杠(/)將結束輸入,逗號間為空值
名稱列表I/O    NAMELIST  /名稱列表組名/變量列表[[,]/組名/變量列表]...
例如:名稱列表輸出:WRITE(*,[NML=]namelist)
◆OPEN語句詳細說明
OPEN([UNIT=]unit[,ACCESS=access][,ACTION=action][,BLANK=blanks][,BLOCKSIZE=blocksize][,CARRIAGECONTROL=carriagecontrol][,DELIM=delim][,ERR=err][,FILE=file][,FORM=form][,IOFOCUS=iofocus][,IOSTAT=iostat][,PAD=pad][,POSITION=position][,RECL=recl][,SHARE=share][,STATUS=status])
其中的各項參數的意義及取值如下:
1) UNIT:設備號說明。unit是大于或等于0的正整數,設備號說明是OPEN語句的第—項時可以省略"UNIT="
2) ACCESS:存取方式說明。access是字符串表達式:
APPEND         追加方式
SEQUENTIAL  順序訪問方式
DIRECT         直接訪問方式
當省略此說明項時為順序訪問方式。
3) ACTION:描述文件的讀寫屬性。action是字符串表達式:
READ       文件為只讀方式打開
WRITE      文件為只寫方式打開
READWRITE  文件為可讀寫方式打開
當省略此說明項時,文件打開順序:READWRITE->READ->WRITE。
4) BLANK:說明數據格式輸入字段中空格的含義。blank是字符串表達式:
NULL       空格忽略不計,相當于在格式描述符中的BN編輯符
ZERO       空格處理成數字0,相當于BZ編輯符
當省略此說明項時為ZERO。此說明只能用于格式輸入。
5) BLOCKSIZE:指定以字節(jié)為單位的設備緩存的大小,默認值為一4字節(jié)整數。
6) CARRIAGECONTROL:指明處理文件中的第一個字符的方式,其值為字符串表達式:
Fortran    對第一個字符作一般的Fortran解釋
LIST       指出在文件的每兩個記錄之間有—個空格
默認狀態(tài)下,對于連接到打印機和顯示器這樣的設備,設置值為Fortran,對于連接到文件的設備,
設置值為LIST。當FORM被設成UNFORMATTED和BINARY時,其值被忽略。
7) DELIM:指明分隔直接列表或格式化名稱列表記錄的方式,其值為字符串表達式:
APOSTROPHE 用單撇號(')分隔
QUOTE      用雙撇號(")分隔
NONE       不用分隔符
如果在OPEN語句中設置了分隔符,則在文件中的單撇號和雙撇號都是成對出現的。
8) ERR:出錯處理說明。其值是同一程序中的一條語句的標號,當OPEN語句執(zhí)行出錯時執(zhí)行此語句。
如果省略該項,則出錯時給出出錯信息并終止運行。
9) FILE:文件名。是一字符串表達式,可以是空、合法的數據文件名字、設備名字或是作為內部文件的變量。
在WinNT/9x中允許使用長度大于8的文件名和長度大于3的文件擴展名。省略此項時,編譯器將自動產生
一個文件名唯一的臨時文件,這個臨時文件將在結束運行或與文件連接的設備關閉后被刪除掉。
10) FORM:記錄格式說明。form是字符串表達式:
FORMATTED    記錄按有格式存放。
UNFORMATTED  記錄按無格式存放。
當省略此說明項時為:對順序文件是有格式的;對直接文件是無格式的。
11) IOFUS:指出一個新Quickwin子窗口是否為活動窗口,其值為邏輯值。缺省值為真。
12) IOSTAT:出錯狀態(tài)說明。iostat是—個缺省長度為4的整形變量。當執(zhí)行此OPEN語句時系統(tǒng)給變量賦值:
零          沒有發(fā)生錯誤
負數       文件結尾
正數       發(fā)生錯誤,其值視具體計算機系統(tǒng)而定
若省略該項則沒有此功能。
13) PAD:從格式化文件中記錄的數據少于要讀取的數據時,是否用空格來填充沒有從記錄中讀到數據的變量。
pad是字符串表達式:
YES        填充(默認值)
NO         不填充
14) POSITION:指定打開順序文件的訪問位置,position是字符串表達式:
ASIA       已被連接的文件的訪問位置是固定的,未被連接的文件的訪問位置是文件的開始處。
REWIND     把文件的訪問位置定在文件的開始處(文件己存在)。
APPEND     把文件的訪問位置定在文件的末尾處(文件己存在)。
對于一個新文件,文件的訪問位置總是被定在文件的開始處。
15) RECL:記錄長度(單位為字節(jié))說明。recl是指定的正整型量或算術表達式,用來指定直接文件中的
每條記錄的字節(jié)數,或順序文件中的記錄的最大長度。
16) SHARE:指明當文件打開時是否實現文件的鎖定。share是字符串表達式:
DENYRW     動態(tài)讀寫模式。不允許其他的進程打開這個文件。
DENYWR     動態(tài)寫模式。不允許其他的進程以寫的方式打開這個文件。
DENYRD     動態(tài)讀模式。不允許其他的進程以讀的方式打開這個文件。
DENYNONE   默認的非動態(tài)模式。允許其他的進程打開這個文件。
17) STATUS:文件狀態(tài)說明。status是字符串表達式:
OLD        表示指定的文件是已經存在的老文件。
NEW        表示指定的文件尚不存在。
SCRATCH    表示與設備號相連接的文件在關閉時將被自動刪除。該文件為程序運行過程的一個臨時文件。
REPLACE    表示替換一個有相同名字的文件,如果沒有同名的文件存在,將產生一個新文件。
UNKNOWN    表示文件可以是已存在的或不存在的。系統(tǒng)打開文件狀態(tài)的次序為:OLO->NEW->創(chuàng)建新文件。若省略該項時默認的狀態(tài)為UNKNOWN。
◆CLOSE語句
CLOSE語句解除設備號與文件的連接,又稱關閉文件。它的一般形式為:
CLOSE([UNIT=]unit[,ERR=err][,IOSTAT=iostat][,STATUS|DISPOSE|DISP=status])
其中除STATUS以外的各項參數的意義及取值與OPEN語句中的相同。STATUS是文件關閉后狀態(tài)說明,其值是一字符串:
DELETE               與設備連接的文件不保留,被刪除
KEEP(或SAVE)      與設備號連接的文件保留下來不被刪除
PRINT                  將文件遞交給打印機打印并被保留(僅對順序文件)
PRINT/DELETE      將文件遞交給打印機后被刪除
SUBMIT               插入一個進程以執(zhí)行文件
SUBMIT/DELETE   插入一個進程以執(zhí)行文件,當插入完成后被刪除
默認設置將刪除帶有SCRATCH屬性的臨時文件,對其它文件為KEEP。
◆文件指針定位語句
REWIND語句:
稱為反繞語句,它使指定設備號的文件指針指向文件的開頭,通常用于順序文件的操作。它的一般形式為:
REWIND {unit|([UNIT=]unit[,ERR=err][,IOSTAT=iostat])
BACKSPACE語句:
稱為回退語句,它使指定設備號的文件指針退回一個記錄位置,一般用于順序文件。它的一般形式為:
BACKSPACE{unit|([UNIT=]unit[,ERR=err][,IOSTAT=iostat])
除了以下幾種情況外,使用BACKSPACE語句正好使文件的指針向前移動一條記錄:本條記錄前再沒有記錄時文件指針的位置不變;文件指針的位置在一條記錄的中間時,文件指針移到本條記錄的開始處;本記錄的前—記錄是文件結束記錄時,文件指針移到文件結束記錄之前。
◆內部文件
read(str,*) name                            !從str字符串中讀取名字
read(str,*)  i,j,k                             !從str字符串中讀取數字i,j,k, zB.atr=" 1 2 3",則i=1,j=2,k=3
write(str,'("Test", I4.4, "dat")') 15    !str="Test0015.txt"
【FORMAT語句】I/O操作方式之一
!--------------------------------------------------------
WRITE(*,100) Number
100  Format(I4)                                !FORMAT語句標號
!--------------------------------------------------------
ASSIGN 100 TO Mystyle
WRITE(*, Mystyle) Number
100  Format(I4)                                !整型變量名
!--------------------------------------------------------
Mystyle='(I4)'                                   !字符表達式或變量
WRITE(*,Mystyle) Number
!--------------------------------------------------------
WRITE(*,'(I4)' ) Number                     !格式列表
!--------------------------------------------------------
CHARACTER(6) array(3)
DATA array/'(I5’, ',I4', ',A16) '/           !也可以用數組
WRITE(*,array) I,I, "Very good!"
!--------------------------------------------------------
可重復的編輯符
◆I編輯符    Iw[.m]  w指定字段寬度,m表示需要輸出的最少數字位數,不足添0
◆F編輯符   Fw.d     w指定字段寬度,d是輸出數據的小數位數
◆E編輯符   Ew.d     w仍為字段寬度,d為以指數形式出現的數據的數字部分的小數位數  w≥d+7
◆G編輯符  Gw.d     絕對值小于0.1或大于10**d的數用E格式,否則用F格式,有效位數為d位
◆D編輯符  Dw.d    雙精度
◆L編輯符   Lw       值為“真”的,在輸出一個字母T,“假”則以一個字母F表示,w>1時左邊補空格
◆A編輯符  A[w]     字符串的長度小于w,則左邊補空格,不指定字段寬度w則按字符變量的的長度截取
◆B、O、Z編輯符    二進制(B)、八進制(O)和十六進制(Z)     Bw[.m],Ow[.m],Zw[.m]
◆EN、ES編輯符     工程計數法(EN)和科學計數法(ES)         ENw.d[Ee]   ESw.d[Ee]
下面的為不可重復的編輯符
◆引號"編輯符         ' '和" "。例如WRITE(*, '('I''m a boy')') 或 WRITE(*, '("I 'm a boy")')
◆H編輯符              nH字符串, 例如WRITE(*,'(9HI 'm a boy)')
◆X編輯符              輸出時產生空格
◆斜杠/編輯符         從下一行開始輸出下一個記錄,用n個連續(xù)的斜杠,可以達到輸出n-1個空行的效果
斜杠只表示結束本行輸出,當掃描到右括號而列表中已無數據項時,輸出即告結束。
◆\和$編輯符          輸出一個記錄行后取消回車符,例如Write(*,'("Please Enter Your Age =",$)')
◆T編輯符              Tn,TLn,TRn  分別為第n個字符,左移和右移n個字符
◆:編輯符               當I/O列表中沒有更多的數據頂時,冒號(:)編輯符使格式控制結束
◆P編輯符              改變小數點位置
◆S編輯符             SP輸出正號,SS不輸出
◆BN,BZ編輯符     BN忽略數字輸入字段中內嵌和后續(xù)空格,BZ使開頭、結尾空格和分散空格為零
空格式format(),用于WRITE中表示回車換行,READ中表示跳過相鄰的下一個記錄
“輸入數據自帶小數點優(yōu)先”原則,F、E、EN、ES、G和D編輯下的輸入中,輸入區(qū)域的顯式小數點將覆蓋編輯描述符中對小數點位置的指定。例如,READ(*,’(F4.2)’) x當輸入123.4時,x=123.4而非按格式指定的23.40。
【一些說明】
◆Fortran允許使用的字符如下:
英文字母   :A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
阿拉伯數字 :0 1 2 3 4 5 6 7 8 9
特殊符號   :空格 = + - * / ( ) , . ': " ! % & ; < > $ ? _ (F90中新增的字符)
◆F90的語句順序,圖片
◆F90的運算優(yōu)先級,圖片◆F90的常用函數,圖片
◆聲明時用::表示聲明的變量的屬性已經聲明完全, 左邊為變量的類型、種別、屬性,右邊為變量
◆整數相除的商也是整數:5/2=2 , 1/2=0
◆在判斷兩個實數是否相等時,最好判斷|a-b|< ε
◆取得隨機數的方法:
!--------------------------------------------------------
CALL RANDOM_SEED
CALL RANDOM_NUMBER(a)     ! a=0~1
!--------------------------------------------------------
【一些建議】
◆開始編制一個程序前,做好前期準備,畫流程圖,或者用偽代碼描述整個過程的算法。
◆用Program語句,并且給其命名。
◆用IMPLICT NONE語句,并自己聲明所需要的每一個變量,避免出錯。
◆對于多重循環(huán)采用標簽
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[《CC 學習指南》語法篇(零基礎入門到精通)]-百度傳課
《程序設計基礎》(C++)教學大綱
Step By Step(Lua表達式和語句)(轉)
VisualBasic語句大全及詳解
C語言知識點
VB基礎教程
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服