1. 程式人生 > >初識Tcl(五):Tcl 迴圈

初識Tcl(五):Tcl 迴圈

目錄

 

Tcl迴圈

迴圈控制語句

無限迴圈

Tcl while迴圈

語法

流程圖

示例

Tcl for迴圈

語法

流程圖

示例

Tcl巢狀迴圈

語法

示例

Tcl break語句

語法

流程圖

示例

Tcl continue語句

語法

流程圖

示例


Tcl迴圈

可能有一種情況,當需要執行一個程式碼塊多次。在一般情況下,語句是順序執行的:如在函式內的第一條語句,首先執行,然後是第二個 ... 等等。

程式語言提供了各種控制結構,允許更多複雜的執行路徑。

迴圈語句可以讓我們執行語句多次或程式碼組,下面是在大多數程式語言迴圈語句的一般形式:

Loop Architecture

TCL語言提供迴圈以下型別來處理迴圈。

迴圈型別 描述
while迴圈 重複宣告語句或一組,當給定的條件為真。它測試條件在執行迴圈體前。
for迴圈 執行語句多次,序列和簡寫管理迴圈變數的程式碼。
內嵌迴圈 可以使用一個或多個迴圈內再使用其它的while語句,或do..while迴圈。

迴圈控制語句

迴圈控制語句改變其正常的順序執行。當執行離開範圍,在該範圍內建立的所有自動物件被銷燬。

TCL支援下面的控制語句。

控制語句 描述
break語句 終止迴圈或switch語句並將執行立即迴圈或切換到下面的語句。
continue語句 導致迴圈跳過它的主體的其餘部分,並立即重新測試其條件宣告之前。

無限迴圈

如果條件永遠不會為假那麼一個迴圈就是無限迴圈。 while迴圈是傳統上用於此目的。可以通過條件表示式為1,來執行一個死迴圈。

while {1} {
   puts "This loop will run forever."
}

當條件表示式為不存在,它被假定為真。 TCL程式設計師更普遍使用while {1} 構造以表示無限迴圈。

注意:可以通過按 Ctrl+ C鍵 終止無限迴圈。

Tcl while迴圈

在Tcl語言while迴圈,只要給定的條件為真,執行目標語句宣告多次。

語法

在Tcl語言while迴圈的語法是:

while {condition} {
   statement(s)
}

在這裡,宣告(S)可以是單個語句或語句塊。所述條件可以是任何表達,真是指任何非零值。迴圈迭代當條件為真。

當條件為假,則程式控制進到緊接在迴圈之後的程式碼行。

流程圖

While Loop

在這裡,while迴圈的關鍵點是,當條件測試結果為假時,在迴圈可能不會永遠執行。迴圈體將跳過while迴圈後的第一個語句將被執行。

示例

#!/usr/bin/tclsh

set a 10

#while loop execution 
while { $a < 20 } {
   puts "value of a: $a"
   incr a
}

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Tcl for迴圈

for迴圈是一個迴圈控制結構,可以有效地編寫需要執行特定的程式碼次數。

語法

Tcl語言for迴圈的語法是:

for {initialization} {condition} {increment} {
   statement(s);
}

下面是一個迴圈控制的流程:

  • 初始化步驟首先執行,並且只有一次。這一步可以宣告和初始化任何迴圈控制變數。不需要把一個宣告放在這裡,只要給定一個分號。

  • 接著,條件condition進行了計算。如果為真,則執行迴圈體。如果是假的,迴圈體不執行,for迴圈之後的流程控制跳轉到下一條語句。

  • 迴圈的執行主體之後,控制流跳轉回到增量語句。此語句可以更新任何迴圈控制變數。這個語句可以留空,只需要一個分號。

  • 條件現在重新計算評估。如果條件為真,迴圈執行的過程中重新執行(迴圈體,然後增加步,然後再次計算條件)。之後當條件為假時,for迴圈終止。

流程圖

For Loop

示例

#!/usr/bin/tclsh

# for loop execution
for { set a 10}  {$a < 20} {incr a} {
   puts "value of a: $a"
}

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Tcl巢狀迴圈

TCL允許使用一個迴圈內的另一個迴圈。下面的內容展示幾個例子來說明這個概念。

語法

Tcl語言的巢狀的迴圈語句的語法如下:

for {initialization} {condition} {increment} {
   for {initialization} {condition} {increment} {
      statement(s);
   }
   statement(s);
}

Tcl語言巢狀while迴圈語句的語法如下:

while {condition} {
   while {condition} {
      statement(s);
   }
   statement(s);
}

在迴圈巢狀最後需要說明的是,可以把任何型別迴圈巢狀在其他型別迴圈內。例如,for迴圈可以是一個while迴圈的內迴圈,或反之亦然。

示例

下面的程式使用巢狀for迴圈從2至100找出所有的素數:

#!/usr/bin/tclsh

set j 0;
for {set i 2} {$i<100} {incr i} {
   for {set j 2} {$j <= [expr $i/$j] } {incr j} {
      if {  [expr $i%$j] == 0 } {
         break
      } 
   }
   if {$j >[expr $i/$j] } {
      puts "$i is prime"
   }
}

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

2 is prime
3 is prime
5 is prime
7 is prime
11 is prime
13 is prime
17 is prime
19 is prime
23 is prime
29 is prime
31 is prime
37 is prime
41 is prime
43 is prime
47 is prime
53 is prime
59 is prime
61 is prime
67 is prime
71 is prime
73 is prime
79 is prime
83 is prime
89 is prime
97 is prime

Tcl break語句

在Tcl語言break語句用於終止迴圈。當迴圈中遇到break語句,迴圈立即終止,程式控制繼續迴圈體後面的語句。

如果使用巢狀迴圈(即,一個迴圈在另一個迴圈體中),break語句將停止最內層迴圈的執行,並開始執行的下一行程式碼段程式之後。

語法

Tcl break語句的語法如下:

break;

流程圖

Break Statement

示例

#!/usr/bin/tclsh

set a 10

# while loop execution 
while {$a < 20 } {
   puts "value of a: $a"
   incr a
   if { $a > 15} {
      # terminate the loop using break statement 
          break
   }
}

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15

Tcl continue語句

Tcl語言中continue語句的工作有點像break語句。但不是強制終止,但是,繼續強制迴圈的下一個迭代發生,跳過中間的程式碼。

對於for迴圈,continue語句使迴圈的條件測試和增量部分執行。對於while迴圈,continue語句通過程式控制的條件測試。

語法

在Tcl continue語句的語法如下:

continue;

流程圖

Continue Statement

示例

#!/usr/bin/tclsh

set a 10
# do loop execution 
while { $a < 20 } {
   if { $a == 15} {
     #skip the iteration 
	 incr a
     continue
   }
   puts "value of a: $a"
   incr a     
}

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19