Fortran select case結構


select case 語句允許一個變數,列表進行相等測試。每個值被稱為一個情況,在該變數上檢查每個選擇的情況 select case 。

語法

select case結構的語法如下:

[name:] select case (expression) 
   case (selector1)          
   ! some statements          
   ... case (selector2)           
   ! other statements           
   ...       
   case default          
   ! more statements          
   ...   
end select [name]

以下規則適用於select語句:

  • 在select 語句中使用的邏輯表示式可以是邏輯型,字元型或整型(但不是實型)的表示式。

  • 可以有任意數量的範圍內選擇一個case語句。每一種情況下後跟的值進行比較,以及可能是合乎邏輯的,字元或整數(但不是真正的)的表達,並確定哪個語句被執行。

  • 恆定表達的情況下,必須具有相同的資料型別,如在選擇的變數,並且它必須是一個常數或文字。

  • 當被選擇的變數等於以下這種情況的某一情況,該語句將執行,如果沒有匹配,那直到下一個case語句為止。

  • 如果在選擇的情況下(表示式)表示式不匹配任何的選擇了,那麼 default 塊被執行。

流程圖

Flow Diagram2

範例 1

program selectCaseProg
implicit none

   ! local variable declaration
   character :: grade = 'B'

   select case (grade)
   
      case ('A') 
      print*, "Excellent!" 

      case ('B')
      
      case ('C') 
         print*, "Well done" 

      case ('D')
         print*, "You passed" 

      case ('F')
         print*, "Better try again" 

      case default
         print*, "Invalid grade" 
      
   end select
   
   print*, "Your grade is ", grade 
 
end program selectCaseProg

當上述程式碼被編譯和執行時,它產生了以下結果:

Your grade is B

指定一個範圍的選擇

可以選擇指定一個範圍,通過指定上限和下限由冒號分隔:

case (low:high) 

下面的例子說明了這一點:

範例 2

program selectCaseProg
implicit none

   ! local variable declaration
   integer :: marks = 78

   select case (marks)
   
      case (91:100) 
         print*, "Excellent!" 

      case (81:90)
         print*, "Very good!"

      case (71:80) 
         print*, "Well done!" 

      case (61:70)
         print*, "Not bad!" 

      case (41:60)
         print*, "You passed!"  

      case (:40)
         print*, "Better try again!"  

      case default
         print*, "Invalid marks" 
         
   end select
   print*, "Your marks is ", marks
 
end program selectCaseProg

當上述程式碼被編譯和執行時,它產生了以下結果:

Well done!
Your marks is 78