- Python算法設計與分析從入門到精通
- 明日科技編著
- 2472字
- 2022-07-28 18:54:27
2.2 用流程圖表示
流程圖是一種傳統的算法表示法,它用一些圖框來代表各種不同性質的操作,用流程線來指示算法的執行方向。由于它直觀形象,易于理解,所以應用廣泛。
2.2.1 流程圖符號
下面列出一些常見的流程圖符號,如表2.1所示。其中,“起止框”用來標識算法的開始和結束;“輸入/輸出框”用來表示算法的輸入或者輸出;“判斷框”用來判斷給定的條件,并根據條件成立與否,決定如何執行后續操作;“處理框”用來表示算法中變量的一些操作,如變量計算、賦值等;“流程線”用來表示算法的流向,即算法下一步該往哪個方向進行;“注釋框”用來對算法進行注釋;“連接點”用于將畫在不同地方的流程線連接起來。
表2.1 流程圖符號

【實例2.3】 判斷輸入的數字是奇數還是偶數。
判斷一個數是奇數還是偶數的條件如下:用該數除以2,余數為0,則為偶數,否則為奇數。
本實例的算法過程用流程圖表示,如圖2.12所示。其過程分析如下:
(1)程序開始,用戶輸入一個數n。
(2)用菱形框判斷n與2相除取余,結果是否為0。
(3)判斷結果為True,則輸出“此數為偶數”;判斷結果為False,則輸出“此數為奇數”。
(4)程序結束。
【實例2.4】 大學畢業季:智聯招聘投簡歷。
某企業招聘,公司人事會根據求職者填寫的身高和年齡,判斷是否符合公司的初試條件(年齡不低于25歲,身高不低于1.7米)。滿足條件,通知應聘者通過初試,準備參加面試和筆試;否則就通知沒有通過初試。
本實例的算法過程用流程圖表示,如圖2.13所示。其過程分析如下:

圖2.12 判斷奇數還是偶數

圖2.13 是否通過初試
(1)程序開始,輸入身高h和年齡a。
(2)用菱形框判斷h是否大于等于1.7,同時a是否大于等于25。
(3)判斷結果為True,則輸出“通過初試”;判斷結果為False,則輸出“沒有通過初試”。
(4)程序結束。
2.2.2 三大基本結構
1966年,計算機科學家Bohm和Jacopini為了提高算法質量,提出了3種基本程序結構,即順序結構、選擇結構和循環結構,任何一個算法都可由這3種基本結構組成。這3種基本結構之間可以并列,也可以相互包含,但不允許交叉,不允許從一個結構直接跳轉到另一個結構內部。只要規定好這3種基本結構的流程圖的畫法,就可以畫出任何算法的流程圖。
1.順序結構
順序結構是一種簡單的線性結構,各操作將按照在程序中出現的先后順序依次執行。如圖2.14所示,執行完語句1指定的操作后,接著會執行語句2指定的操作。順序結構中,只有一個入口點語句1和一個出口點語句2。
【實例2.5】 農夫、羊、狼及白菜過河。
一名農夫要將一只狼、一只羊和一袋白菜運到河對岸,但農夫的船很小,每次只能載下農夫本人和一只動物,或者農夫與白菜。農夫不能把羊和白菜留在岸邊,因為羊會把白菜吃掉;也不能把狼和羊留在岸邊,因為狼會吃掉羊。那么,農夫怎樣才能將這3樣東西送過河呢?
本實例的流程圖可以采用順序結構來實現,如圖2.15所示。

圖2.14 順序結構

圖2.15 農夫、羊、狼和白菜過河
2.選擇結構
選擇結構也稱為分支結構,其必須包含一個判斷框,用于判斷某個條件是否成立,并根據判斷結果,執行不同的語句,從而模擬現實中的選擇情況。
如圖2.16所示的選擇結構,需要判斷給定的條件P是否成立,如果判斷結果為True,則執行語句;如果判斷結果為False,什么也不做。
如圖2.17所示的選擇結構,需要判斷給定的條件P是否成立,如果判斷結果為True,則執行語句1;如果判斷結果為False,則執行語句2。

圖2.16 選擇結構1

