C語言實踐教程課件第3章課件_第1頁
C語言實踐教程課件第3章課件_第2頁
C語言實踐教程課件第3章課件_第3頁
C語言實踐教程課件第3章課件_第4頁
C語言實踐教程課件第3章課件_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

3.1軟件開發(fā)過程3.1.1軟件概念在現(xiàn)代軟件工程中軟件概念不僅指程序本身,還包括規(guī)范而完備的文檔材料。其中文檔是軟件“質(zhì)”的部分,而程序則是文檔代碼化的表現(xiàn)形式。3.1.2軟件的特點軟件生產(chǎn)是邏輯思維,集中于開發(fā)而不是制造,因此起決定作用的是人的智能的高效率的發(fā)揮。這與開發(fā)者的個人技術(shù)水平和工作作風有很大的關(guān)系。3.1.3軟件開發(fā)的一般步驟研究軟件的生存周期可分為三個大階段:計劃階段,開發(fā)階段和維護階段。計劃階段:這一階段的任務(wù)是進行問題定義,可行性研究和需求分析。開發(fā)階段:這一階段的任務(wù)就是進行設(shè)計、編碼和測試。維護階段:維護階段的任務(wù)就是通過各種必要的維護活動使系統(tǒng)持久地滿足用戶的需要,通常通過四類維護活動,改正性維護,既診斷和改進在使用過程中發(fā)現(xiàn)的軟件錯誤;適應(yīng)性維護,既修改軟件以適應(yīng)變化的環(huán)境;完善性維護,根據(jù)用戶的要求改進或擴充軟件使它更加完善;預(yù)防性維護,既修改軟件為將來的維護活動做準備。3.1.4軟件開發(fā)時常見的錯誤觀念只要有對總目標的一般性描述,就可以開始寫代碼了,其他細節(jié)問題可以再補充。給出程序,并且運行了任務(wù)就算完成任務(wù)。軟件靈活性大,易于修改。沒有必要進行評審進度耽誤了,可以增加人員。軟件工作直到交付使用為止3.2結(jié)構(gòu)化程序設(shè)計3.2.1結(jié)構(gòu)化程序設(shè)計的一般概念程序設(shè)計優(yōu)劣的判定標準

(1)功能應(yīng)能滿足用戶目標要求;(2)可靠性應(yīng)達到預(yù)定水平;(3)用戶界面友好;(4)在規(guī)定的條件下執(zhí)行時間要短;(5)資源消耗少;(6)可維護性好;(7)可移植性高;結(jié)構(gòu)化程序設(shè)計原則

(1)大型程序,按功能劃分模塊。(2)每一個基本程序單元,具有“獨立程序“的特征,既單入口,單出口;強調(diào)由3種基本結(jié)構(gòu)(順序、選擇、循環(huán))組成;嚴格限制使用goto語句;不包含無限循環(huán),即程序執(zhí)行時間是有限的;程序中所有語句都應(yīng)有執(zhí)行的機會;書寫格式清晰。按上述原則進行設(shè)計,就稱為結(jié)構(gòu)化程序設(shè)計。結(jié)構(gòu)化程序設(shè)計的優(yōu)點在于能使結(jié)構(gòu)清晰,風格固定,便于理解、交流和維護。其缺點是設(shè)計出的程序運行效率有所降低。3.2.2自頂向下逐步求精模塊程序設(shè)計思想程序模塊化的優(yōu)點包括:(1)便于將復(fù)雜問題轉(zhuǎn)化為個別小問題。(2)便于從抽象到具體地進行程序設(shè)計。(3)便于測試和維護。采用模塊化原則設(shè)計程序時,某個模塊所包含的信息(過程和數(shù)據(jù))其他模塊不需要知道,既不能訪問,以體現(xiàn)模塊的獨立性。(4)便于理解分析程序。在對模塊化程序進行分析時,由于每個模塊功能明確,彼此獨立,所以可以采用自頂向下的分析方法,首先確定每個模塊的功能,進而理解整個程序。自頂向下逐步求精的程序設(shè)計方法自頂向下設(shè)計的一個重要特點是,對某一層來說,下一層設(shè)計的細節(jié)是隱藏起來的,只要那些必須通過接口的數(shù)據(jù)和控制才有定義。如果一個數(shù)據(jù)結(jié)構(gòu)被整個包含在某個低層模塊之中。在設(shè)計到達該層之前,沒有必要進行描述。但當數(shù)據(jù)必須由某層的幾個模塊共享時,則必須在進展到該層之前就選定數(shù)據(jù)結(jié)構(gòu)。逐步求精的特點是考慮問題時先整體后局部,先抽象后具體。它要求從問題的全局出發(fā),首先明確“做什么“,接著將其進一步分解成若干子任務(wù)分而治之。一步一步精細化,每步都向程序的最終形式接近一點,直到獲得一個在你所使用的計算機系統(tǒng)上可執(zhí)行的程序為止。由此可見,通常把自頂而下逐步求精及模塊化設(shè)計結(jié)合起來實現(xiàn)程序的結(jié)構(gòu)化設(shè)計。

