ChinaNet

标题: FORTRAN基本语法 [打印本页]

作者: zhuer91    时间: 2015-4-8 10:17
标题: FORTRAN基本语法
Fortran之基本語法
因為市面上有不少有關Fortran語法之書,故本節中僅將Fortran中常用與較重要的規定與
語法加以說明:

a、Fortran 之基本規定:

b、變數(Variable)

c、運算符號與內定函數:

d、控制結構:

e、輸入與輸出結構:

f、選擇性結構:

g、循環性(回圈)結構:

h、函數(function)與副程式(subroutine)結構:


a、Fortran 之基本規定:

------------------------------------------------------------------------------
--
在Fortran的規定中,程式的開始需先宣告變數形式,接著才能用這些變數來寫程式內容,
再整個程式中的第一行必須空白,除非鍵入英文字母c或*用以表示那一列為說明項而非實
際之計算式子。第二行至第五行為位址行,可用數字標示其位址,用以執行程式時控制之
用。第六行用以填入一個非零的數字或字母表示連結上一列的式子。 第7行至72行則為程
式主體之所在,若不小心在72行之後鍵入程式Fortran將不于理會。再程式的最後一列用
end命令告知程式終了。

------------------------------------------------------------------------------
--

b、變數(Variable)
Fortran語法中的變數相當於函數上變數,但其種類則更多,舉凡複數(complex)、整數
(integer)、實數(real)、邏輯(logical)和字串(character)等等。對於變數的規
定是變數的第一個字母為英文字母,其長度最長為6個字,除剛剛說的第一個字之外,其餘
的可為數字或字母,以下為幾個簡單範例: Integer count,pg1
real time,po2p

------------------------------------------------------------------------------
--

c、運算符號與內定函數:
Fortran 基本的運算符號如下:
+ 加法 ;- 減法 ; * 乘法 ;/ 除法** 平方 ;**(n) n次方除了上列之基本運算
符號之外,數值計算上常用之函數如三角等等亦以寫成內定含式,常用的以下幾項:

log 對數函數;

exp 指數函數;

sin、cos、tan、cot、sec和csc等三角函數;

abs 絕對值;

asin、acos、atan、acot、asec和acsc等反三角函數

转自52MC论坛。


作者: zhuer91    时间: 2015-4-8 10:18
結構化Fortran有一些控制的結構,關係控制即是其中之一種,用以比較兩變數之間關係,
包含有:

.lt. 表示小於  

.gt. 表示大於  

.eq. 表示等於  

.le. 表示小於或等於

.ge. 表示大於或等於

.ne. 表示不等於

另一種重要的控制為邏輯控制,包含有:

.not. .not. p => 若p為非真則為真

.and. p .and. q => p和q為真則為真

.or. p .or. q => p或q其一為真則為真

.eqv. p .eqv. q => p和q同為真或同為非真則為真  

.neqv. p .neqv. q => p或q之中一為真一為非真則為真


------------------------------------------------------------------------------
--

e、輸入與輸出結構:
> Fortran 經常會有一些數值需要輸入或計算的值需要輸出,這時 Fortran 便提供了一些
格式碼好讓使用者將欲輸入或輸出的數值針對其變數的特性作較佳的安排設計,茲舉例如
下,其中輸出之資料格式完全相同:

a、write(*,10) i,j,k
     10 format (1x,2I5,I3)
b、assign 10 to ifmt
     10 format (1x,2I5,I3)
     write (*,ifmt) i,j,k
c、write (*,'(1x,2I5,I3)') i,j,k
d、character*11 fmtch
        fmtch='(1x,2I5,I3)'
        write (*,fmtch) i,j,k

