官术网_书友最值得收藏!

4.1.1 循環基本概念

所有程序設計語言都提供創建循環的語句。循環是重復結構的基本成分,這個結構包含一塊在某些條件下將會重復執行的代碼。在本節中,我們將會介紹這些結構的一些基本概念。首先,我們使用偽代碼簡單說明一個循環,如例4.1所示。

圖4-1 描述循環結構的最通用流程圖

例4.1 周而復始 一個循環的一般形式如下:

·開始循環。

·測試看看是否滿足某個條件。

·如果滿足這個條件:

·{在花括號之間只包括當滿足這個條件時要執行的操作

·做一些事情。

·做一些改變測試狀態的事情。

·返回第二行并且再次開始。

·}

·如果條件不再滿足,執行下一行。

圖4-1展示重復結構的流程圖表示。這是最通用的一類循環,我們將會在后面的章節中討論其他類型的循環。

4.1.1.1 迭代

前面說過循環是重復結構的基本成分。雖然任務的重復次數總是任何重復結構的重要部分,但是程序員必須知道循環將會重復多少次以確保這個循環正確執行任務。在計算機術語中,對循環的單次遍歷稱為一次循環迭代,因此一個執行3次的循環執行3次迭代。例4.2使用偽代碼說明一個產生3次迭代的循環。

例4.2 循環三次

程序第一次到達第3行時,因為變量等于1滿足小于4,所以這個測試條件是true,因此執行第5~9行。第7行將變量的值改變為2,但是因為2仍然是小于4,所以循環將進入另外一次迭代(第二次迭代)。當它第二次到達第7行時,變量將會再次加1,使之等于3。當程序返回第3行時,這個條件仍然是true(3小于4)。從而循環開始它的第三次迭代,現在第7行把變量的值增加到4。當程序再次返回第3行時,因為4不小于4,所以這個條件不再是true。然后,執行跳至第10行之后的語句。因此,這個程序將執行循環內的語句3次。

4.1.1.2 編寫測試條件

所有程序設計語言都支持創建包含一塊代碼的循環語句,在某些條件下這些語句將會重復執行。有很多方法編寫必須滿足的條件,不過我們也需要考慮一些基本的概念。通常,考慮不周或錯誤編寫的測試條件將造成不想要的結果(最好)或損失慘重的結果(最壞)。

4.1.1.3 小心無限循環

如果一個測試條件不能被循環中發生的任何事滿足,那么循環將會無限期地繼續。這稱為一個無限循環,這種情況可能導致災難。例4.3是將引起一個無限循環的偽代碼例子。

例4.3 危險的無限循環 在這個例子中,測試條件不可能滿足。

在進入循環之后,要求用戶在第4行上錄入一個數字,并且存儲在變量num1中。第5行設定num2等于num1的值加1。第6行顯示字Hello。在這個例子中,條件是在循環(第8行)的末端測試。測試說:循環應該一次又一次地重復,直至num1大于num2。然而,因為不管用戶在每次迭代時為num1錄入什么值,第5行總是設定num2等于這個值加1,從而使循環將會永遠地繼續重復,所以永遠不能滿足這個條件。那么,這個程序什么時候結束呢?答案是:永不結束。單詞“The End”永遠不會顯示,但是“Hello!”將會不斷地在屏幕上重復顯示。

4.1.1.4 不要讓用戶在循環中陷入困境

如果在循環中需要用戶輸入,那么要確保用戶知道如何離開循環。例如,如果希望當用戶錄入一個特定的數字或者單詞時就結束循環,那么就一定要清楚地告知用戶。例4.4的偽代碼示范了一個循環如何可能永遠地困住用戶,以及如何簡單地避免這種情形。

例4.4 陷入循環 在這個例子中,如果你知道它是什么,那么測試條件很容易滿足!

除非用戶碰巧有一位朋友的名字叫done,否則這個循環將會永遠地困住用戶。每次,他錄入一個朋友名字時,將會顯示這個名字并且提示用戶輸入另一個名字。使用這個程序將令人非常沮喪!

當然,這很容易通過簡單地告訴用戶該如何離開循環來修改這個程序。做法是將第5行修改成:

在例4.3和例4.4使用的這類循環中,循環一直繼續,直至用戶結束它,而其他類型的循環結束不需要用戶輸入。不管哪一種類型的循環,你總是要避免循環不能結束的可能性。因此,你一定要確保測試條件能被滿足。并且如果結束循環要求用戶必須錄入一些特別的東西,那么就一定要清楚地告知用戶。

4.1節檢查點

4.1 重復結構的基本成分是什么?

4.2 定義術語迭代

4.3 定義術語測試條件

4.4 下列偽代碼有什么邏輯錯誤?

4.5 下列偽代碼有什么邏輯錯誤?

4.6 無限循環和例4.5展示的在循環內困住用戶的循環之間有什么不同?

主站蜘蛛池模板: 白城市| 梁平县| 大荔县| 聂荣县| 株洲县| 化隆| 章丘市| 镇雄县| 武城县| 女性| 南安市| 渝北区| 禄劝| 修文县| 平武县| 忻州市| 连江县| 孝感市| 安龙县| 沽源县| 齐齐哈尔市| 水城县| 宜宾市| 旬邑县| 邛崃市| 卫辉市| 诸暨市| 盐山县| 南华县| 墨玉县| 靖西县| 夏津县| 建平县| 鄂伦春自治旗| 明光市| 北辰区| 红河县| 洞口县| 廊坊市| 阿坝县| 东至县|