程序中常見的錯誤有兩種:一種是語法錯誤:另一種是邏輯錯誤。語法錯誤一般會在源程序被編譯時由編譯程序及時發(fā)現(xiàn),因此相對比較容易排除。而程序的邏輯錯誤常常是潛在的。例如,在程序中使用了零作除數(shù),將導(dǎo)致程序執(zhí)行時出現(xiàn)異常,而這種錯誤編譯程序可能無法查出。這就要求程序設(shè)計者根據(jù)設(shè)計文擋。反復(fù)地,不厭其煩地閱讀程序并精心設(shè)計測試用例,力求及時發(fā)現(xiàn)程序中的錯誤。

測試的目的是發(fā)現(xiàn)程序中的錯誤,而程序的目標是開發(fā)出高質(zhì)量的完全符合用戶需求的程序,因此,發(fā)現(xiàn)錯誤必須要改正錯誤,這又是調(diào)試的目的。調(diào)試是測試階段最困難的工作。程序測試過程涵蓋了整個程序生命周期的過程。包括需求定義階段的需求測試、編碼階段的單元測試、集成測試以及后期的確認測試、系統(tǒng)測試,驗證程序是否合格、能否交付用戶使用等。3.3.1程序測試原則在測試階段,應(yīng)遵從以下測試原則。設(shè)計測試用例設(shè)計測試用例時,應(yīng)給出測試的預(yù)期結(jié)果。

設(shè)計非法輸入的測試用例一個程序,不僅是當輸入是合法的時候,能正確運行,而且當有非法輸入(有意的和無意的)時,還能夠拒絕接受那些非法輸入并給出提示信息。進行回歸測試對于程序的任何修改都有可能引入新的錯誤,用以前測試用例進行回歸測試,有助于發(fā)現(xiàn)由于修改程序而引入的新錯誤。

集中測試容易出錯的程序段對一些測試進行統(tǒng)計的結(jié)果表明:一段程序中已發(fā)現(xiàn)的錯誤數(shù)越多,則其中存在錯誤的概率也就越大。為了提高測試的效率,在進行深入的測試時,要集中測試那些容易出錯即出錯多的程序段。妥善保存測試計劃、測試用例、出錯統(tǒng)計和最終分析報告,為維護提供方便。

一個好的測試用例是能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤的用例;一個成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。3.3.2.程序測試的常用方法從是否需要執(zhí)行被測程序的角度,程序測試方法和技術(shù)分為靜態(tài)測試和動態(tài)測試;同時按功能他們又被劃分為白盒測試和黑盒測試。靜態(tài)測試:靜態(tài)測試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。動態(tài)測試:動態(tài)測試是基于計算機的測試,是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。

白盒測試方法:也稱結(jié)構(gòu)測試。它是將程序視為一個透明的盒子,即根據(jù)程序的內(nèi)部結(jié)構(gòu)和處理過程,對程序的所有邏輯路徑進行測試。

黑盒測試方法黑盒測試方法簡稱黑盒法,也稱功能測試。它是著眼于程序的外部特征,而不考慮程序的內(nèi)部邏輯構(gòu)造。黑盒法是在程序的接口上進行測試,看它能否滿足功能要求,輸入能否正確接收,并能否輸出正確的結(jié)果,以及外部信息(如數(shù)據(jù)文件)的完整性能否保持。黑盒法主要有等價類劃分法、邊界值分析法、錯誤推測法和因果圖法等。3.3.3程序測試過程程序測試是保證程序質(zhì)量的重要手段。程序測試過程分4個步驟,即單元測試、集成測試、驗收測試和系統(tǒng)測試。

