c程序設計第四版ppt第2章算法-程序的靈魂_第1頁
c程序設計第四版ppt第2章算法-程序的靈魂_第2頁
c程序設計第四版ppt第2章算法-程序的靈魂_第3頁
c程序設計第四版ppt第2章算法-程序的靈魂_第4頁
c程序設計第四版ppt第2章算法-程序的靈魂_第5頁
已閱讀5頁,還剩62頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.一個程序主要包括以下兩方面的信息:一個程序主要包括以下兩方面的信息:(1) 對數據的描述對數據的描述。在程序中要指定用到。在程序中要指定用到哪哪些些數據以及這些數據的類型和數據的組織形式數據以及這些數據的類型和數據的組織形式u這就是數據結構這就是數據結構(data structure)(2) 對操作的描述對操作的描述。即要求計算機進行操作的。即要求計算機進行操作的步驟步驟u也就是算法也就是算法(algorithm).數據是操作的對象數據是操作的對象操作的目的是對數據進行加工處理,以得操作的目的是對數據進行加工處理,以得到期望的結果到期望的結果著名計算機科學家沃思著名計算機科學家沃思(Niki

2、klaus Wirth)提出一個公式:提出一個公式: 算法算法 + 數據結構數據結構 = 程序程序.一個程序除了一個程序除了算法和數據結構這算法和數據結構這主要要素主要要素外,還應當采用結構化程序設計方法進行外,還應當采用結構化程序設計方法進行程序設計,并且用某一種計算機語言表示程序設計,并且用某一種計算機語言表示算法算法、數據結構數據結構、程序設計方法程序設計方法和和語言工語言工具具是一個程序設計人員應具備的知識是一個程序設計人員應具備的知識.算法是解決算法是解決“做什么做什么”和和“怎么做怎么做”的問的問題題程序中的操作語句,是算法的體現程序中的操作語句,是算法的體現不了解算法就談不上程序

3、設計不了解算法就談不上程序設計.2.1 什么是算法什么是算法2.2 簡單的算法舉例簡單的算法舉例2.3 算法的特性算法的特性2.4 怎樣表示一個算法怎樣表示一個算法2.5 結構化程序設計方法結構化程序設計方法.廣義地說,為解決一個問題而采取的方廣義地說,為解決一個問題而采取的方法和步驟,就稱為法和步驟,就稱為“算法算法”對同一個問題,可以有不同的解題方法對同一個問題,可以有不同的解題方法和步驟和步驟為了有效地進行解題,不僅需要保證算為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質量,選擇合法正確,還要考慮算法的質量,選擇合適的算法適的算法.計算機算法可分為兩大類別:計算機算法可分為兩

4、大類別:u數值運算算法數值運算算法u非數值運算算法非數值運算算法數值運算數值運算的目的是求數值解的目的是求數值解非數值運算非數值運算包括的面十分廣泛,最常見包括的面十分廣泛,最常見的是用于事務管理領域的是用于事務管理領域.例例2.1 求求12345可以用最原始的方法進行:可以用最原始的方法進行:u步驟步驟1:先求:先求1*2,得到結果,得到結果2。u步驟步驟2:將步驟:將步驟1得到的乘積得到的乘積2再乘以再乘以3,得,得到結果到結果6。u步驟步驟3:將:將6再乘以再乘以4,得,得24。u步驟步驟4:將:將24再乘以再乘以5,得,得120。這就是最。這就是最后的結果。后的結果。例例2.1 求求1

5、2345 1000太繁瑣太繁瑣.改進的算法:改進的算法:u設變量設變量p為被乘數為被乘數u變量變量i為乘數為乘數u用循環算法求結果用循環算法求結果.S1:使:使p=1,或寫成,或寫成1pS2:使:使i=2,或寫成,或寫成2iS3:使:使p與與i相乘,乘積仍放在變量相乘,乘積仍放在變量p中,可表中,可表示為:示為:p*ipS4:使:使i的值加的值加1,即,即i+1 iS5:如果:如果i不大于不大于5,返回重新執行,返回重新執行S3;否則;否則,算法結束,算法結束最后得到最后得到p的值就是的值就是 5!的值的值若是若是1000,求什么?,求什么?.S1:使:使p=1,或寫成,或寫成1pS2:使:使

6、i=2,或寫成,或寫成2iS3:使:使p與與i相乘,乘積仍放在變量相乘,乘積仍放在變量p中,可表中,可表示為:示為:p*ipS4:使:使i的值加的值加1,即,即i+1 iS5:如果:如果i不大于不大于5,返回重新執行,返回重新執行S3;否則;否則,算法結束,算法結束最后得到最后得到p的值就是的值就是 5!的值的值若若求求135791133221111相當于相當于i 11. 例例2.2 有有50個學生,要求將成績在個學生,要求將成績在80分分以上的學生的學號和成績輸出。以上的學生的學號和成績輸出。用用ni代表第代表第i個學生個學生學號,學號,gi表示第表示第i個學生成績個學生成績S1:1iS2:

