<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 3.5.2 結構化程序設計的基本內容 簡單問題的求解過程通常是直接了當的,可選擇的執行路徑不多;但對于復雜問題,一般能設計出多種求解過程。在各種求解過程中,有些過程會比其他過程“好”,當然這個“好” 的意義是依賴于具體問題的。打個比方,為了燒一壺開水,恐怕所有人都會按照“向壺中加 入冷水;壺放到爐子上;點火燒至沸騰”這樣的過程來解決。但如果是燒冬瓜排骨湯,則外 行會將冬瓜和排骨一起入鍋加水煮;有點經驗的人則知道先煮排骨,排骨快熟了才加冬瓜一 起煮;而老練的廚師則會先將排骨焯水,然后再加水煮,排骨熟了才加冬瓜。如果再考慮各 種佐料的使用,顯然冬瓜排骨湯的制作過程是多種多樣的。哪種制作過程好呢?美食家會告 訴我們廚師的做法是好的,因為按他們的做法能保證排骨熟透而冬瓜不爛,而且焯過水的排 骨更干凈并可減少油膩。 至此,一個問題擺在了我們面前:如何設計出能解決特定問題的“好”的程序?為了回 答這個問題,需要先定義什么是“好”程序。一般來說,好的程序不但要能正確地解決問題, 而且還應該是執行效率高、易理解、易維護、可擴展的。 程序設計過去曾被看作是個人技藝,程序的好壞完全依賴于程序員的個人才能。但后來 計算機科學家們認識到,程序設計是一門可以給予科學解釋的學問,可以建立良好的設計方 法來指導程序員進行程序設計。普通程序員只要遵循這些設計方法,都能編寫出良好的程序。 計算機科學家提出了許多程序設計方法,最早提出也是最基本的一種方法就是這里要介 紹的是結構化程序設計(structured programming,簡稱 SP)。SP 是以 Dijkstra 為代表的計算 機科學家于上世紀 60 年代后期建立起來的,是從程序文本結構的角度來闡述怎樣的程序是良 好的。SP 的基本思想是要確保程序具有良好的結構,使程序易理解、易驗證和易維護。當然, SP 并沒有一個嚴格的、公認的定義,其具體內容大致包括以下幾個原則。 只用三種基本控制結構 解決復雜問題時,程序可能需要建立復雜的控制流程,這是不是意味著編程語言應該提供更多的復雜控制結構呢?答案是否定的。計算機科學家證明了所謂“結構化定理”:任何程 序邏輯都可以只用順序、條件分支、循環這三種基本控制結構來實現。因此,我們在開發程 序時,應該只使用這些基本控制結構,并將它們串聯、嵌套在一起,從而搭建出整個程序。 本章前面介紹了條件分支和循環控制結構的多種常見使用模式,讀者應當熟練地掌握這些模 式。當遇到復雜問題時,可以利用流程圖工具,將復雜的控制流程轉化成這些基本控制結構 的串聯和嵌套。 goto 語句是有害的 較老的編程語言(如 BASIC、Pascal 和 C 等)中提供了 goto 語句,這條語句的作用是將 控制直接轉到程序中的指定位置。使用 goto 可能寫出這樣的代碼: ``` …… ENTRY: count := 0; while count &lt; n do begin …… if sthWrong then goto EXIT else goto ENTRY; end; EXIT: writeln("End"); …… ``` goto 語句看上去用起來很直接、很方便,很多人在設計程序流程遇到麻煩時第一感就會 想用 goto 語句。但是可以想象,如果程序中大量使用 goto 來控制程序的流程,這樣的程序 就像一團亂麻,程序的靜態結構與動態執行不一致,是非常難理解、難維護的。Dijkstra 首先 提出 goto 語句是有害的,并提出應當編寫結構清晰的程序,以使程序易寫、易讀、易驗證和 易維護。 事實上,goto 語句并非必須的語言構造。計算機科學家證明了,使用 goto 的程序一定可 以轉化為只包含順序、條件分支和循環結構的程序,也就是說編程語言中完全可以將 goto 語 句去除。 與 goto 類似的語句還有循環中使用的 break 和 continue 語句,它們都是以跳轉的方式將 控制轉移到程序其他位置,導致循環有多個出口。按照 SP 的思想,這些語句都應慎用。 單入口單出口的程序塊 編程語言的單條語句可以看成是只有一個入口和一個出口,因此前后相繼的語句序列構成了單入口單出口的順序控制結構。而條件控制結構(if 語句)和循環控制結構(for 和 while 語句)的內部雖然可以出現由多條語句構成的語句塊,但從外部看同樣是只有一個入口和一 個出口(參見圖 3.1、圖 3.4 等流程圖)。總之,基本控制結構(順序、條件、循環)都是單入口單出口的結構,這種結構具有“可組合”的特性。 如果將兩個基本控制結構串聯在一起,前一個結構的出口連接后一個結構的入口,那么 所得到的語句序列仍然只有一個入口和一個出口,在效果上完全可以視之為單條語句(見圖 3.11)。這就像電子電路中將兩個電阻串聯后可以視為一個更大的電阻一樣。不斷重復這個串 聯過程,將得到由多個控制結構串聯而成的結構,它仍然只有一個入口和一個出口,我們稱 之為程序塊。由于程序塊只有一個入口和一個出口,在不考慮其內部控制結構的情況下,完 全可以將整個程序塊視為單條語句,從而可以在不改變其內部控制流的情況下用于程序中任 何可以出現語句的地方。 ![](https://box.kancloud.cn/2016-02-22_56cafcde4a4f1.png) 圖 3.11 控制結構的串聯 除了串聯,嵌套也是一種將多個語句組合成一個更大的程序塊的形式。例如條件語句的 分支語句體和循環語句的循環體本身都是程序塊。 結構化程序設計的原則就是利用“單入口單出口”的程序塊進行串聯、嵌套,最終搭建出復雜程序,這使得程序的結構清晰、層次分明、易理解、易維護。 除了上述幾條設計原則,其他如模塊化設計、自頂向下逐步求精設計也都是結構化程序 設計的基本內容,下一章對此有詳細介紹。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看