單元測試單元測試是對程序設(shè)計的最小單位——模塊(程序單元)進行正確性檢驗測試。單元測試主要針對模塊的以下5個基本特性進行:①模塊接口測試——測試通過模塊的數(shù)據(jù)流;②數(shù)據(jù)結(jié)構(gòu)測試;③重要的執(zhí)行路徑檢查;④出錯處理測試;⑤影響以上各點及其他相關(guān)點的邊界條件測試。單元測試方法可以采用靜態(tài)分析和動態(tài)測試。這兩種測試可以互補。

在進行模塊測試時,必須設(shè)計一個驅(qū)動模塊和若干個樁模塊。

驅(qū)動模塊的作用是模擬被測試模塊的調(diào)用模塊。樁模塊的作用是模擬被測試模塊的下屬模塊。

集成測試集成測試是在組裝程序的過程中,對組裝的模塊進行測試。集成測試包括了子系統(tǒng)測試和系統(tǒng)測試。集成測試所涉及的內(nèi)容包括:程序單元的接口測試、全局數(shù)據(jù)結(jié)構(gòu)測試、邊界條件和非法輸入的測試等。確認測試與系統(tǒng)測試①確認測試確認測試的任務(wù)是驗證程序的功能和性能。②系統(tǒng)測試系統(tǒng)測試是把通過測試確認的程序,作為整個基于計算機系統(tǒng)的一個元素,與計算機硬件、外設(shè)、支撐程序、數(shù)據(jù)和人員等其他系統(tǒng)元素組合在一起,在實際運行(使用)環(huán)境下對計算機系統(tǒng)進行一系列的集成測試和確認測試。3.3.4程序的調(diào)試程序調(diào)試(通常稱Debug,即排錯)程序調(diào)試活動由兩部分組成:一是根據(jù)錯誤的跡象確定程序中錯誤的確切性質(zhì)、原因和位置。二是對程序進行修改,排除這個錯誤。程序調(diào)試的基本步驟:(1)錯誤定位;(2)修改設(shè)計和代碼;(3)進行回歸測試;

程序調(diào)試方法程序調(diào)試可以分為靜態(tài)調(diào)試和動態(tài)調(diào)試。靜態(tài)調(diào)試主要是指通過人的思維來分析源程序代碼和排錯;動態(tài)調(diào)試是輔助靜態(tài)調(diào)試的。主要的調(diào)試方法采用:(1)強行排錯法(2)回溯法

(3)原因排除法原因排除法是通過演繹和歸納,以及二分法來實現(xiàn)。

演繹法是列出所有可能的原因和假設(shè),然后排除一個又一個不可能的原因,直到剩下最后一個真正的原因為止。歸納法是一種從特殊推斷出一般的系統(tǒng)化思考方法。其基本思想是從一些線索著手,通過分析尋找到潛在的原因,從而找出錯誤。二分法的基本思想是,如果已知每個變量在程序中若干個關(guān)鍵點的正確值,則可以使用定值語句(如賦值語句、輸入語句等)在程序中的某點附近給這些變量賦以正確值,然后運行程序并檢查程序的輸出。如果輸出結(jié)果是正確的,則錯誤原因在程序的前半部分;反之,錯誤原因在程序的后半部分。對錯誤原因所在的部分重復(fù)使用這種方法,直到將出錯范圍縮小到容易診斷的程度為止。3.4算法3.4.1算法的概念為解決問題而采用的方法和步驟就稱為算法。計算機的算法就是為實現(xiàn)某個任務(wù)而構(gòu)成的指令集,是有窮的計算過程。它規(guī)定了在程序中如何對數(shù)據(jù)進行正確處理的運算步驟。著名科學家Wirth(沃思)提出一個著名的公式表達程序設(shè)計的實質(zhì):程序=算法+數(shù)據(jù)結(jié)構(gòu)顯然,在程序設(shè)計中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,算法解決的是“做什么”和“怎么做”的問題。程序中的操作語句就是對算法的實現(xiàn)。

有的算法可能只需要很少的步驟而有些算法則需要較多的步驟。一般而言,應(yīng)該選擇易于理解、簡單、步驟少的算法。所以在進行算法設(shè)計時,不僅要保證算法的正確性,還要考慮算法的質(zhì)量。選擇合適的算法。3.4.2算法的特性