7、如果:如果gi80, 則輸出則輸出ni和和gi,否則不輸出,否則不輸出S3:i+1iS4:如果:如果i50,返回到步驟,返回到步驟S2,繼續執行,繼續執行,否則,算法結束否則,算法結束. 例例2.3 判定判定20002500年中的每一年是年中的每一年是否閏年,并將結果輸出。否閏年,并將結果輸出。閏年的條件:閏年的條件: (1)能被能被4整除,但不能被整除,但不能被100整除的年份都是整除的年份都是閏年,如閏年,如2008、2012、2048年年 (2)能被能被400整除的年份是閏年,如整除的年份是閏年,如2000年年u不符合這兩個條件的年份不是閏年不符合這兩個條件的年份不是閏年u例如例如200

8、9、2100年年.設設year為被檢測的年份。算法表示如下:為被檢測的年份。算法表示如下:uS1:2000yearuS2:若:若year不能被不能被4整除,則輸出整除,則輸出year 的的值和值和“不是閏年不是閏年”。然后轉到。然后轉到S6uS3:若:若year能被能被4整除,不能被整除,不能被100整除,整除,則輸出則輸出year的值和的值和“是閏年是閏年”。然后轉到。然后轉到S6uS4:若:若year能被能被400整除,整除,則則輸出輸出year的的值和值和“是閏年是閏年” ,然后轉到,然后轉到S6uS5: 其他情況其他情況輸出輸出year的值和的值和“不是閏年不是閏年”uS6:year+

9、1yearuS7:當:當year2500時,轉時,轉S2,否則停止,否則停止.year不能不能被被4整除整除非閏年非閏年year被被4整整除,但不能除,但不能被被100整除整除閏年閏年year被被100整除,又能整除,又能被被400整除整除閏年閏年其他其他非閏年非閏年逐漸縮小判斷逐漸縮小判斷的范圍的范圍.例例2.4 求求規律:規律:第第1項的分子分母都是項的分子分母都是1 第第2項的分母是項的分母是2,以后每一項的分母子都是,以后每一項的分母子都是前一項的分母加前一項的分母加1 笫笫2項前的運算符為項前的運算符為“-”,后一項前面的運,后一項前面的運算符都與前一項前的運算符相反算符都與前一項前

10、的運算符相反10019914131211.例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返回S4;否則算法結束;否則算法結束10019914131211sign當前項符號當前項符號term當前項的值當前項的值sum當前各項的和當前各項的和deno當前項分母當前項分母-1-1/21-1/23滿足,返回滿足,返回S4.例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*si

11、gnS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返回S4;否則算法結束;否則算法結束10019914131211sign當前項符號當前項符號term當前項的值當前項的值sum當前各項的和當前各項的和deno當前項分母當前項分母11/31-1/2+1/34滿足,返回滿足,返回S4.例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返

12、回S4;否則算法結束;否則算法結束1001991413121199次循環后次循環后sum的值的值就是所要求的結果就是所要求的結果. 例例2.5 給出一個大于或等于給出一個大于或等于3的正整數,判的正整數,判斷它是不是一個素數。斷它是不是一個素數。所謂素數所謂素數(prime),是指除了,是指除了1和該數本和該數本身之外,不能被其他任何整數整除的數身之外,不能被其他任何整數整除的數例如,例如,13是素數,因為它不能被是素數,因為它不能被2,3,4,12整除。整除。.判斷一個數判斷一個數n(n3)是否素數:將是否素數:將n作為作為被除數,將被除數,將2到到(n-1)各個整數先后作為除各個整數先后作

13、為除數,如果都不能被整除,則數,如果都不能被整除,則n為素數為素數S1:輸入:輸入n的值的值S2:i=2 (i作為除數)作為除數)S3:n被被i除,得余數除,得余數rS4:如果:如果r=0,表示,表示n能被能被i整除,則輸出整除,則輸出n“不是素數不是素數”,算法結束;否則執行,算法結束;否則執行S5S5:i+1iS6:如果:如果in-1,返回,返回S3;否則輸出;否則輸出n “是素是素數數”,然后結束。,然后結束??筛臑榭筛臑閚/2n.一個有效算法應該具有以下一個有效算法應該具有以下特點特點:(1) 有窮性有窮性。一個算法應包含有限的操。一個算法應包含有限的操作步驟,而不能是無限的。作步驟,

