1. 程式人生 > >初識Tcl(四):Tcl 決策

初識Tcl(四):Tcl 決策

目錄

 

Tcl決策

 ? : 操作符

Tcl if語句

語法

流程圖

示例

Tcl if...else 語句

語法

流程圖

示例

if...else if...else 語句

語法

示例

Tcl 巢狀if語句

語法

示例

Tcl Switch語句

語法

流程圖

例如:未加引號版本

例如:引用版本

Tcl巢狀Switch語句

語法

示例


Tcl決策

決策結構需要程式設計師指定的一個或多個條件進行評估,或由程式進行測試,如果條件被確定為真以及一條或多條語句,任選的其它語句,如果條件被確定為假則被執行。

以下是在大多數程式語言中找到的典型決策結構的一般形式:

Decision Making

TCL語言使用expr內部命令,因此它為我們宣告使用expr的宣告不是必需的。

TCL語言提供了以下幾種型別的決策語句。

語名 描述
if語句 if語句包含一個布林表示式後跟一個或多個語句。
if...else語句 if語句可以跟著一個可選的else語句,當else執行時,布林表示式是假。
內嵌if語句 可以使用一個if 或else if 裡面再宣告 if 或 else if 語句(S)。
switch語句 switch語句可以讓一個變數對值列表相等進行測試。
內嵌switch語句 可以使用一個switch語句在另一個switch語句中。

 ? : 操作符

我們已經覆蓋條件操作符 ? :在前面的章節中可以用它來代替 if ... else語句。以下是它的一般形式:

Exp1 ? Exp2 : Exp3;

計算Exp1,Exp2和Exp3表示式。注意使用和放置。

a的值?表達是確定這樣:Exp1計算評估。如果是真的,那麼Exp2後進行評估計算,併成為整個的值?表示式。如果計算Exp1是假的,那麼Exp3計算它的值變為表示式的值。一個例子如下所示。

#!/usr/bin/tclsh

set a 10;
set b [expr $a == 1 ? 20: 30]
puts "Value of b is $b\n"
set b [expr $a == 10 ? 20: 30]
puts "Value of b is $b\n" 

當編譯和執行上面的程式,將會產生以下結果:

Value of b is 30
Value of b is 20

Tcl if語句

if語句包含一個布林表示式後跟一個或多個語句。

語法

Tcl語言的if語句的語法是:

if {boolean_expression} {
   # statement(s) will execute if the boolean expression is true
}

如果程式碼里布爾表示式的值為真,那麼if語句塊將被執行。如果 if 語句的結束(右大括號後)布林表示式的值為false,那麼第一套程式碼會被執行。

TCL語言使用expr內部命令,因此它不是明確地使用expr語句宣告所需的。

流程圖

If Statement

示例

#!/usr/bin/tclsh

set a 10
 
#check the boolean condition using if statement
if { $a < 20 } {
   # if condition is true then print the following 
   puts "a is less than 20" 
}
puts "value of a is : $a" 

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

a is less than 20
value of a is : 10

Tcl if...else 語句

if語句可以跟著一個可選的else語句,else語句塊執行時,布林表示式是假的。

語法

在Tcl語言的if ... else語句的語法是:

if {boolean_expression} {
  # statement(s) will execute if the boolean expression is true 
} else {
  # statement(s) will execute if the boolean expression is false
}

如果布林表示式的值為true,那麼if程式碼塊將被執行,否則else塊將被執行。

TCL語言使用expr內部命令,因此它不是明確地使用expr語句所需的。

流程圖

If Else Statement

示例

#!/usr/bin/tclsh

set a 100

#check the boolean condition 
if {$a < 20 } {
   #if condition is true then print the following 
   puts "a is less than 20"
} else {
   #if condition is false then print the following 
   puts "a is not less than 20"
}
puts "value of a is : $a"

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

a is not less than 20;
value of a is : 100

if...else if...else 語句

if語句可以跟著一個可選的else if ... else語句,使用單個if 測試各種條件if...else if 宣告是非常有用的。

當使用if , else if , else語句有幾點要記住:

  • 一個if可以有零或一個else,它必須跟在else if之後。

  • 一個if語句可以有零到多個else if,並且它們必須在else之前。

  • 一旦一個 else if 成功,任何剩餘else if 或else 不會再被測試。