其中X表示空格之意,1x即是空一格, write為輸出的指令,若改為 read 則為輸入指令,
I為整數的格式碼, 2I5 表示輸出的總位數為五,而這樣的格式重複兩次,其餘尚有不同
之各種格式碼,常用的有:  
F 格式碼,用於實數變數,其一般型態為 rFw.d ,其中F表實數,r為重複次數,w為總位
數,而d為小數位數。  
E 格式碼,為指數格式的輸出,其一般型態為 rEw.d ,其中E表示輸出型態為指數,其餘
的r、w和d的定義則和F格式碼相同。  
D 格式碼,用於倍準度實數的輸出入,基本型態為 rDw.d,使用規則與 E 格式碼則完全相
同。  
G 格式碼,其型態與 E 或 F 格式碼相同,但其功用則不同,他是用在當我們無法預知實
數的大小值時,使用 G 格式碼後,電腦會自動視數值的大小將 G 格式碼轉為 E 格式碼或
F 格式碼。  

------------------------------------------------------------------------------
--

f、選擇性結構:
當有兩組或更多組程式中之一組要跑但卻未能確定時,則必須有某種選擇性的控制程式執
行路線,這樣的語法為選擇性控制,在Fortran上為 If 語法,其架構大致如下:  
  If (logical-expression)then
    statement-1
    .
    .
   statement-n
  else
    statement-1'
   .
    .
    statement-n'
  endif  

上述的意思是If中的邏輯為真時則執行1至n這一組程式,不然則執行1'至n'這一組程式。
若將一組程式簡稱為block,當上述的邏輯判斷較為複雜時,常無法在一個條件中表達完成
,故可有以下之另外兩種形式:第一種為  
pS pi?z X   

  If (logical-expression)then
    block-1
    If (logical-expression)then
    block-2
    endif
    block-3
  endif  

第二種為  
  If (logical-expression-1)then
    block-1
  elseIf (logical-expression-2)then
    block-2
  elseif  (logical-expression-3)then
    block-3
  endif


------------------------------------------------------------------------------
--
循環性(回圈)結構: 在數值上常會有收斂值的問題或有同樣的程式需執行很多次的情形
,這時都需要用到回圈的結構,其基本的語法與結構如下:一、  
    do n1 n2=n3,n4,n5
       block
n1 continue

二、  
    do n2=n3,n4,n5
       block
    enddo

其中n1表示回圈執行該循環重新跑的位址,n2為控制的主要變數,n3為n2的起始值,n4為
n2的極限值,也就是說當n2等於n4時回圈及停止,n5為每執行一次回圈n2所需做的增量,
其中n5可不設定而由Fortran內定為1,或在block中執行某程式將n2做一定量的修正。另有
一種融合選擇性結構和回圈結構的語法如下:  
  while (logical expression) do
    statement 1
    .
    .
    statement n
  endwhile

或是  
   
  dowhile ( logical expression )  
    statement 1
    .
    .
    statement n
  enddo

作者: zhuer91    时间: 2015-4-8 10:18
g、函數(function)與副程式(subroutine)結構:
在數值計算上重複多次的計算亦可獨立寫成一個函數或副程式結構,而當主程式需要時即
可隨時叫用,這樣的一組程式稱之為函數或副程式,函數或副程式在形式上亦需具備有類
似主程式的架構,也就是說需有程式名稱、變數宣告等等,其主要結構如下:  
  function fun-name(n1,n2,....)
  宣告變數
  statement 1
  .
  .
  fun-name=......
  .
  return
  end   


  subroutine subroutine-name(n1,n2,....)
  宣告變數
  statement 1
   .
   .
  statement n
  .
   return
   end

上述中n1、n2等等為變數,一般函數或副程式寫在主程式的後面,在主程式中叫用函數或
副程式時用call的指令,形式如下:  
  call fun-name(n1,n2,...)
  call subroutine-name(n1,n2,....)

其中n1,n2等變數在主程式中和函數程式中或副程式中的名稱可以不同,但相對應的變數必
須有相同的變數定義,而函數和副程式不同的地方在於函數本身代表一個函數值,在經叫
用函數之後僅可得回一個函數值,但副程式中的變數是可以傳回主程式的,也就是說經副
程式可計算多個數值之後傳回主程式中。也就因為函數本身代表一個數值,所以在主程式
中函數必須宣告他的定義。




欢迎光临 ChinaNet (http://www.nuclear.net.cn/) Powered by Discuz! X3.1