1.有窮性

2.確定性

3.有效性

4.有零個或多個輸入輸入是指在算法執(zhí)行時,需要從外界取得的信息。一個算法可以沒有輸入,也可以有一個或多個輸入,這都取決于問題本身。

5.有一個或多個輸出輸出就是將算法執(zhí)行的結(jié)果送到輸出設(shè)備。沒有輸出的算法是無意義的。上述5個方面是一個正確算法應(yīng)具備的特征,同時算法還應(yīng)該具有直觀,清晰、易懂的表示形式,便于維護、修改和交流。3.4.3算法的描述方法描述一個算法,可以用多種不同的表示方法。常見的有自然語言表示法、流程圖、N—S圖、偽代碼和PAD圖等。3.4.3.1用自然語言表示算法通常自然語言只用來描述簡單的問題。3.4.3.2用流程圖表示算法傳統(tǒng)的流程圖

流程圖是算法的圖形描述工具。它用幾何圖形來表示各種操作,直觀形象、易于理解,是最常用的一種描述算法的方法。美國國家標準化協(xié)會(AmericanNationalStandardInstitute,ANSI)規(guī)定了一些常用的流程圖符號。用流程圖表示三種基本結(jié)構(gòu)

1966年,Bohar和Jacopini提出以下三種基本結(jié)構(gòu),通常用這三種基本結(jié)構(gòu)來作為表示一個良好算法的基本單元。順序結(jié)構(gòu):選擇結(jié)構(gòu),也叫分支結(jié)構(gòu);循環(huán)結(jié)構(gòu),也稱為重復(fù)結(jié)構(gòu)。它又可分為兩種類型:當型(while型)循環(huán)結(jié)構(gòu);直到型(until型)循環(huán)結(jié)構(gòu),順序結(jié)構(gòu)選擇結(jié)構(gòu)直到型(until型)循環(huán)結(jié)構(gòu)3.4.3.3用N-S圖表示算法在傳統(tǒng)流程圖中,由于流程線的隨意性,使流程圖變得毫無規(guī)律,大大降低了算法的可讀性。

1973年美國學者Nassi和Shneiderman提出了一種新的流程圖形式——N-S圖。全部算法寫在一個矩形框內(nèi),在該框內(nèi)還可以包含其他的從屬于它的框。這種流程圖非常適合于結(jié)構(gòu)化的程序設(shè)計。順序執(zhí)行條件執(zhí)行當型循環(huán)直到型循環(huán)

例:先后輸入若干個正整數(shù),要求求出其中最大的數(shù),當輸入的數(shù)小于0時結(jié)束。用N-S流程圖表示算法3.4.3.4用偽代碼表示算法偽代碼是用介于自然與計算機語言之間的文字及符號來描述算法的。3.4.3.5用計算機語言表示算法眾所周知,計算機是無法識別流程圖和偽代碼的,只能識別用計算機語言編寫的程序。因此,在用流程圖或偽代碼描述了一個算法后,還必須將其轉(zhuǎn)化為計算機語言程序。當然用計算機語言表示算法必須嚴格遵守所用語言的語法規(guī)則。3.5程序設(shè)計基本算法舉例算法可分為兩大類別:數(shù)值運算和非數(shù)值運算。數(shù)值運算的目的是得到數(shù)值解。而非數(shù)值運算應(yīng)用的范圍更為廣泛,最常見的是用于事務(wù)管理領(lǐng)域,例如信息檢索、信息管理等。當前,計算機在非數(shù)值運算方面的應(yīng)用比例遠遠超過了在數(shù)值運算方面的應(yīng)用。3.5.4常見算法3.5.4.2查找查找是數(shù)據(jù)結(jié)構(gòu)中的基本運算,常見的兩種查找方法是順序查找和折半查找。

順序查找順序查找的查找過程為:從表的一端開始,向表的另一端逐個進行記錄的關(guān)鍵字和給定值的比較,若某個記錄的關(guān)鍵字與給定值相等,則表示查找成功,并給出記錄在查找表中的位置;否則,若經(jīng)過比較所有記錄的關(guān)鍵字與給定值比較逗不相等,則表示查找失敗,給出失敗信息。

