2.2.1結(jié)構(gòu)化程序設(shè)計的原則
2.2.2結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點
2.2.3結(jié)構(gòu)化程序設(shè)計原則和方法的應(yīng)用
2.2.1結(jié)構(gòu)化程序設(shè)計的原則
結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊畫,限制使用 goto 語句。
1.自頂向下:程序設(shè)計時,應(yīng)先考慮總體,后考慮細節(jié);先考慮全局目標,后考慮局部目標。不要一開始就追求眾多的細節(jié),先從最上層總目標開始設(shè)計,逐步使問題具體化。
2. 逐步求精:對復雜的問題,應(yīng)設(shè)計一些子目標作過渡,逐步細化。
3.模塊化:一個復雜問題,肯定是由若干個稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標分解為分目標,再進一步分解為具體的小目標,把每個小目標稱為一個模塊。
4. 限制使用 goto 語句
實際上,結(jié)構(gòu)化程序設(shè)計方法的起源來自對 GOTO語句的的認識和爭論??隙ǖ慕Y(jié)論是,在塊和進程的非正常出口往往需要用 GOTO 語句,使用 GOTO語句會使程序執(zhí)行效率較高;在合成程序目標時, GOTO 語句往往是有用的,如返回語句用 GOTO 。否定的結(jié)論是, GOTO語句是有害的,是造成程序混亂的禍根,程序的質(zhì)量與 GOTO 語句的數(shù)量成反比,應(yīng)該在所有高級程序設(shè)計語言中取消 GOTO 語句。取消GOTO 語句后,程序易理解、易排錯、易維護,程序容易進行正確性證明。作為爭論的結(jié)論, 1974 年 Knuth發(fā)表了令人信服的總結(jié),并證實了:
( 1 )濫用 GOTO 語句確實有害,應(yīng)盡量避免;
( 2 )完全避免使用 GOTO 語句也并非是個明智的方法,有些地方使用 GOTO語句,會使流程更清楚、效率更高;
( 3 )爭論的焦點不應(yīng)該放在是否取消 GOTO語句,而應(yīng)該放在用什么樣的程序結(jié)構(gòu)上。
其中關(guān)鍵的是,肯定以提高程序清晰性為目標的結(jié)構(gòu)化方法。
2.2.2 結(jié)構(gòu)化程序的基本特點
結(jié)構(gòu)化程序設(shè)計方法是程序設(shè)計的先進方法和工具。采用結(jié)構(gòu)化程序設(shè)計方法編寫程序,可使程序結(jié)構(gòu)良好、易讀、易理解、易維護。1966 年, Boehm 和 Jacopini證明了程序設(shè)計語言僅僅使用順序、選擇和重復三種基本控制結(jié)構(gòu)就足以表達出各種其他形式結(jié)構(gòu)的程序設(shè)計方法。
1. 順序結(jié)構(gòu):順序結(jié)構(gòu)是一種簡單的程序設(shè)計,它是最基本、最常用的結(jié)構(gòu),如圖 2.1所示。順序結(jié)構(gòu)是順序執(zhí)行的結(jié)構(gòu),所謂順序執(zhí)行,就是按照程序語句行的自然順序, 一條語句一條語句地執(zhí)行程序。
2.選擇結(jié)構(gòu):選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),它包括簡單選擇和多分支選擇結(jié)構(gòu),這種結(jié)構(gòu)可以根據(jù)設(shè)定的條件,判斷應(yīng)該選擇哪一分支來執(zhí)行相應(yīng)的語句序列。圖2.2 列出了包含 2 個分支的簡單選擇結(jié)構(gòu)。
圖2.1 順序結(jié)構(gòu) 圖2.2 選擇結(jié)構(gòu)
3.重復結(jié)構(gòu):重復結(jié)構(gòu)又稱為循環(huán)結(jié)構(gòu),它根據(jù)給定的條件,判斷是否需要重復執(zhí)行某一相同的或類似的程序段,利用重復結(jié)構(gòu)可以簡化大量的程序行。在程序設(shè)計語言中,重復結(jié)構(gòu)對應(yīng)兩類循環(huán)語句,對先判斷后執(zhí)行循環(huán)體的稱為當性循環(huán)結(jié)構(gòu),如圖2.3 所示。對先執(zhí)行循環(huán)體后判斷的稱為直到型循環(huán)結(jié)構(gòu),如圖 2.4 所示。
圖2.3 當型循環(huán) 圖2.4 直到型循環(huán)
總之,遵循結(jié)構(gòu)化的程序的設(shè)計原則,按結(jié)構(gòu)化程序設(shè)計方法設(shè)計出的程序具有明顯的優(yōu)點,其一,程序易于理解、使用和維護。程序員采用結(jié)構(gòu)化編程方法,便于控制、降低程序的復雜性,因此容易編寫程序。便于驗證程序的正確性,結(jié)構(gòu)化程序清晰易讀,可理解性好,程序員能夠進行逐步求精、程序證明和測試,以確保程序的正確性,程序容易閱讀并被人理解,便于用戶使用和維護。其二,提高了編程工作的效率,降低了軟件開發(fā)的成本。由于結(jié)構(gòu)化編程方法能夠把錯誤控制到最低限度,因此能夠減少調(diào)試和查錯的時間。結(jié)構(gòu)化程序是由一些為數(shù)不多的基本結(jié)構(gòu)模塊組成,這些模塊甚至可以由機器自動生成,從而極大地減輕了編程工作量。
2.2.3 結(jié)構(gòu)化程序設(shè)計原則和方法的應(yīng)用
基于結(jié)構(gòu)化程序設(shè)計原則、方法以及結(jié)構(gòu)化程序基本構(gòu)成結(jié)構(gòu)的掌握和了解,在結(jié)構(gòu)化程序設(shè)計的具體實施中,要注意把握如下要素:
1. 使用程序設(shè)計語言中的順序、選擇、循環(huán)等有限的控制結(jié)構(gòu)表示程序的控制邏輯;
2. 選用的控制結(jié)構(gòu)只準有一個入口和一個出口;
3. 程序語句組成容易識別的塊,每塊只有一個入口和一個出口;
4. 復雜結(jié)構(gòu)應(yīng)該用嵌套的基本控制結(jié)構(gòu)進行組合嵌套來實現(xiàn);
5. 語言中沒有的控制結(jié)構(gòu),應(yīng)該采用前后一致的方法來模擬;
6. 嚴格控制 GOTOYUJU 的使用。其意思是指:
?。?1 )用一個非結(jié)構(gòu)化的程序設(shè)計語言去實現(xiàn)一個結(jié)構(gòu)化的構(gòu)造;
?。?2 )若不使用 GOTO 語句會使功能模糊;
( 3 )在某種可以改善而不是損害程序可讀性的情況下。
愛華網(wǎng)