語法

Tcl語言的 if...else if...else語句的語法是:

if {boolean_expression 1} {
   # Executes when the boolean expression 1 is true
} elseif {boolean_expression 2} {
   # Executes when the boolean expression 2 is true 
} elseif {boolean_expression 3} {
   # Executes when the boolean expression 3 is true 
} else {
   # executes when the none of the above condition is true 
}

示例

#!/usr/bin/tclsh

set a 100

#check the boolean condition
if { $a == 10 } {
   # if condition is true then print the following 
   puts "Value of a is 10"
} elseif { $a == 20 } {
   # if else if condition is true 
   puts "Value of a is 20"
} elseif { $a == 30 } {
   # if else if condition is true 
   puts "Value of a is 30"
} else {
   # if none of the conditions is true 
   puts "None of the values is matching"
}

puts "Exact value of a is: $a"

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

None of the values is matching
Exact value of a is: 100

Tcl 巢狀if語句

Tcl巢狀if-else語句它始終是合法的,這意味著可以使用一個 if 或 else if 在另一 if 或 else if 宣告中。

語法

巢狀if語句的語法如下:

if { boolean_expression 1 } {
   # Executes when the boolean expression 1 is true 
   if {boolean_expression 2} {
      # Executes when the boolean expression 2 is true
   }
}

可以巢狀else if...else 在類似巢狀if語句的方式。

示例

#!/usr/bin/tclsh

set a 100
set b 200
 
# check the boolean condition 
if { $a == 100 } {
   # if condition is true then check the following 
   if { $b == 200 } {
      #if condition is true then print the following 
      puts "Value of a is 100 and b is 200"
   }
}
puts "Exact value of a is : $a"
puts "Exact value of b is : $b"

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

Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200

Tcl Switch語句

switch語句可以讓一個變數值的列表進行相等測試。每個值被稱為一個的情況(case),該變數被接通檢查每個switch case。

語法

Tcl語言未加引號的switch語句的語法如下:

switch switchingString matchString1 {body1} matchString2 {body2} ... matchStringn {bodyn}

Tcl語言未加引號的switch語句的語法如下:

switch switchingString {
   matchString1 {
      body1
   }
   matchString2 {
      body2
   }
...
   matchStringn {
      bodyn
   }
}

以下規則適用於switch語句:

  • 在switch語句中使用的switchingString通過比較matchString使用在不同塊之間。

  • 在一個switch內可以任何數量matchString塊。

  • switch語句可以具有可選預設塊,其中必須出現在開關的末尾。預設情況下,可用於執行任務時沒有一個case是真實的。

流程圖

Switch Statement

例如:未加引號版本

#!/usr/bin/tclsh

set grade C;

switch $grade  A { puts "Well done!" }  B { puts "Excellent!" }  C { puts "You passed!"  } F { puts "Better try again"   }   default {     puts "Invalid grade"   }
puts "Your grade is  $grade"

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

You passed!
Your grade is  C

例如:引用版本

#!/usr/bin/tclsh

set grade B;

switch $grade {
   A {
     puts "Well done!"
   }
   B {
     puts "Excellent!"
   }

   C {
     puts "You passed!"
   }
   F {
     puts "Better try again"
   }
   default {
     puts "Invalid grade"
   }
}
puts "Your grade is  $grade"

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

Well done
Your grade is B

Tcl巢狀Switch語句

有可能有一個switch作為外開關的語句序列的一部分。即使在內外switch case 的常數包含共同的值,如果沒有衝突將出現。

語法

巢狀switch語句的語法如下:

switch switchingString {
   matchString1 {
      body1
      switch switchingString {
        matchString1 {
           body1
         }
         matchString2 {
           body2
         }
        ...
         matchStringn {
           bodyn
         }
      }
   }
   matchString2 {
      body2
   }
...
   matchStringn {
      bodyn
   }
}

示例

#!/usr/bin/tclsh

set a 100
set b 200

switch $a {
   100 {
     puts "This is part of outer switch"
     switch $b {
        200 {
           puts "This is part of inner switch!"
        }
	 }
   }   
}
puts "Exact value of a is : $a"
puts "Exact value of a is : $b"

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

This is part of outer switch
This is part of inner switch!
Exact value of a is : 100
Exact value of a is : 200