折半查找折半查找又稱為二分法查找,要求查找表中的記錄必須按關(guān)鍵字有序排列,并且查找表必須以順序方式存儲。其查找過程為:在有序的查找表中,取中間位置記錄作為比較對象,若給定值與中間位置記錄關(guān)鍵字相等,則表示查找成功;若給定值大于中間位置記錄的值,則繼續(xù)查找大的一邊;若給定值小于中間位置記錄關(guān)鍵字,則繼續(xù)查找小的一邊。如此不斷重復(fù)上述查找過程,直到查找成功,若所查找范圍內(nèi)所有記錄的關(guān)鍵字都與給定值不等,則查找失敗。3.5.4.3排序冒泡排序法冒泡排序法是基于交換思想的一種簡單排序方法。其算法基本思想是:將待排序的記錄順次兩兩比較,若前者大于后者,則兩記錄交換。如此重復(fù)將所有記錄處理一遍的過程稱為一趟冒泡排序。其結(jié)果是將關(guān)鍵字最大的記錄交換到最后的位置。對于n個記錄的序列進行排序,最多需要n-1趟冒泡排序。具體步驟如下。(1)有n個數(shù)(存放在數(shù)組[a]中),第一趟將每相鄰的兩個數(shù)比較,小的調(diào)到前頭,經(jīng)n-1次兩兩相鄰比較后,最大的數(shù)已“沉底”,放在最后一個位置,小數(shù)上升“浮起”。(2)第二趟對余下的n-1個數(shù)(最大數(shù)已“沉底”)按上述方法進行比較,經(jīng)n-2次兩兩相鄰比較后得次大的數(shù)。(3)以此類推,將n個數(shù)進行n-1次比較,在第j趟中要進行n-j次兩兩比較。

簡單選擇排序法簡單選擇排序法的基本算法思想是:每一趟在n-i+1(i=1,2,…,n-1)個記錄中選定關(guān)鍵字最小的記錄作為有序序列中第i個記錄。具體步驟如下:(1)對有n個數(shù)的序列從中選出最小(升序)或最大(降序)的數(shù),與第一個數(shù)交換位置。(2)除第1個數(shù)外,其余n-1個數(shù)中最小或最大的數(shù),與第2個數(shù)交換位置。(3)以此類推,選擇了n-1次后,這個數(shù)列已按升序(降序)排列。

3.6C語言程序設(shè)計風格3.6.1C語言程序結(jié)構(gòu)特點無論涉及的問題是復(fù)雜還是簡單,規(guī)模是大還是小,用C語言設(shè)計程序,任務(wù)只有一個,就是編寫函數(shù),至少也要編寫一個主函數(shù)。執(zhí)行C程序就是執(zhí)行相應(yīng)的主函數(shù)。即從它的主函數(shù)的第一個左花括號開始,依次執(zhí)行后面的語句,直到最后的右花括號為止。其他函數(shù)只有在執(zhí)行主函數(shù)的過程中被調(diào)用時才執(zhí)行。3.6.2C語言程序設(shè)計風格

C語言中“函數(shù)”的概念和數(shù)學中的“函數(shù)”概念不完全相同。C語言中的“函數(shù)”實際上是“功能”的意思,其實就是一段程序。當需要完成某一個功能時,就用一個函數(shù)(可以是標準函數(shù)或自己設(shè)計的函數(shù))去實現(xiàn)它。進行程序設(shè)計時,我們首先集中考慮main()函數(shù)中的算法。當main()中需要使用某一功能時,我們就先寫上一個調(diào)用具有該功能的函數(shù)表達式。這時的函數(shù)相當于一個黑盒子。我們只需知道它具有什么功能。設(shè)計完main()的算法并檢驗無誤后,我們開始考慮它所調(diào)用的函數(shù)。

在這些被調(diào)用的函數(shù)中,若在庫函數(shù)中可以找到,那就直接使用它,否則由用戶來設(shè)計這些函數(shù)。這樣設(shè)計的程序從邏輯關(guān)系上就形成了層次結(jié)構(gòu)。這個層次結(jié)構(gòu)的形成是自頂向下的。這種方法也是自頂向下、逐步求精的C語言程序設(shè)計方法。可以看出,這種方法允許程序員在進行程序設(shè)計時,每個階段都能集中精力解決只屬

溫馨提示

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

評論

0/150

提交評論