用戶:Evesiesta/Fortran

  • Fortran對大小寫不敏感
  • &連接因過長而換行的兩個半句
  • 可用數字作為語句開頭標號(一句一號不重複)
  •  ! C 註釋
  • 程序開頭可用PROGRAM為程序命名,名字第一個字符必須為字母
  • 可用STOP停止執行程序,若加數字或用單引號包括的字符,則結束時打印(可選)
  • 保留字段及常量大寫,變量名及過程名小寫(可選,但風格需保持一致)
  • 變量名由字數字及下劃線任意組合,但首字符必須為字母
  • 整型數無小數點
  • 默認式定義變量類型:以ijklm開頭的變量為整型變量,其他字母開頭的為實型變量
  • 無變量類型默認情況下為字符型
  • 顯式定義變量類型:
    INTEGER :: var1 [,var2,var3]
    REAL :: var1 [,var2,var3]
    
     :: 可省略)
  • CHARACTER (len=<len>) :: var1 [,var2,var3]
    
    聲明所有字符變量(len可選,缺省則默認為1)
  • <type>,PARAMETER :: value
    
    聲明常數(保持常數取值一致、精度一致)
  • 常見算數運算符號:+-*/****為指數運算)
  • 整型運算時計算機會去除小數部分
  • 一般運算順序:
    1. 首先做圓括號內的計算,且內層括號比外層括號優先
    2. 再從右到左做指數運算。
    3. 從左到右做乘法和除法運算。
    4. 從左到右做加法和減法運算。
  • 可用括號調整運算順序
  • 小心處理混合模式計算
  • 不能對負數進行實數冪運算
  • IMPLICIT NONE強制所有變量必須顯式聲明,否則報錯(通常放於類型聲明語句前)
  • ==為等值關係運算符,=為賦值運算符
  • 關係運算符在所有算數運算符後計算
  • 若比較整型數與實型數,則在比較執行前整型數將被轉換為實型數再比較
  • 數值與字符無法比較
  • 邏輯運算符有5個:.AND..OR..EQV..NEQV..NOT. .EQV. 為邏輯等價)
  • 如果邏輯變量出現在以.READ.開頭的語句中,那麼相應的輸入值必須是.TRUE..FALSE.或以TF開頭的一個或一組字符。如果輸入值的第一個值是.TRUE.或以T開頭的字符,那麼邏輯變量就會被設定為.TRUE.。如果輸入值的第一個值是.FALSE.F開頭的字符,那麼邏輯變量就會被設定為.FALSE.。輸入值以任何其他字符開頭都會產生運行時錯誤。如果邏輯變量或表達式出現在以WRITE開頭的語句中,那麼如果變量值為.TRUE.,則相應的輸出值將為單個字符T,如果變量值為.FALSE.,則相應的輸出值為F
  • IF語句正確寫法:
    IF (<term>) THEN
    !执行语句
    END IF
    
  • END IF不能有行號
  • IF的另一種寫法:
    IF (<term>) <执行语句>
    
  • SELECT CASE用法:
    [name: ] SELECT CASE (<case_expr>)
    CASE (<term1>) [name]
    	!语句
    CASE (<term2>) [name]
    	!语句
    CASE DEFAULT [name]
    	!语句
    END SELECT [name]
    
    (在CASE結構中總包含CASE DEFAULT來捕捉缺省情況)
  • 當循環:
    1. DO循環:
      DO
      	!...
          IF (<logical_expr>) EXIT
          !...
      END DO
      
      DOEND DO之間的語句重複執行直至term為真執行EXIT,而後跳至END DO後第一句。DO循環可包括多個EXIT,每個EXIT通常是IF語句的一部分
    2. DO WHILE循環:
      DO WHILE (<logical_expr>)
      	!语句
      END DO
      
      該語句將重複執行被包括的語句直至邏輯表達式為假,而後將跳至END DO後第一句
  • 迭代或計數循環:
    DO index=istart, iend, incr
    	!语句
    END DO
    
    incr若缺省則默認為1。計數循環遵循以下規則:
    1. istartiendincr可為常量、變量或表達式。若為變量或表達式,其在循環開始前計算並控制循環
    2. 循環開始時,程序將istart的值賦予index,若index*incr≤iend*incr則開始循環
    3. 一次循環後程序將自動執行index = index+incrindex*incr≤iend*incr則再次循環
    • 因此,某計數循環次數可由下列公式計算:
  • CYCLE語句在循環體內執行,則該循環將立即停止並回到循環開頭,此後若控制變量仍允許,循環將再次開始。
  • 給每個循環命名,便於在嵌套循環中調試
  • 兩個嵌套的DO循環不能共用一套控制變量
  • CYCLEEXIT位於一組未命名的嵌套循環中,則它們將會對距自己最近的一層循環起作用
  • 一個循環必須完全嵌套於另一循環中
  • 字符賦值時若字符表達式短於所賦值的字符變量,則用空格補全;若字符表達式長於所賦值的字符變量,則去除多餘部分
  • 子串提取:若初始時
    CHARACTER (len=8) :: a,b,c
    a = 'ABCDEFGHIJ‘
    b = '12345678'
    c = a (5:7)
    b (7:8) = a (2:6)
    
    則:
    1. a被賦值後取前8個字符,則a的值為ABCDEFGH
    2. b被賦值為12345678
    3. c = a (5:7),賦值給c後還差5個字符,用空格補全後為EFG
    4. b (7:8) = a (2:6),由於b (7:8)只有兩字符,所以只使用了a (2:6)的兩個字符,因此b的值為123456BC
  • 連接操作符//可以將多個字符串或子串合併成一個大字符串
  • 兩字符串比較時按其ASCII字符集比較
  • 基本I/O)當程序從左至右地移過WHITE語句的變量列表時,它也從左到右掃描對應格式。但是格式中內容的使用順序可能由於包含重複次數和括號改變。格式的掃描規則如下:
    1. 從左至右掃描格式
    2. 如果一個格式描述符帶有一個與之相關的重複次數,則在使用下一個描述符之前該描述符將按重複次數中指定的次數使用
    3. 如果包含在括號內的一組格式描述符帶有與之相關的重複次數,那麼在使用下一個描述符之前,整組描述符將按重複次數中指定的次數使用
    4. 如果WHITE語句在格式結束前用完了所有變量,格式的使用要麼停在第一個沒有對應變量的格式描述符外,要麼停在格式的結尾處,無論哪種先出現
    5. 如果在WHITE語句數值輸出完前,掃描到了格式的結尾處,程序就將當前的輸出緩衝區發送到打印機,然後在格式中最右邊不帶重複次數的開始括號處重新開始
  • 數組下標類型為「INTEGER」,常數或變量都可作為下標
  • 數組的聲明實例:
    REAL, DIMENSION (<num>) :: NAME
    !或
    REAL :: NAME (<num>)
    
    這表明一個有16個元素的名為「NMAE」的數組,且數組中數據類型為REAL
  • 數組的維度寬度
  • 數組構造器實例:
    [1, 2, 3, 4, 5]
    !或
    (/ 1, 2, 3, 4, 5 /)
    
  • 數組元素也是普通變量。可用於算數或邏輯表達式,計算結果也可賦給數組元素
  • 數組元素在使用前也需初始化
  • 下標三元數組:
    !若
    INTEGER, DIMENSION (10) :: array = [1. 2. 3. 4. 5. 6. 7. 8. 9. 10]
    !则
    array (1:10:2) = [1, 3, 5, 7, 9]