14、而不能是無限的。(2) 確定性確定性。算法中的每一個步驟都應。算法中的每一個步驟都應當是確定的,而不應當是含糊的、模棱當是確定的,而不應當是含糊的、模棱兩可的。兩可的。.一個有效算法應該具有以下一個有效算法應該具有以下特點特點:(3) 有零個或多個輸入有零個或多個輸入。所謂輸入是指在執。所謂輸入是指在執行算法時需要從外界取得必要的信息。行算法時需要從外界取得必要的信息。(4) 有一個或多個輸出有一個或多個輸出。算法的目的是為了。算法的目的是為了求解,求解,“解解” 就是輸出。就是輸出。u沒有輸出的算法是沒有意義的。沒有輸出的算法是沒有意義的。(5) 有效性有效性。算法中的每一個步驟都應當能。算

15、法中的每一個步驟都應當能有效地執行,并得到確定的結果。有效地執行,并得到確定的結果。.對于一般最終用戶來說對于一般最終用戶來說:u他們并不需要在處理每一個問題時都要自他們并不需要在處理每一個問題時都要自己設計算法和編寫程序己設計算法和編寫程序u可以使用別人已設計好的現成算法和程序可以使用別人已設計好的現成算法和程序u只需根據已知算法的要求給予必要的輸入只需根據已知算法的要求給予必要的輸入,就能得到輸出的結果,就能得到輸出的結果輸入輸入3個數個數黑箱子黑箱子3個數中最大數個數中最大數求求3個數的個數的最大數最大數.常用的方法有:常用的方法有:u自然語言自然語言u傳統流程圖傳統流程圖u結構化流程圖

16、結構化流程圖u偽代碼偽代碼u.2.4.1 用自然語言表示算法用自然語言表示算法2.4.2 用流程圖表示算法用流程圖表示算法2.4.3 三種基本結構和改進的流程圖三種基本結構和改進的流程圖2.4.4 用用N-S流程圖表示算法流程圖表示算法2.4.5 用偽代碼表示算法用偽代碼表示算法2.4.6 用計算機語言表示算法用計算機語言表示算法.2.2節介紹的算法是用自然語言表示的節介紹的算法是用自然語言表示的用自然語言表示通俗易懂,但文字冗長,容用自然語言表示通俗易懂,但文字冗長,容易出現歧義性易出現歧義性用自然語言描述包含分支和循環的算法,不用自然語言描述包含分支和循環的算法,不很方便很方便除了很簡單的

17、問題外,一般不用自然語言除了很簡單的問題外,一般不用自然語言.流程圖流程圖是用一些圖框來表示各種操作是用一些圖框來表示各種操作用圖形表示算法,直觀形象,易于理解用圖形表示算法,直觀形象,易于理解起止框起止框輸入輸出框輸入輸出框處理框處理框判斷框判斷框流程線流程線連接點連接點注釋框注釋框x0YN一個入口一個入口兩個出口兩個出口.流程圖流程圖是用一些圖框來表示各種操作是用一些圖框來表示各種操作用圖形表示算法,直觀形象,易于理解用圖形表示算法,直觀形象,易于理解起止框起止框輸入輸出框輸入輸出框處理框處理框判斷框判斷框流程線流程線連接點連接點注釋框注釋框位置不夠位置不夠防止交叉防止交叉. 例例2.6

18、將例將例2.1的算的算法用流程圖表示。法用流程圖表示。 求求12345如果需要將最后結果如果需要將最后結果輸出輸出:1ti5開始開始2it*iti+1i結束結束NY. 例例2.6 將例將例2.1的算的算法用流程圖表示。法用流程圖表示。 求求12345如果需要將最后結果如果需要將最后結果輸出輸出:1t輸出輸出ti5開始開始2it*iti+1i結束結束NY. 例例2.7 例例2.2的算法用流程圖表示。有的算法用流程圖表示。有50個學生,要求將成績在個學生,要求將成績在80分以上的學生的分以上的學生的學號和成績輸出。學號和成績輸出。.1ii50開始開始i+1i結束結束NY輸入輸入ni、gi1i開始開

19、始gi80輸出輸出ni、gii+1ii50NYYN如果包括輸入數據部分如果包括輸入數據部分.1ii50開始開始i+1i結束結束NY輸入輸入ni、gi1igi80輸出輸出ni、gii+1ii50NYYN如果包括輸入數據部分如果包括輸入數據部分. 例例2.8 例例2.3判定閏年的算法用流程圖表判定閏年的算法用流程圖表示。判定示。判定20002500年中的每一年是否年中的每一年是否閏年,將結果輸出。閏年,將結果輸出。.NYN開始開始2000yearyear不能不能被被4整除整除year是閏年是閏年year不能不能被被100整除整除year+1yearyear2500結束結束Yyear不能不能被被40