圖2.17 選擇結構2
【實例2.6】 判斷成績是否及格。
輸入考試成績,判斷該成績是否為大于等于60分。如果判斷結果為True,表示考試成績及格;如果判斷結果為False,表示考試成績不及格。
本實例采用選擇結構來實現,流程圖如圖2.18所示。
3.循環結構
生活中有時會遇到往返重復的操作,使用循環結構處理這類問題最好不過。在循環結構中,某個判斷條件成立時,可反復地執行一系列操作,直到該條件不成立時,才終止循環。
按照判斷條件出現的位置,可將循環結構分為當型循環結構和直到型循環結構。
如圖2.19所示是當型循環結構的流程圖。這里,先判斷條件P是否成立,如果返回的結果是True,則執行語句;執行完語句后,再次判斷條件P是否成立,如果返回的結果仍是True,接著再執行語句;如此反復,直到判斷條件P返回的結果是False,此時不再執行語句,而是跳出循環。

圖2.18 判斷成績是否及格

圖2.19 當型循環
如圖2.20所示是直到型循環結構的流程圖。這里,先執行語句,然后判斷條件P是否成立,如果判斷條件P返回的結果為True,再次執行語句;繼續判斷條件P是否成立,如果返回的結果仍為True,接著再執行語句;如此反復,直到判斷條件P返回的結果為False,此時不再執行語句,而是跳出循環。
可見,當型循環和直到型循環不同之處就是:當型循環是先判斷條件再執行循環體;而直到型循環是先執行一次循環體,再進行條件判斷。也就是說,不論第一次條件判斷的結果是否為True,直到型循環都會執行一次循環體。
【實例2.7】 用不同循環結構實現1~100的求和問題。
計算1~100(包括1和100)所有整數的和。
本實例可以用當型循環結構來表示,流程圖如圖2.21所示;也可以用直到型循環結構來表示,流程圖如圖2.22所示。

圖2.20 直到型循環

圖2.21 當型循環結構求和

圖2.22 直到型循環結構求和
圖2.21所示流程圖的執行過程如下:
(1)程序開始,首先對變量進行初始化,i=1,sum=0。
(2)判斷i的值是否小于等于100,因為i=1,條件判斷結果為True,先執行“sum=sum+i;”,即sum=0+1=1;再執行“i++;”,即i=1+1=2。
(3)再次判斷i的值是否小于等于100,此時i=2,條件判斷結果為True,先執行“sum=sum+i;”即sum=1+1=2;再執行“i++;”,即i=2+1=3。
(4)如此循環下去,直到i=101時,再次判斷i的值是否小于等于100,條件判斷結果為False,跳出循環,輸出sum的值。
(5)程序執行結束。
圖2.22所示流程圖的執行過程如下:
(1)程序開始,首先對變量進行初始化,i=1,sum=0。
(2)然后執行“sum=sum+i;”,即sum=0+1=1;再執行“i++;”,即i=1+1=2。
(3)判斷i的值是否小于等于100,此時i=2,條件判斷結果為True,執行“sum=sum+i;”,即sum=1+1=2;再執行“i++;”,即i=2+1=3。
(4)再次判斷i的值是否小于等于100,此時i=3,條件判斷結果為True,執行“sum=sum+i;”,即sum=2+1=3;再執行“i++;”,即i=3+1=4。
(5)如此循環下去,直到i=101時,再次判斷i的值是否小于等于100,條件判斷結果為False,跳出循環,輸出sum的值。
(6)程序執行結束。
- PHP動態網站程序設計
- GAE編程指南
- Spring 5.0 By Example
- PyTorch自動駕駛視覺感知算法實戰
- Learning Spring 5.0
- Manga Studio Ex 5 Cookbook
- 技術領導力:程序員如何才能帶團隊
- x86匯編語言:從實模式到保護模式(第2版)
- Java加密與解密的藝術
- Mastering JBoss Enterprise Application Platform 7
- Gradle for Android
- Learning OpenCV 3 Computer Vision with Python(Second Edition)
- Yii Project Blueprints
- INSTANT Yii 1.1 Application Development Starter
- Building Serverless Web Applications