跳轉到內容

程式設計基礎/Do While 迴圈

來自華夏公益教科書,自由的教科書

do while 迴圈是一種控制流語句,它至少執行一次程式碼塊,然後根據程式碼塊末尾給定的布林條件重複執行程式碼塊或不執行程式碼塊。[1]

某些語言可能對這種型別的迴圈使用不同的命名約定。例如,Pascal 語言有一個 repeat until 迴圈,它會一直執行,直到控制表示式為真(然後終止)——而“while”迴圈會在控制表示式為真時執行(並在表示式變為假時終止)。[2]

迴圈後測試介紹

[編輯 | 編輯原始碼]

在控制結構的迭代(或重複)類別中,有兩種常用的迴圈後測試迴圈。它們是:do while 和 repeat until。本模組涵蓋這兩者。

理解一般迭代 - do while

[編輯 | 編輯原始碼]

迭代的概念與可能需要重複操作有關。與所有控制結構一樣,我們提出一個問題來控制迴圈的執行。術語“迴圈”來自使用流程圖時發生的圓形迴圈運動。do while 迴圈的基本形式如下

do
    some statements or action
    some statements or action
    some statements or action
    update the flag
while the answer to the question is true

在大多數程式語言中,問題(稱為測試表達式)是一個布林表示式。布林資料型別有兩個值——true 和 false。讓我們重寫結構以考慮這一點

do
    some statements or action
    some statements or action
    some statements or action
    update the flag
while expression is true

在 do while 控制結構中,正常工作的迴圈具有三個屬性。它們是

  • 操作或操作
  • 標誌的更新
  • 測試表達式

英文表達是,“當表示式為真時,你執行操作”。這是基於 true 的迴圈。當測試表達式為假時,你停止迴圈並繼續執行程式中的下一個專案。請注意,由於這是迴圈後測試,因此操作將始終至少發生一次。它被稱為迴圈後測試,因為測試發生在操作之後。它有時也被稱為後測試迴圈,這意味著測試是在操作和更新之後(或拉丁語中的之後)。

理解一般迭代 - repeat until

[編輯 | 編輯原始碼]

迭代的概念與可能需要重複操作有關。與所有控制結構一樣,我們提出一個問題來控制迴圈的執行。術語“迴圈”來自使用流程圖時發生的圓形迴圈運動。repeat until 迴圈的基本形式如下

repeat
    some statements or action
    some statements or action
    some statements or action
    update the flag
until the answer to the question becomes true

在大多數程式語言中,問題(稱為測試表達式)是一個布林表示式。布林資料型別有兩個值——true 和 false。讓我們重寫結構以考慮這一點

repeat
    some statements or action
    some statements or action
    some statements or action
    update the flag
until expression becomes true

在 repeat until 控制結構中,正常工作的迴圈具有三個屬性。它們是

  • 操作或操作
  • 標誌的更新
  • 測試表達式

英文表達是,“你重複操作,直到表示式變為真”。這是基於 false 的迴圈。當測試表達式變為真時,你停止迴圈並繼續執行程式中的下一個專案。請注意,由於這是迴圈後測試,因此操作將始終至少發生一次。它被稱為“迴圈後測試”,因為測試發生在操作之後。它有時也被稱為後測試迴圈,這意味著測試是在操作和更新之後(或拉丁語中的之後)。

Do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output age_user + friend_age
    Output "Do you want to try it again? y or n"
    Input loop_response
While loop_response == 'y'

迴圈後測試的三個屬性都存在。操作部分包括提示輸入資料然後顯示兩個年齡總和的 6 行程式碼。標誌更新是顯示問題並獲取變數 loop_response 的答案。測試是變數標誌中的值與字元 y 的小寫形式的相等關係比較。迴圈將繼續處理,直到 loop_response 為“y”。

這種型別的迴圈控制稱為事件控制迴圈。標誌更新是一個事件,使用者在其中決定是否要再次執行迴圈。

使用縮排和迴圈操作和標誌更新的對齊是正常的行業實踐。

無限迴圈

[編輯 | 編輯原始碼]

在這一點上,值得一提的是,良好的程式設計總是提供一種方法來確保迴圈問題最終會變為假,以便迴圈停止執行,程式繼續執行下一行程式碼。但是,如果這種情況沒有發生,那麼程式將處於無限迴圈中,並且不會停止,直到程式從外部終止或計算機重新啟動。考慮以下程式碼

loop_response = 'y'
Do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output user_age + friend_age
While loop_response == 'y'

程式設計師在迴圈之前為標誌分配了一個值,但忘記更新標誌。每次詢問測試表達式時,它將始終為真。因此,這是一個無限迴圈,因為程式設計師沒有提供退出迴圈的方法(他忘記更新標誌)。

考慮以下程式碼

do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output age_user + friend_age
    Output "Do you want to try it again? y or n"
    Input loop_response
While loop_response = 'y'

無論使用者在標誌更新期間回覆什麼,測試表達式都不會進行關係比較,而是進行賦值。它將“y”分配給變數並詢問“y”是否為真?由於所有非零值都被視為表示真,因此對文字問題的答案為真。瞧,你有一個無限迴圈。

關鍵詞

[編輯 | 編輯原始碼]
操作項
迭代控制結構的一個屬性。
至少一次
表示迴圈後測試至少執行一次操作。
do while
迴圈後迭代控制結構。
無限迴圈
一系列指令,這些指令無休止地迴圈,要麼是因為迴圈沒有終止條件,要麼是因為終止條件永遠無法滿足,要麼是因為終止條件導致迴圈重新開始。[3]
事件控制迴圈
使用使用者輸入來控制迴圈。[4]
repeat until
某些程式語言中可用的迴圈後迭代控制結構的替代方案。
測試項
迭代控制結構的一個屬性。
更新項
迭代控制結構的一個屬性。
華夏公益教科書