20、0整除整除year不是閏年不是閏年year是閏年是閏年year不是閏年不是閏年YNYN.例例2.9 將例將例2.4的算法用流程圖表示。求的算法用流程圖表示。求10019914131211.1sum2deno1sign(-1)*signsignsign*(1/deno)termsum+termsumdeno+1denoNdeno100Y輸出輸出sum結束結束開始開始. 例例2.10 例例2.5判斷素數的算法用流程圖表判斷素數的算法用流程圖表示。對一個大于或等于示。對一個大于或等于3的正整數,判斷它的正整數,判斷它是不是一個素數。是不是一個素數。.NY輸出輸出n是素數是素數結束結束開始開始輸入輸入

21、n2in%irr=0i+1iin輸出輸出n是素數是素數YN.通過以上幾個例子可以看出流程圖是表示通過以上幾個例子可以看出流程圖是表示算法的較好的工具算法的較好的工具一個流程圖包括以下幾部分一個流程圖包括以下幾部分:(1) 表示相應操作的框表示相應操作的框(2) 帶箭頭的流程線帶箭頭的流程線(3) 框內外必要的文字說明框內外必要的文字說明流程線不要忘記畫箭頭,流程線不要忘記畫箭頭,否則否則難以判定各難以判定各框的執行次序框的執行次序.1.傳統流程圖的弊端傳統流程圖的弊端傳統的流程圖用流程線指出各框的執行順傳統的流程圖用流程線指出各框的執行順序,對流程線的使用沒有嚴格限制序,對流程線的使用沒有嚴格

22、限制使用者可以毫不受限制地使流程隨意地轉使用者可以毫不受限制地使流程隨意地轉來轉去,使人難以理解算法的邏輯來轉去,使人難以理解算法的邏輯.2.三種基本結構三種基本結構(1) 順序結構順序結構AB.2.三種基本結構三種基本結構(2) 選擇結構選擇結構ABYpNAYpN.2.三種基本結構三種基本結構(3) 循環結構循環結構 當型循環結構當型循環結構AYp1NYx51t輸出輸出t2it*iti+1i. 例例2.12 將例將例2.2的的算法用算法用N-S圖表示圖表示。將。將50名學生中成名學生中成績高于績高于80分者的學分者的學號和成績輸出。號和成績輸出。直到直到i501t1ii+1i輸入輸入ni、g

23、ii+1i直到直到i50gi80否否是是輸出輸出ni,gi.例例2.13 將例將例2.3判定閏年的算法用判定閏年的算法用N-S圖表示圖表示直到直到year25002000yearyear+1year否否是是year%4為為0否否是是輸出輸出year非閏年非閏年year%100不為不為0year%400為為0是是否否輸出輸出year非閏年非閏年輸出輸出year閏年閏年輸出輸出year閏年閏年.例例2.14 將例將例2.4的算法用的算法用N-S圖圖表示。求表示。求10019914131211直到直到deno100deno+1deno輸出輸出sum1sum1sign2deno(-1)*signsig

24、nsign*(1/deno)termsum+termsum. 例例2.15 將例將例2.5判別素數的算法用判別素數的算法用N-S流程圖表示。流程圖表示。u例例2.10的流程圖的流程圖不是由三種基本結構組不是由三種基本結構組成的成的u循環有兩個出口,不符合基本結構的特點循環有兩個出口,不符合基本結構的特點u無法直接用無法直接用N-S流程圖的三種基本結構的流程圖的三種基本結構的符號來表示符號來表示u先作必要的先作必要的變換變換.NY開始開始輸入輸入n0w 2in%irr=0i+1ii 和和w=0nYN1w輸出輸出n是素數是素數結束結束w=0輸出輸出n不是素數不是素數.輸入輸入nr=0是是否否0w2

25、in%ir1wi+1i直到直到i 或或w 0nw=0是是否否輸出輸出n是素數是素數輸出輸出n不是素數不是素數.一個結構化的算法是由一些基本結構順序一個結構化的算法是由一些基本結構順序組成的組成的在基本結構之間不存在向前或向后的跳轉在基本結構之間不存在向前或向后的跳轉,流程的轉移只存在于一個基本結構范圍,流程的轉移只存在于一個基本結構范圍之內之內一個非結構化的算法可以用一個等價的結一個非結構化的算法可以用一個等價的結構化算法代替,其功能不變構化算法代替,其功能不變如果一個算法不能分解為若干個基本結構如果一個算法不能分解為若干個基本結構,則它必然不是一個結構化的算法,則它必然不是一個結構化的算法.偽代碼是用介于自然語言和計算機語言之偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法間的文字和符號來描述算法用偽代碼寫算法并無固定的、嚴格的語法用偽代碼寫算法并無固定的、嚴格的語法規則,可以用英文,也可以中英文混用規則,可以用英文,也可以中英文混用.例例2.16 求求5!。begin (算法開始算法開始) 1 t 2 i while i5 t*i t i+1 i print tend (算法結束算法結束).例例2.17 求求begin 1 sum 2 deno 1 sign while deno 100 (-1)*sign sign si

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論