![第一章 軟件設計概論_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/3c6ee582-db5d-4556-96f8-77814033f74c/3c6ee582-db5d-4556-96f8-77814033f74c1.gif)
![第一章 軟件設計概論_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/3c6ee582-db5d-4556-96f8-77814033f74c/3c6ee582-db5d-4556-96f8-77814033f74c2.gif)
![第一章 軟件設計概論_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/3c6ee582-db5d-4556-96f8-77814033f74c/3c6ee582-db5d-4556-96f8-77814033f74c3.gif)
![第一章 軟件設計概論_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/3c6ee582-db5d-4556-96f8-77814033f74c/3c6ee582-db5d-4556-96f8-77814033f74c4.gif)
![第一章 軟件設計概論_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/3c6ee582-db5d-4556-96f8-77814033f74c/3c6ee582-db5d-4556-96f8-77814033f74c5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第一章第一章 軟件設計概論軟件設計概論第五章第五章 類與對象類與對象第四章第四章 函數(shù)函數(shù)第三章第三章 結構化程序設計結構化程序設計第二章第二章 C+基礎知識基礎知識第十章第十章 異常處理異常處理第九章第九章 輸入輸入/輸出流類庫輸出流類庫第八章第八章 繼承與多態(tài)繼承與多態(tài)第七章第七章 動態(tài)內(nèi)存分配動態(tài)內(nèi)存分配第六章第六章 指針與數(shù)組指針與數(shù)組第十一章第十一章 標準模板類庫標準模板類庫(STL) 附附 錄錄 目目 錄錄第一章第一章 軟件設計概述軟件設計概述軟件設計軟件設計是一個將是一個將人類思維人類思維物化為物化為計算機思維計算機思維的的過程,通過這個過程計算機獲得一定程度的獨立過程,通過這個
2、過程計算機獲得一定程度的獨立加工甚至思維的能力,從而將人類思維推向更高加工甚至思維的能力,從而將人類思維推向更高層次。關于軟件設計的概念和方法的研究是隨著層次。關于軟件設計的概念和方法的研究是隨著計算機應用的深入和所處理問題的復雜化而不斷計算機應用的深入和所處理問題的復雜化而不斷加深的。本章將就軟件設計的相關加深的。本章將就軟件設計的相關概念概念和程序設和程序設計方法的計方法的演化發(fā)展演化發(fā)展作一簡要介紹。作一簡要介紹。1.1 軟件與軟件危機軟件與軟件危機1.2 軟軟 件件 工工 程程1.3 程序設計方法程序設計方法 1.6 一個簡單的一個簡單的C+程序程序1.5 C語言和面向?qū)ο蟮恼Z言和面向
3、對象的C+1.4 算法的設計與分析算法的設計與分析 第一章第一章 軟件設計概述軟件設計概述 1.1 軟件與軟件危機軟件與軟件危機什么是軟件什么是軟件什么是軟件危機什么是軟件危機 軟件 程序軟件危機首次爆發(fā)于二十世紀六十年代。在大型程序設計中,人們發(fā)現(xiàn)投入大量的人力、物力、時間開發(fā)出的軟件,其成本、效率、質(zhì)量等方面卻處于失控狀態(tài),尤其軟件維護異常困難。程序的修改擴充往往需要大量重復性投入。 1.1 軟件與軟件危機軟件與軟件危機軟件危機產(chǎn)生的原因主要有三個:軟件危機產(chǎn)生的原因主要有三個:2 2 軟件是一種邏輯產(chǎn)品而非物理產(chǎn)品,軟件的軟件是一種邏輯產(chǎn)品而非物理產(chǎn)品,軟件的開發(fā)過程本質(zhì)上是人的思考過程
4、。開發(fā)過程本質(zhì)上是人的思考過程。3 3 人的智力在面對越來越復雜的問題時,處理人的智力在面對越來越復雜的問題時,處理問題的效率會越來越低。問題的效率會越來越低。1 1 軟件開發(fā)者不熟悉用戶問題的領域,或沒有軟件開發(fā)者不熟悉用戶問題的領域,或沒有理解用戶需求,軟件產(chǎn)品與要求不一致。理解用戶需求,軟件產(chǎn)品與要求不一致。1.2 軟件工程軟件工程軟件危機的軟件危機的 出現(xiàn)迫使人們重新認識出現(xiàn)迫使人們重新認識軟件和軟件開發(fā)過程。軟件和軟件開發(fā)過程。大型軟件開發(fā)也應該借鑒建筑、機械大型軟件開發(fā)也應該借鑒建筑、機械等行業(yè)的發(fā)展過程,由等行業(yè)的發(fā)展過程,由“手工方式手工方式”向向“工程化工程化”方向發(fā)展。方向
5、發(fā)展。19681968年在北年在北大西洋公約組織大西洋公約組織(NATO)(NATO)的年會上的年會上首次首次提出提出軟件工程軟件工程的概念,此后又逐步提的概念,此后又逐步提出出軟件生命期軟件生命期的概念。的概念。1.2 軟件工程軟件工程軟件工程的提出和軟件的定義軟件工程的提出和軟件的定義 軟件軟件是程序、方法、規(guī)則、相關文檔以及在計算機上運行是程序、方法、規(guī)則、相關文檔以及在計算機上運行所必需的數(shù)據(jù)的集合。而所必需的數(shù)據(jù)的集合。而軟件工程軟件工程是開發(fā)、運行、維護軟件是開發(fā)、運行、維護軟件的系統(tǒng)方法。的系統(tǒng)方法。軟件生命期軟件生命期軟件生命期指從開始研制到廢棄不用的整個期間,可劃分軟件生命期
6、指從開始研制到廢棄不用的整個期間,可劃分為五個階段:為五個階段:需求分析需求分析、設計設計、編程編程、測試測試和和運行維護運行維護。 軟件的質(zhì)量標準軟件的質(zhì)量標準正確性正確性 健壯性健壯性 可維護性可維護性可用性可用性 可重用性可重用性 效率等效率等1.2 軟件工程軟件工程正確性 軟件的正確性指的是軟件系統(tǒng)在正常條件下能夠正確工作,完成規(guī)定功能。這是軟件的首要指標。例如,要求設計程序,輸入一批數(shù)據(jù),計算它們的累加和。在這里,正確性就是正確能正確計算累加和。1.2 軟件工程軟件工程健壯性健壯性軟件的健壯性指的是軟件的健壯性指的是在意外情況下在意外情況下(如輸入數(shù)據(jù)不合理或(如輸入數(shù)據(jù)不合理或某些
7、硬件故障),軟件系統(tǒng)仍能適當?shù)毓ぷ鳎σ馔馇闆r某些硬件故障),軟件系統(tǒng)仍能適當?shù)毓ぷ鳎σ馔馇闆r進行適當處理,而不致于導致錯誤結果甚至系統(tǒng)的癱瘓或死進行適當處理,而不致于導致錯誤結果甚至系統(tǒng)的癱瘓或死機。機。例如,要求設計程序,根據(jù)輸入的三邊例如,要求設計程序,根據(jù)輸入的三邊a a、b b、c c的長度判別的長度判別三角形類型?,F(xiàn)有如下設計思想:若三角形類型。現(xiàn)有如下設計思想:若a a、b b、c c中只有兩個量相中只有兩個量相等,則為等腰三角形,若三個量均相等,則為等邊三角形,等,則為等腰三角形,若三個量均相等,則為等邊三角形,否則為一般三角形。如果輸入為(否則為一般三角形。如果輸入為(
8、-2-2,-2-2,-2-2)時,程序輸)時,程序輸出為:等邊三角形。這個結果顯然是錯誤的。這是由于程序出為:等邊三角形。這個結果顯然是錯誤的。這是由于程序?qū)Σ缓侠頂?shù)據(jù)不能進行適當處理,我們就說這個程序的健壯對不合理數(shù)據(jù)不能進行適當處理,我們就說這個程序的健壯性不好。性不好。1.2 軟件工程軟件工程可維護性可維護性軟件的維護包括軟件的維護包括發(fā)現(xiàn)并改正軟件的錯誤發(fā)現(xiàn)并改正軟件的錯誤,以,以及由于軟件運行環(huán)境發(fā)生變化或軟件功能擴充及由于軟件運行環(huán)境發(fā)生變化或軟件功能擴充而而對軟件進行的改動對軟件進行的改動。 軟件的可維護性指的是軟件容易維護的程度。軟件的可維護性指的是軟件容易維護的程度。一般地說
9、,軟件的可讀性好,容易理解,維護一般地說,軟件的可讀性好,容易理解,維護起來也就比較容易。因此可讀性是可維護性的起來也就比較容易。因此可讀性是可維護性的基礎?;A。 1.3 程序設計方法程序設計方法1.3.11.3.1 傳統(tǒng)的結構化程序設計傳統(tǒng)的結構化程序設計 SP(StructuredSP(Structured Programming) Programming)1.3.21.3.2 面向?qū)ο蟮某绦蛟O計面向?qū)ο蟮某绦蛟O計 OOP(ObjectOOP(Object Oriented Programming) Oriented Programming)1.3.1 傳統(tǒng)的結構化程序設計傳統(tǒng)的結構化程
10、序設計傳統(tǒng)的程序設計方法可以歸結為傳統(tǒng)的程序設計方法可以歸結為,將程序定義為處理數(shù)據(jù),將程序定義為處理數(shù)據(jù)的一系列過程。這種設計方法的著眼點是的一系列過程。這種設計方法的著眼點是,特點是數(shù)據(jù)與程序分離,即,特點是數(shù)據(jù)與程序分離,即數(shù)據(jù)數(shù)據(jù)與數(shù)據(jù)處理分離與數(shù)據(jù)處理分離。 結構化程序設計的基本思想是采用結構化程序設計的基本思想是采用的設計方法和的設計方法和的控制的控制結構。結構。1.3.1 傳統(tǒng)的結構化程序設計傳統(tǒng)的結構化程序設計模塊模塊 22.12.2模塊模塊 11.21.11.31.3.11.3.21.3.3模塊模塊 33.13.23.1.13.1.2 程程 序序1.3.1 傳統(tǒng)的結構化程序設
11、傳統(tǒng)的結構化程序設計計舉一個簡單的例子,要求讀入一組整數(shù),統(tǒng)計其中舉一個簡單的例子,要求讀入一組整數(shù),統(tǒng)計其中正整數(shù)和負整數(shù)的個數(shù)。正整數(shù)和負整數(shù)的個數(shù)。該任務的模塊結構及細化過程如下:該任務的模塊結構及細化過程如下:1.1.讀入數(shù)據(jù)讀入數(shù)據(jù)2.2.統(tǒng)計正數(shù)、負數(shù)統(tǒng)計正數(shù)、負數(shù)的個數(shù)的個數(shù); ; 3. 輸出結果輸出結果 2.1 2.1 如數(shù)大于如數(shù)大于0 0,正整數(shù)個數(shù)加,正整數(shù)個數(shù)加1 12.2 2.2 如數(shù)小于如數(shù)小于0 0,負整數(shù)個數(shù)加,負整數(shù)個數(shù)加1 12.3: 2.3: 取下一個整數(shù)取下一個整數(shù)正整數(shù)個數(shù)為正整數(shù)個數(shù)為0 0;負整數(shù)個數(shù);負整數(shù)個數(shù)0 0 取第一個整數(shù)取第一個整數(shù)重復
12、重復至統(tǒng)至統(tǒng)計完計完1.3.1 傳統(tǒng)的結構化程序設計傳統(tǒng)的結構化程序設計結構化程序設計結構化程序設計為處理復雜問題提供了有力為處理復雜問題提供了有力手段,但到手段,但到8080年代末,這種設計方法逐漸暴年代末,這種設計方法逐漸暴露出以下露出以下缺陷缺陷: (1 1)難以適應大型軟件的設計。)難以適應大型軟件的設計。 (2 2)程序可重用性差。)程序可重用性差。1.3.2 面向?qū)ο蟮某绦蛟O計面向?qū)ο蟮某绦蛟O計為什么要引入面向?qū)ο蟮脑O計為什么要引入面向?qū)ο蟮脑O計方法方法面向?qū)ο蟮脑O計方法與面向過面向?qū)ο蟮脑O計方法與面向過程的設計方法有什么關系程的設計方法有什么關系1.3.2 面向?qū)ο蟮某绦蛟O計面向
13、對象的程序設計面向過程程序設計缺點的根源在于面向過程程序設計缺點的根源在于數(shù)據(jù)與數(shù)據(jù)處理數(shù)據(jù)與數(shù)據(jù)處理分離分離。面向?qū)ο蟪绦蛟O計模擬自然界認識和處理事物的方面向?qū)ο蟪绦蛟O計模擬自然界認識和處理事物的方法,將法,將數(shù)據(jù)數(shù)據(jù)和和對數(shù)據(jù)的操作方法對數(shù)據(jù)的操作方法放在一起,形成一個相放在一起,形成一個相對獨立的整體對獨立的整體對象(對象(objectobject),同類對象還可抽象,同類對象還可抽象出出共性共性,形成,形成類(類(class class )。一個類中的數(shù)據(jù)。一個類中的數(shù)據(jù)通常只能通常只能通過本類提供的方法進行處理,這些方法成為該類與外通過本類提供的方法進行處理,這些方法成為該類與外部的
14、部的接口接口。對象之間通過。對象之間通過消息(消息(messagemessage)進行通訊。進行通訊。1.3.2 面向?qū)ο蟮某绦蛟O計面向?qū)ο蟮某绦蛟O計1 基基 本本 概概 念念3 “面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點2 面向?qū)ο蟮能浖_發(fā)方法面向?qū)ο蟮能浖_發(fā)方法1基基 本本 概概 念念1 基基 本本 概概 念念屬性屬性行為行為表針表針旋鈕旋鈕其他機械機構其他機械機構調(diào)節(jié)旋鈕調(diào)節(jié)旋鈕對 象1 基基 本本 概概 念念是一個抽象的概念,用來描述某一類對象所共是一個抽象的概念,用來描述某一類對象所共有的、本質(zhì)的屬性和類行為。有的、本質(zhì)的屬性和類行為。 類類類的一個具體實現(xiàn),稱為實例類的一
15、個具體實現(xiàn),稱為實例手表手表 一塊手表一塊手表類類 對象對象描述這類對象共有的、本質(zhì)的屬性和行為描述這類對象共有的、本質(zhì)的屬性和行為手表共有的屬性(表針、旋鈕、內(nèi)部結構)手表共有的屬性(表針、旋鈕、內(nèi)部結構)和行為(調(diào)節(jié)旋鈕)和行為(調(diào)節(jié)旋鈕)具體到一只圓形的或方形的手表具體到一只圓形的或方形的手表1基基 本本 概概 念念我們把對象之間產(chǎn)生我們把對象之間產(chǎn)生相互作用相互作用所傳遞的所傳遞的信息信息稱做消息。稱做消息。 消消 息息啟啟 動動發(fā)送消息發(fā)送消息接收并響應消息接收并響應消息轉(zhuǎn)轉(zhuǎn) 向向2面向?qū)ο蟮能浖_發(fā)方法面向?qū)ο蟮能浖_發(fā)方法面向?qū)ο筌浖_發(fā)的根本面向?qū)ο筌浖_發(fā)的根本合理性合理性在
16、于它符在于它符合客觀世界的組成方式和大腦的思維方式。合客觀世界的組成方式和大腦的思維方式。在大型程序開發(fā)過程中,編碼只是其中很在大型程序開發(fā)過程中,編碼只是其中很小一部分,應當采用工程化的方法,并將面小一部分,應當采用工程化的方法,并將面向?qū)ο蟮乃枷胴灤┯谲浖_發(fā)全過程,這就向?qū)ο蟮乃枷胴灤┯谲浖_發(fā)全過程,這就是是面向?qū)ο蟮能浖こ堂嫦驅(qū)ο蟮能浖こ獭C嫦鄬ο蟮能浖こ掏瑯幼裱嫦鄬ο蟮能浖こ掏瑯幼裱謱映橄蠓謱映橄?、逐步細化逐步細化的原則。軟件開發(fā)過程包括以下五的原則。軟件開發(fā)過程包括以下五個階段:個階段: 2 面向?qū)ο蟮能浖_發(fā)方法面向?qū)ο蟮能浖_發(fā)方法測試的任務在于發(fā)現(xiàn)并改正程序中的
17、錯誤。測試的任務在于發(fā)現(xiàn)并改正程序中的錯誤。面向?qū)ο蟮姆治雒嫦驅(qū)ο蟮姆治?OOA)面向?qū)ο蟮脑O計面向?qū)ο蟮脑O計(OOD)面向?qū)ο蟮木幊堂嫦驅(qū)ο蟮木幊?OOP)面向?qū)ο蟮臏y試面向?qū)ο蟮臏y試(OOT)分析階段的主要任務是按照面向?qū)ο蟮母拍詈头椒?,從問題中分析階段的主要任務是按照面向?qū)ο蟮母拍詈头椒ǎ瑥膯栴}中識識別別出有意義的出有意義的對象對象,以及對象的,以及對象的屬性屬性、行為行為和對象間的和對象間的通信通信,進而,進而抽象抽象出類結構,最終將它們描述出來,形成一個出類結構,最終將它們描述出來,形成一個需求模型需求模型。設計階段從需求模型出發(fā),分別進行類的設計和應用程序的設計。設計階段從需求模型
18、出發(fā),分別進行類的設計和應用程序的設計。編程階段實現(xiàn)由設計表示到面向?qū)ο蟪绦蛟O計語言描述的轉(zhuǎn)換。編程階段實現(xiàn)由設計表示到面向?qū)ο蟪绦蛟O計語言描述的轉(zhuǎn)換。面向?qū)ο蟮木S護面向?qū)ο蟮木S護(OOSM)3“面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點(1)封裝性封裝性(2) 繼承與派生性繼承與派生性(3) 多態(tài)性多態(tài)性3 “面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點封裝性封裝性內(nèi)內(nèi)外外機械零件機械零件動作動作調(diào)節(jié)旋鈕調(diào)節(jié)旋鈕讀表盤讀表盤對象是一個對象是一個封裝體封裝體,在其中封裝了該,在其中封裝了該對象的屬性和操作。通過限制對屬性和操對象的屬性和操作。通過限制對屬性和操作的訪問權限,可以將屬性作的
19、訪問權限,可以將屬性“隱藏隱藏”在對在對象內(nèi)部,對外提供一定的象內(nèi)部,對外提供一定的接口接口,在對象之,在對象之外只能通過接口對對象進行操作。外只能通過接口對對象進行操作。C+C+通過建立數(shù)據(jù)類型通過建立數(shù)據(jù)類型類類來支持封來支持封裝和數(shù)據(jù)隱藏。裝和數(shù)據(jù)隱藏。封裝性增加了封裝性增加了對象的獨對象的獨立性立性,從而保證了,從而保證了數(shù)據(jù)的可靠性數(shù)據(jù)的可靠性。一個。一個定義完好的類可以作為定義完好的類可以作為獨立模塊獨立模塊使用。使用。汽車汽車客車客車貨車貨車小轎車小轎車大客車大客車載貨載貨載人載人小,速度快小,速度快大,速度慢大,速度慢3 “面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點繼承與派
20、生繼承與派生以汽車為例看客觀世界描述事物的方式:以汽車為例看客觀世界描述事物的方式:當定義了一個類后,又需定義當定義了一個類后,又需定義一個新類,這個新類與原來的類一個新類,這個新類與原來的類相比,只是增加或修改了部分屬相比,只是增加或修改了部分屬性和操作,這時可以用原來的類性和操作,這時可以用原來的類派生派生出新類,新類中只需描述自出新類,新類中只需描述自己所特有的屬性和操作。己所特有的屬性和操作。面向?qū)ο蟪绦蛟O計提供了類似的機制:面向?qū)ο蟪绦蛟O計提供了類似的機制:繼承性大大簡化了對問題的描述,大大提高了程序的可重繼承性大大簡化了對問題的描述,大大提高了程序的可重用性,從而提高了程序設計、修
21、改、擴充的效率。用性,從而提高了程序設計、修改、擴充的效率。新類稱為新類稱為子類子類或或派生類派生類,原來的類稱為,原來的類稱為基類基類。派生可以一直。派生可以一直進行下去,形成一個派生樹。進行下去,形成一個派生樹。3“面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點語文、數(shù)學、英語、政治、語文、數(shù)學、英語、政治、物理、化學、生物物理、化學、生物多態(tài)性多態(tài)性多態(tài)性指,多態(tài)性指,同一個同一個消息消息被被不同對象不同對象接收時,接收時,產(chǎn)生產(chǎn)生不同結果不同結果,即實現(xiàn),即實現(xiàn)同一接口,不同方法同一接口,不同方法。高中生計計 算算平均成績平均成績大學生高數(shù)、英語、計算機、線高數(shù)、英語、計算機、線性代數(shù)
22、性代數(shù)3 “面向?qū)ο竺嫦驅(qū)ο蟆背绦蛟O計的特點程序設計的特點繼承繼承和和多態(tài)多態(tài)性組合,可以生成很多相性組合,可以生成很多相似但又獨一無二的對象。似但又獨一無二的對象。繼承繼承性使得這性使得這些對象可以共享許多相似特性,而些對象可以共享許多相似特性,而多態(tài)多態(tài)又使同一個操作對不同對象產(chǎn)生不同表又使同一個操作對不同對象產(chǎn)生不同表現(xiàn)形式。這樣不僅提高了程序設計的靈現(xiàn)形式。這樣不僅提高了程序設計的靈活性,而且減輕了分別設計的負擔。活性,而且減輕了分別設計的負擔。1.4 算法的設計與分析算法的設計與分析1.4.1 算算 法法 的的 概概 念念 1.4.3 常常 用用 算算 法法 介介 紹紹 1.4.2
23、算算 法法 的的 表表 示示1.4.1 算算 法法 的的 概概 念念 通俗地說,算法就是解決問題的步驟。通俗地說,算法就是解決問題的步驟。算法是程序設計學習的重點。算法是程序設計學習的重點。用計算機解決問題的算法應具有以下特征:用計算機解決問題的算法應具有以下特征:(1)(1) 可執(zhí)行性可執(zhí)行性(2)(2) 確定性確定性(3)(3) 有窮性有窮性(4)(4) 可輸入輸出信息可輸入輸出信息1.4.2算法的表示及三種基本結構算法的表示及三種基本結構3 循循 環(huán)環(huán) 結結 構構1 1 順順 序序 結結 構構2 分分 支支 結結 構構num115;1.4.2算法的表示及三種基本結構算法的表示及三種基本結
24、構(1) 順序結構順序結構【例【例1 11 1】 求兩求兩數(shù)之和。數(shù)之和。塊1塊2塊3流程圖 寄存器35顯示結果:顯示結果:35 num115 num220 sum35num220;sumnum1+num2; 演示算法執(zhí)行過程演示算法執(zhí)行過程輸出輸出sum;1.4.2算法的表示及三種基本結構算法的表示及三種基本結構(2) 分支結構分支結構【例【例12】 輸入三個數(shù),輸出其中的最大數(shù)。輸入三個數(shù),輸出其中的最大數(shù)。 x7;y12;z10;if(xy) maxx;else max y;if (zmax) maxz;輸出輸出max;x7y12z10CPUmax12比較比較比較比較顯示結果:顯示結果:
25、12流程圖流程圖條件塊1塊2真假演示算法執(zhí)行過程演示算法執(zhí)行過程1.4.2算法的表示及三種基本結構算法的表示及三種基本結構(3) 循環(huán)結構循環(huán)結構流程圖流程圖條件塊真假【例【例1 13 3】求】求4 4個整數(shù)的和。個整數(shù)的和。 0sum4count12x顯示結果:顯示結果:59演示算法執(zhí)行過程演示算法執(zhí)行過程123142621642118600count4; /整數(shù)個數(shù)整數(shù)個數(shù)sum0; /累加和的初值累加和的初值while (count0) x輸入一個整數(shù)輸入一個整數(shù); s u m s u m + x ; countcount-1;輸出輸出sum;1.4.3 常用算法介紹常用算法介紹1. 直
26、接法直接法2.枚舉法枚舉法3.遞推法遞推法解決的問題的種類與復雜程度各不相同決定了算解決的問題的種類與復雜程度各不相同決定了算法的多樣性,但從其思想方法上可以將其歸為以下幾法的多樣性,但從其思想方法上可以將其歸為以下幾種:直接法、枚舉法、遞推法、遞歸法、回溯法等等。種:直接法、枚舉法、遞推法、遞歸法、回溯法等等。本節(jié)本節(jié) 將介紹以下三種:將介紹以下三種:1.4.3 常用算法介紹常用算法介紹1 直接法直接法 直接法就是根據(jù)問題給出的條直接法就是根據(jù)問題給出的條件直接求解,前面的很多例子都件直接求解,前面的很多例子都是這種算法的運用。這里不再舉是這種算法的運用。這里不再舉例。例。1.4.3 常用算
27、法介紹常用算法介紹2 枚舉法枚舉法枚舉法也稱枚舉法也稱窮舉法窮舉法,基本思想是,在有限范,基本思想是,在有限范圍內(nèi)圍內(nèi)列舉所有可能列舉所有可能的結果,找出其中符合要求的結果,找出其中符合要求的解。的解。枚舉法適合求解的問題是:問題可能的答案枚舉法適合求解的問題是:問題可能的答案是有限個且答案是可知的,但又難以用解析法是有限個且答案是可知的,但又難以用解析法描述。這種算法通常需要用描述。這種算法通常需要用循環(huán)結構循環(huán)結構來完成。來完成。請看下例:請看下例:【例【例14】 給定一個正整數(shù),判斷其非給定一個正整數(shù),判斷其非負整數(shù)立方根是否存在,若存在,輸出負整數(shù)立方根是否存在,若存在,輸出該立方根。
28、該立方根。1.4.3 常用算法介紹常用算法介紹算法如下:算法如下:分析:設某正整數(shù)為分析:設某正整數(shù)為2727,則非負整數(shù)立方根,則非負整數(shù)立方根的取值范圍為的取值范圍為1 12727,因此可在這一范圍內(nèi)對,因此可在這一范圍內(nèi)對所有整數(shù)進行檢測,滿足立方根為所有整數(shù)進行檢測,滿足立方根為2727的就是的就是所求整數(shù)。所求整數(shù)?!纠纠?4】求非負整數(shù)立方根算法:】求非負整數(shù)立方根算法:1.4.3 常用算法介紹常用算法介紹numcube_root271顯示結果:顯示結果:3演示算法執(zhí)行過程演示算法執(zhí)行過程比比較較c*c*c2比比較較c*c*c3比比較較c*c*cnum27;cube_root1;
29、/立方根初值立方根初值while (cube_rootnum) 輸出輸出 “無整數(shù)立方根無整數(shù)立方根”;1.4.3 常用算法介紹常用算法介紹【例【例15】 判斷一個正整數(shù)是否素數(shù),給出相應結果。判斷一個正整數(shù)是否素數(shù),給出相應結果。分析:假設正整數(shù)分析:假設正整數(shù)numnum, , 如果如果numnum不是不是2 2,需要檢測它是否含有除需要檢測它是否含有除1 1和它本身之外的和它本身之外的其他因子,如果有,就不是素數(shù)。檢測其他因子,如果有,就不是素數(shù)。檢測方法是在方法是在2 2 num-1num-1范圍內(nèi)逐個驗證。實際范圍內(nèi)逐個驗證。實際上可以證明在上可以證明在2 2 numnum平方根范圍
30、內(nèi)逐個平方根范圍內(nèi)逐個驗證即可。驗證即可。假定假定numnum為為9 9,算法如下:,算法如下:num1.4.3 常用算法介紹常用算法介紹【例【例15】 判斷判斷9是否素數(shù)算法是否素數(shù)算法num9i2k3顯示結果:不是素數(shù)顯示結果:不是素數(shù)演示算法執(zhí)行過程演示算法執(zhí)行過程比比較較求求余余為為0比比較較求求余余不為不為03為為0比比較較求求余余num9; if (num=2) 輸出輸出 “是素數(shù)是素數(shù)”;else i2; ksqrt(num); /平方根取整平方根取整 while (ik)輸出輸出 “是素數(shù)是素數(shù)”; else 輸出輸出 “不是素數(shù)不是素數(shù)”;1.4.3 常用算法介紹常用算法介紹
31、3.遞推法遞推法遞推算法是通過問題的一個或多個已知解,遞推算法是通過問題的一個或多個已知解,用同樣的方法逐個推算出其他解,如數(shù)列問題用同樣的方法逐個推算出其他解,如數(shù)列問題以及一些近似計算問題等。通常也要借助于循以及一些近似計算問題等。通常也要借助于循環(huán)。環(huán)。請看下例:請看下例:1.4.3 常用算法介紹常用算法介紹【例【例1】求】求n! 分析:分析:n!=1 2 3n,因此可以從,因此可以從1開開 始,由始,由1!乘以乘以2得到得到2!,再乘以,再乘以3得得到到3!,以此推出,以此推出n!。假定假定n n4 4,算法如下:,算法如下:ni2factorial1.4.3 常用算法介紹常用算法介紹
32、【例【例1】求】求n!算法:算法:顯示結果:顯示結果:24演示算法執(zhí)行過程演示算法執(zhí)行過程124比比較較23比比較較64比比較較24比比較較5factorial1; /階乘初值階乘初值i2;n 4;while (i=n) factorialfactorial*i ;ii+1;輸出輸出 factorial;1.5 C語言與面向?qū)ο蟮恼Z言與面向?qū)ο蟮腃 C C語言是七十年代初貝爾實驗室的語言是七十年代初貝爾實驗室的Dennis Dennis RichieRichie 等人在等人在B B語言基礎上開發(fā)出來的。語言基礎上開發(fā)出來的。C C最初是作最初是作為為UNIXUNIX操作系統(tǒng)的開發(fā)語言為人們所認
33、識。七十年操作系統(tǒng)的開發(fā)語言為人們所認識。七十年代末,隨著微型計算機的發(fā)展,代末,隨著微型計算機的發(fā)展,C C語言開始移植到非語言開始移植到非UNIXUNIX環(huán)境中,并逐步脫離環(huán)境中,并逐步脫離UNIXUNIX系統(tǒng)成為一種獨立的系統(tǒng)成為一種獨立的程序設計語言。程序設計語言。C C 語言版本很多,為了讓開發(fā)出來語言版本很多,為了讓開發(fā)出來的代碼能夠在多種平臺上運行,的代碼能夠在多種平臺上運行,19881988年美國國家標年美國國家標準協(xié)會準協(xié)會ANSIANSI對對C C語言進行了標準化,產(chǎn)生了語言進行了標準化,產(chǎn)生了ANSI CANSI C。1.5 C語言與面向?qū)ο蟮恼Z言與面向?qū)ο蟮腃 (1 1
34、)C C語言既具備高級語言的結構和編程環(huán)境,又提供類似于匯語言既具備高級語言的結構和編程環(huán)境,又提供類似于匯編語言那樣的系統(tǒng)資源操縱能力及程序執(zhí)行效率。編語言那樣的系統(tǒng)資源操縱能力及程序執(zhí)行效率。適合解決有實時要適合解決有實時要求的問題求的問題。C語言的主要特點:(2 2)有豐富的運算符和數(shù)據(jù)類型,表達式類型多樣化,可以方)有豐富的運算符和數(shù)據(jù)類型,表達式類型多樣化,可以方便地實現(xiàn)在其他語言中較難實現(xiàn)的運算,對各種不同類型的程序設計便地實現(xiàn)在其他語言中較難實現(xiàn)的運算,對各種不同類型的程序設計都有良好的適應性。都有良好的適應性。(3 3)以函數(shù)為基礎實現(xiàn)程序的結構化設計,支持大型程序的多)以函數(shù)為基礎實現(xiàn)程序的結構化設計,支持大型程序的多文件構成及單個文件獨立編譯,適合大型復雜程序的設計。文件構成及單個文件獨立編譯,適合大型復雜程序的設計。(4)語言簡潔、緊湊,使用方便、靈活,書寫形式自由。)語言簡潔、緊湊,使用方便、靈活,書寫形式自由。(5)可移植性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 13我能行 第一課時 教學設計 -2023-2024學年道德與法治二年級下冊(統(tǒng)編版)
- 第22課《 皇帝的新裝》教學設計2024-2025學年統(tǒng)編版語文七年級上冊
- 第14課 絲綢之路的開通與經(jīng)營西域2024-2025學年新教材七年級上冊歷史新教學設計(統(tǒng)編版2024)
- 第1課時 除法的初步認識(平均分)(教學設計)-二年級下冊數(shù)學同步備課系列(人教版)
- 綜合性學習《走進小說天地》教學設計2024-2025學年統(tǒng)編版語文九年級上冊
- 第二單元第2課《信息搜索與遴選》教學設計 2023-2024學年蘇教版信息科技七年級上冊
- 年產(chǎn)商品混凝土120萬立方米干混砂漿30萬噸項目可行性研究報告
- 2025年EVA拖鞋項目可行性研究報告
- 第二單元第五節(jié)《管理計算機文件》教學設計 2023-2024學年閩教版初中信息技術七年級上冊
- 中式餐飲外賣平臺與線上訂餐的崛起
- 高中校長在2025春季開學典禮上的講話
- 2025年六年級數(shù)學下冊春季開學第一課(人教版) 2024-2025學年 典型例題系列(2025版)六年級數(shù)學下冊(人教版) 課件
- 1.2 男生女生 (課件)2024-2025學年七年級道德與法治下冊(統(tǒng)編版2024)
- 歷史-遼寧省協(xié)作體2024-2025學年度高三上學期期末考試試題試題和答案
- 民政局2025年度離婚協(xié)議書官方模板4篇
- 2025年銀行安保年度工作計劃
- 臨床藥師進修匯報總結
- 2025年浙江嘉興桐鄉(xiāng)市水務集團限公司招聘10人高頻重點提升(共500題)附帶答案詳解
- 高教版2023年中職教科書《語文》(基礎模塊)上冊教案全冊
- 存款代持協(xié)議書范文模板
- 2023年部編人教版三年級《道德與法治》下冊全冊課件【全套】
評論
0/150
提交評論