新版第4章計算機(jī)程序設(shè)計與語言_第1頁
新版第4章計算機(jī)程序設(shè)計與語言_第2頁
新版第4章計算機(jī)程序設(shè)計與語言_第3頁
新版第4章計算機(jī)程序設(shè)計與語言_第4頁
新版第4章計算機(jī)程序設(shè)計與語言_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第4章章 計算機(jī)程序設(shè)計與語言計算機(jī)程序設(shè)計與語言程序設(shè)計的基本概念程序設(shè)計的基本概念模型的建立、算法的設(shè)計和表達(dá)模型的建立、算法的設(shè)計和表達(dá)程序的編寫、測試和維護(hù)程序的編寫、測試和維護(hù)程序文檔的建立程序文檔的建立程序設(shè)計語言的應(yīng)用程序設(shè)計語言的應(yīng)用4.1 概述概述4.1.1 計算機(jī)程序計算機(jī)程序4.1.2 程序設(shè)計程序設(shè)計語言語言4.1.3 程序設(shè)計程序設(shè)計步驟步驟4.1.1 計算機(jī)程序計算機(jī)程序程序是計算機(jī)執(zhí)行任何操作的驅(qū)動力,是計算機(jī)程序是計算機(jī)執(zhí)行任何操作的驅(qū)動力,是計算機(jī)為完成某一任務(wù)所必須執(zhí)行的一系列指令。沒有程為完成某一任務(wù)所必須執(zhí)行的一系列指令。沒有程序,計算機(jī)就像原地待命的

2、士兵,什么也不會做。序,計算機(jī)就像原地待命的士兵,什么也不會做。從存儲的角度來看,程序就是保存在磁盤上的指從存儲的角度來看,程序就是保存在磁盤上的指令序列。令序列。除了少量特殊程序外,程序在沒有啟動時大多以除了少量特殊程序外,程序在沒有啟動時大多以文件的形式存儲在磁盤等外存儲器上。文件的形式存儲在磁盤等外存儲器上。4.1.2 程序設(shè)計程序設(shè)計語言語言計算機(jī)語言是人與計算機(jī)之間傳遞信息的媒介。計算機(jī)語言是人與計算機(jī)之間傳遞信息的媒介。為了使計算機(jī)進(jìn)行各種工作,必須將人們的意圖為了使計算機(jī)進(jìn)行各種工作,必須將人們的意圖用計算機(jī)語言告訴計算機(jī)。電腦做的每個動作、用計算機(jī)語言告訴計算機(jī)。電腦做的每個動

3、作、執(zhí)行的每個步驟,都是按照用計算機(jī)語言編好的執(zhí)行的每個步驟,都是按照用計算機(jī)語言編好的程序來執(zhí)行的,所以,要控制計算機(jī)就必須通過程序來執(zhí)行的,所以,要控制計算機(jī)就必須通過計算機(jī)語言向計算機(jī)發(fā)出命令。計算機(jī)語言向計算機(jī)發(fā)出命令。自從有了計算機(jī),計算機(jī)程序設(shè)計語言就出現(xiàn)了,自從有了計算機(jī),計算機(jī)程序設(shè)計語言就出現(xiàn)了,人們針對不同的應(yīng)用領(lǐng)域開發(fā)出了上千種編程語人們針對不同的應(yīng)用領(lǐng)域開發(fā)出了上千種編程語言。言。4.1.2 程序設(shè)計程序設(shè)計語言語言 計算機(jī)語言的發(fā)展經(jīng)歷了機(jī)器語言、匯編語言和高級語計算機(jī)語言的發(fā)展經(jīng)歷了機(jī)器語言、匯編語言和高級語言三個階段。言三個階段。機(jī)器語言是計算機(jī)能直接執(zhí)行的二進(jìn)制

4、形式的語言。機(jī)器語言是計算機(jī)能直接執(zhí)行的二進(jìn)制形式的語言。匯編語言的實質(zhì)和機(jī)器語言是相同的,都是直接對硬件操匯編語言的實質(zhì)和機(jī)器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標(biāo)識符,更容易識別和記作,只不過指令采用了英文縮寫的標(biāo)識符,更容易識別和記憶。憶。高級語言更接近自然語言和數(shù)學(xué)語言,和匯編語言相比,高級語言更接近自然語言和數(shù)學(xué)語言,和匯編語言相比,它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細(xì)節(jié),如使用堆棧、寄與具體操作有關(guān)但與完成工作無關(guān)的細(xì)節(jié),如使用堆棧、寄存器等,這樣就大大簡化

5、了程序中的指令,使程序員可以離存器等,這樣就大大簡化了程序中的指令,使程序員可以離開機(jī)器層次,在更抽象的層次上表達(dá)意圖,以接近問題本質(zhì)開機(jī)器層次,在更抽象的層次上表達(dá)意圖,以接近問題本質(zhì)的方式去思考和描述問題。的方式去思考和描述問題。4.1.2 程序設(shè)計程序設(shè)計語言語言高級語言所編制的程序不能直接被計算機(jī)識別,必須經(jīng)高級語言所編制的程序不能直接被計算機(jī)識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行。過轉(zhuǎn)換才能被執(zhí)行。高級語言并不是特指某種具體的語言,而是包括了很多高級語言并不是特指某種具體的語言,而是包括了很多種編程語言,如目前流行的種編程語言,如目前流行的VB、C+、Java、Perl 等,等,這些語言的語法

6、、命令格式都各不相同。這些語言的語法、命令格式都各不相同。高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計語言,從面向過程到面向?qū)ο蟪绦蛟O(shè)計語言的過程。相應(yīng)語言,從面向過程到面向?qū)ο蟪绦蛟O(shè)計語言的過程。相應(yīng)地,軟件的開發(fā)也由最初的個體手工作坊式的生產(chǎn),發(fā)展地,軟件的開發(fā)也由最初的個體手工作坊式的生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。高級語言的下一個發(fā)展目標(biāo)是面向應(yīng)用,只需要告訴程高級語言的下一個發(fā)展目標(biāo)是面向應(yīng)用,只需要告訴程序你要干什么,程序就能自動生成算法,自動進(jìn)行處理,序你要干什么,程序就能自動生成算法,

7、自動進(jìn)行處理,也就是智能化的程序設(shè)計語言。也就是智能化的程序設(shè)計語言。4.1.3 程序設(shè)計程序設(shè)計步驟步驟(1)建立模型:從實際問題抽象出數(shù)學(xué)模型,即由物理模)建立模型:從實際問題抽象出數(shù)學(xué)模型,即由物理模型到抽象模型,用形式化方法描述現(xiàn)實世界。型到抽象模型,用形式化方法描述現(xiàn)實世界。(2)算法設(shè)計:給出解決問題的方法和步驟,即算法。同)算法設(shè)計:給出解決問題的方法和步驟,即算法。同一個問題可以有不同的解決辦法,從中選取一種最合適的。一個問題可以有不同的解決辦法,從中選取一種最合適的。(3)算法表達(dá):選擇一種或幾種表達(dá)算法的工具,對算法)算法表達(dá):選擇一種或幾種表達(dá)算法的工具,對算法進(jìn)行清晰的

8、表達(dá)。進(jìn)行清晰的表達(dá)。(4)編寫程序:選擇程序設(shè)計語言,把算法程序化。)編寫程序:選擇程序設(shè)計語言,把算法程序化。(5)程序測試和調(diào)試:對編寫好的程序進(jìn)行測試,修改程)程序測試和調(diào)試:對編寫好的程序進(jìn)行測試,修改程序中的錯誤。序中的錯誤。(6)程序文檔編寫與程序維護(hù):整理和編寫程序文檔,以)程序文檔編寫與程序維護(hù):整理和編寫程序文檔,以便更好地維護(hù)程序。便更好地維護(hù)程序。雞兔同籠問題雞兔同籠問題 雞兔同籠,看頭雞兔同籠,看頭36個,看腳個,看腳96只,問籠中有只,問籠中有雞和兔各幾只?雞和兔各幾只? 4.2.1 建立模型建立模型4.2.2 算法設(shè)計算法設(shè)計4.2.3 算法表達(dá)算法表達(dá)4.2.1

9、 建立模型建立模型模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的抽象和簡化。抽象和簡化。模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。模型分為物理模型和數(shù)學(xué)模型兩大類。模型分為物理模型和數(shù)學(xué)模型兩大類。u物理模型由物理元素構(gòu)成,又稱為形象模型。物理模型由物理元素構(gòu)成,又稱為形象模型。u數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成,又稱數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成,又稱為邏輯模型或抽象模型。為邏輯模型或抽象模型。4.2.1 建立模型建立模

10、型物理模型的建立:對客觀存在的事物進(jìn)行形象的物理模型的建立:對客觀存在的事物進(jìn)行形象的描述,列出已知的所有物理元素及其關(guān)系,明確需描述,列出已知的所有物理元素及其關(guān)系,明確需要解決的問題。物理模型中應(yīng)該忽略對解決問題沒要解決的問題。物理模型中應(yīng)該忽略對解決問題沒有意義的客觀事實,如雞、兔的大小,籠子的大小有意義的客觀事實,如雞、兔的大小,籠子的大小等。等。數(shù)學(xué)模型的建立:在物理模型的基礎(chǔ)上,忽略不數(shù)學(xué)模型的建立:在物理模型的基礎(chǔ)上,忽略不重要的細(xì)節(jié)(如在一個籠子里這個事實與要解決的重要的細(xì)節(jié)(如在一個籠子里這個事實與要解決的問題無關(guān)),抓住本質(zhì)性的元素,對其符號化后,問題無關(guān)),抓住本質(zhì)性的元

11、素,對其符號化后,再用數(shù)學(xué)的方法描述出來。再用數(shù)學(xué)的方法描述出來。4.2.1 建立模型建立模型模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的模型是對現(xiàn)實系統(tǒng)的一種描述,是對現(xiàn)實系統(tǒng)的抽象和簡化。抽象和簡化。模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些模型由現(xiàn)實系統(tǒng)的有關(guān)元素組成,能夠反映這些元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。元素之間的關(guān)系,從而反映現(xiàn)實系統(tǒng)的本質(zhì)。模型分為物理模型和數(shù)學(xué)模型兩大類。模型分為物理模型和數(shù)學(xué)模型兩大類。u物理模型由物理元素構(gòu)成,又稱為形象模型。物理模型由物理元素構(gòu)成,又稱為形象模型。u數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成,又稱數(shù)學(xué)模型由關(guān)系、函數(shù)等數(shù)學(xué)對象符號組成

12、,又稱為邏輯模型或抽象模型。為邏輯模型或抽象模型。雞兔同籠問題的物理模型雞兔同籠問題的物理模型 雞、兔放在同一籠子里,頭有雞、兔放在同一籠子里,頭有36個,腳有個,腳有96只,要計算出有雞和兔子各多少只。當(dāng)然,要解只,要計算出有雞和兔子各多少只。當(dāng)然,要解決這個問題還要用到大家已熟知的事實:每只雞決這個問題還要用到大家已熟知的事實:每只雞是是1個頭個頭2只腳,每只兔子是只腳,每只兔子是1個頭個頭4只腳。只腳。 雞兔同籠問題的數(shù)學(xué)模型雞兔同籠問題的數(shù)學(xué)模型對以上例子,設(shè)雞為對以上例子,設(shè)雞為x只,兔子為只,兔子為y只,則有:只,則有:4.2.2 算法設(shè)計算法設(shè)計 算法是解決問題的方法和步驟。若待

13、解決的算法是解決問題的方法和步驟。若待解決的問題比較復(fù)雜,可能需要將問題進(jìn)行分解,即將問題比較復(fù)雜,可能需要將問題進(jìn)行分解,即將復(fù)雜問題分解為簡單問題的集合。簡單問題對應(yīng)復(fù)雜問題分解為簡單問題的集合。簡單問題對應(yīng)的算法較簡單,設(shè)計起來也就比較容易。這里講的算法較簡單,設(shè)計起來也就比較容易。這里講的算法設(shè)計,涉及程序功能的設(shè)計和數(shù)據(jù)結(jié)構(gòu)的的算法設(shè)計,涉及程序功能的設(shè)計和數(shù)據(jù)結(jié)構(gòu)的設(shè)計等。設(shè)計等。雞兔同籠問題的雞兔同籠問題的算法設(shè)計算法設(shè)計雞兔同籠問題實際上是求二元一次方程組的解的雞兔同籠問題實際上是求二元一次方程組的解的問題,可以用加減消元法解決。問題,可以用加減消元法解決??紤]到算法的通用性,

14、我們可以對一般二元一次考慮到算法的通用性,我們可以對一般二元一次方程組求解。方程組求解。雞兔同籠問題的雞兔同籠問題的算法設(shè)計算法設(shè)計若若a1b2-a2b1 0,方程組有唯一解。用加,方程組有唯一解。用加減消元法求得減消元法求得雞兔同籠問題的雞兔同籠問題的算法設(shè)計算法設(shè)計(1)輸入系數(shù))輸入系數(shù)a1,b1,c1,a2,b2,c2;(2)計算)計算d = a1b2 - a2b1;(3)如果)如果d = 0,打印,打印“方程組無解或有無窮組解方程組無解或有無窮組解”,轉(zhuǎn),轉(zhuǎn) (7) ;(4)計算)計算x = (c1b2 - c2b1) /d;(5)計算)計算y = (a1c2 - a2c1) /d;

15、(6)輸出)輸出x,y;(7)輸入是否繼續(xù)解其他方程組的標(biāo)記)輸入是否繼續(xù)解其他方程組的標(biāo)記s (s = “Y”或或s =“N” ) ;(8)如果)如果s = “Y”,轉(zhuǎn),轉(zhuǎn) (1) ;(9)結(jié)束。)結(jié)束。算法的評價算法的評價對于同一個問題,可能有若干種不同的算法來解決。對于同一個問題,可能有若干種不同的算法來解決。對于算法評價的基本的標(biāo)準(zhǔn)有兩個:對于算法評價的基本的標(biāo)準(zhǔn)有兩個:u時間標(biāo)準(zhǔn)(時間復(fù)雜度),簡單說來,即執(zhí)行這個算法需要時間標(biāo)準(zhǔn)(時間復(fù)雜度),簡單說來,即執(zhí)行這個算法需要多少時間,基本的原則是時間越短越好。對于同樣的問題,多少時間,基本的原則是時間越短越好。對于同樣的問題,如果用算

16、法如果用算法A和和B分別進(jìn)行處理,結(jié)果算法分別進(jìn)行處理,結(jié)果算法A所用的時間更所用的時間更短,那么就認(rèn)為算法短,那么就認(rèn)為算法A更好一些。更好一些。u空間標(biāo)準(zhǔn)(空間復(fù)雜度),即執(zhí)行這個算法需要占用多少資空間標(biāo)準(zhǔn)(空間復(fù)雜度),即執(zhí)行這個算法需要占用多少資源(可以理解為占用了多少計算機(jī)存儲單元),基本的原則源(可以理解為占用了多少計算機(jī)存儲單元),基本的原則是占用的資源越少越好。對于同樣的問題,如果用算法是占用的資源越少越好。對于同樣的問題,如果用算法A和和B分別進(jìn)行處理,結(jié)果算法分別進(jìn)行處理,結(jié)果算法A占用的資源更少,那么就認(rèn)為占用的資源更少,那么就認(rèn)為算法算法A更好一些。更好一些。算法的評價

17、算法的評價 隨著計算機(jī)技術(shù)的發(fā)展,硬件性能不斷提高,隨著計算機(jī)技術(shù)的發(fā)展,硬件性能不斷提高,程序的規(guī)模越來越龐大,算法的清晰程度變成了程序的規(guī)模越來越龐大,算法的清晰程度變成了一個非常重要的問題。對于一個比較復(fù)雜的問題一個非常重要的問題。對于一個比較復(fù)雜的問題來說,如果所給出的算法讓人無法讀懂,那么它來說,如果所給出的算法讓人無法讀懂,那么它也不能算是一個好的算法,因為按照這樣的算法也不能算是一個好的算法,因為按照這樣的算法所編制出來的程序非常難以維護(hù)。因此,算法的所編制出來的程序非常難以維護(hù)。因此,算法的易懂性也是衡量算法好壞的一個重要指標(biāo)。易懂性也是衡量算法好壞的一個重要指標(biāo)。算法的評價算

18、法的評價設(shè)計算法時,還要注意以下幾點:設(shè)計算法時,還要注意以下幾點:u通用性。一個算法總是針對某類問題設(shè)計的,所以對于求解通用性。一個算法總是針對某類問題設(shè)計的,所以對于求解某類問題中的任何一個問題應(yīng)該是有效的。例如,上面給出某類問題中的任何一個問題應(yīng)該是有效的。例如,上面給出的解二元一次方程組的算法就有一定的通用性。的解二元一次方程組的算法就有一定的通用性。u確定性。算法中的每個步驟都是確定的,在什么情況下做什確定性。算法中的每個步驟都是確定的,在什么情況下做什么也非常明確,沒有含糊不清的地方。么也非常明確,沒有含糊不清的地方。u有限性。一個算法在執(zhí)行時,必須經(jīng)過有限步后停下來,結(jié)有限性。一

19、個算法在執(zhí)行時,必須經(jīng)過有限步后停下來,結(jié)束算法執(zhí)行,給出結(jié)果,而不能無限地執(zhí)行下去。盡管這里束算法執(zhí)行,給出結(jié)果,而不能無限地執(zhí)行下去。盡管這里所說的有限步可能是幾十步或者幾百步,也可能是幾萬步或所說的有限步可能是幾十步或者幾百步,也可能是幾萬步或者幾億步,但它仍然是有限步者幾億步,但它仍然是有限步 (嚴(yán)格說來,這里所說的(嚴(yán)格說來,這里所說的“有有限限”只是說明了它和只是說明了它和“無限無限”的區(qū)別。在實際工作中還有一的區(qū)別。在實際工作中還有一個更嚴(yán)格的限制,即實際工作所要求的時間的限制。算法和個更嚴(yán)格的限制,即實際工作所要求的時間的限制。算法和根據(jù)算法所編制的程序,必須在實際工作所規(guī)定的

20、時間內(nèi)給根據(jù)算法所編制的程序,必須在實際工作所規(guī)定的時間內(nèi)給出相應(yīng)的運算結(jié)果)。出相應(yīng)的運算結(jié)果)。4.2.3 算法表達(dá)算法表達(dá)為了提高算法表達(dá)的清晰程度,需要選擇一種合為了提高算法表達(dá)的清晰程度,需要選擇一種合適的描述算法的工具。常用的描述工具有流程圖、適的描述算法的工具。常用的描述工具有流程圖、N-S圖、圖、PAD圖和偽碼等。圖和偽碼等。這些工具不是程序設(shè)計語言,不能直接被計算機(jī)這些工具不是程序設(shè)計語言,不能直接被計算機(jī)執(zhí)行,使用它們的目的就是把算法表述出來。執(zhí)行,使用它們的目的就是把算法表述出來。流程圖流程圖 流程圖(也稱為程序流程圖)是最常用的一種算法表示方流程圖(也稱為程序流程圖)是

21、最常用的一種算法表示方法,它是描述計算機(jī)按一定步驟完成任務(wù)的圖表,能直觀法,它是描述計算機(jī)按一定步驟完成任務(wù)的圖表,能直觀地描述程序執(zhí)行的控制流程。流程圖中地描述程序執(zhí)行的控制流程。流程圖中u 方框表示方框表示“處理處理”,所有處理步驟都可以用這個符號表示;,所有處理步驟都可以用這個符號表示;u 菱形框表示菱形框表示“判斷判斷”,需要對邏輯條件進(jìn)行判斷并選擇下,需要對邏輯條件進(jìn)行判斷并選擇下一步執(zhí)行的路線時用這個符號表示;一步執(zhí)行的路線時用這個符號表示;u 圓角矩形框表示圓角矩形框表示“開始開始”和和“結(jié)束結(jié)束”;u 平行四邊形框表示平行四邊形框表示“輸入輸入”和和“輸出輸出”;u 有向線段表

22、示有向線段表示“控制流控制流”。雞雞兔兔同同籠籠問問題題的的流流程程圖圖偽碼偽碼偽碼表示法相當(dāng)于算法的注釋系統(tǒng),由編程語言和自然語偽碼表示法相當(dāng)于算法的注釋系統(tǒng),由編程語言和自然語言混合而成。言混合而成。偽碼的語法通常沿用某種高級編程語言的語法規(guī)則,如關(guān)偽碼的語法通常沿用某種高級編程語言的語法規(guī)則,如關(guān)鍵字、控制結(jié)構(gòu)等。另外,在描述程序的處理功能時使用鍵字、控制結(jié)構(gòu)等。另外,在描述程序的處理功能時使用自然語言的語句。自然語言的語句。所以偽碼表示法是一種類高級編程語言,但它含有大量的所以偽碼表示法是一種類高級編程語言,但它含有大量的自然語言的語句,計算機(jī)并不能執(zhí)行。用自然語言描述處自然語言的語句

23、,計算機(jī)并不能執(zhí)行。用自然語言描述處理功能,易讀易寫,不必考慮語法規(guī)定,有利于設(shè)計人員理功能,易讀易寫,不必考慮語法規(guī)定,有利于設(shè)計人員把精力放在描述算法的邏輯上。把精力放在描述算法的邏輯上。 雞雞兔兔同同籠籠問問題題的的偽偽碼碼表表示示PROCEDURE求解二元一次方程組求解二元一次方程組 TYPE a1,b1,c1,a2,b2,c2,x,y IS REAL TYPE s IS CHAR DO WHILE TRUE /*輸入方程組系數(shù)輸入方程組系數(shù) READ a1,b1,c1,a2,b2,c2 d=a1*b2-a2*b1 IF d = 0 THEN WRITE 方程組無解或有無窮組解方程組無

24、解或有無窮組解 ELSE /*求方程組的唯一解并輸出求方程組的唯一解并輸出 BEGIN x=(c1*b2-c2*b1)/d y=(a1*c2-a2*c1)/d WRITE x, y END ENDIF /*控制循環(huán)是否結(jié)束控制循環(huán)是否結(jié)束 INPUT 若繼續(xù)循環(huán)輸入若繼續(xù)循環(huán)輸入Y,否則輸入,否則輸入N TO s READ S IF sY THEN EXIT ENDIF ENDDOEND 4.3 程序設(shè)計實現(xiàn)程序設(shè)計實現(xiàn)4.3.1 程序舉例程序舉例4.3.2 編寫程序編寫程序4.3.1 程序舉例程序舉例 雞兔同籠問題的雞兔同籠問題的VFP程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)DO WHILE .T. CLEAR &

25、amp; 清屏清屏 ? 輸入方程組的系數(shù)輸入方程組的系數(shù) INPUT a1= TO a1 INPUT b1= TO b1 INPUT c1= TO c1 INPUT a2= TO a2 INPUT b2= TO b2 INPUT c2= TO c2 d=a1*b2-a2*b1 IF d=0 ? 方程組無解或有無窮組解方程組無解或有無窮組解 ELSE *求方程組的唯一解并輸出求方程組的唯一解并輸出 x=(c1*b2-c2*b1)/d y=(a1*c2-a2*c1)/d ? 雞為雞為,x,只只, 兔為兔為,y,只只 ENDIF *控制循環(huán)是否結(jié)束控制循環(huán)是否結(jié)束 INPUT 若繼續(xù)循環(huán)輸入若繼續(xù)循

26、環(huán)輸入Y,否則輸入,否則輸入N TO s IF upper(s)Y EXIT ENDIFENDDORETURN 4.3.2 編寫程序編寫程序 程序的編寫就是用程序設(shè)計語言實現(xiàn)算法的程序的編寫就是用程序設(shè)計語言實現(xiàn)算法的過程。程序編寫人員應(yīng)該根據(jù)算法的要求,選擇過程。程序編寫人員應(yīng)該根據(jù)算法的要求,選擇一種程序設(shè)計語言對算法進(jìn)行編碼。對程序設(shè)計一種程序設(shè)計語言對算法進(jìn)行編碼。對程序設(shè)計語言,必須要深刻地理解,熟練地掌握,語言,必須要深刻地理解,熟練地掌握, 正確地正確地運用,這樣才能編出高質(zhì)量的程序代碼。運用,這樣才能編出高質(zhì)量的程序代碼。4.3.2 編寫程序編寫程序 編寫程序的基本要求:首先是

27、保證語法的正編寫程序的基本要求:首先是保證語法的正確性。只有語法正確的程序才能通過編譯系統(tǒng)的確性。只有語法正確的程序才能通過編譯系統(tǒng)的語法檢查。其次是保證語義的正確性,也就是通語法檢查。其次是保證語義的正確性,也就是通過運行程序,得到需要的正確結(jié)果。但這一點對過運行程序,得到需要的正確結(jié)果。但這一點對一個復(fù)雜的程序來說并不容易,通常需要經(jīng)過程一個復(fù)雜的程序來說并不容易,通常需要經(jīng)過程序測試和修改才能達(dá)到序測試和修改才能達(dá)到。4.3.2 編寫程序編寫程序 只做到以上兩點還稱不上高質(zhì)量的程序代碼,只做到以上兩點還稱不上高質(zhì)量的程序代碼,高質(zhì)量的程序還應(yīng)體現(xiàn)在以下四個方面:可靠性高質(zhì)量的程序還應(yīng)體現(xiàn)

28、在以下四個方面:可靠性高、運行速度快、占用存儲空間小和易懂性。高、運行速度快、占用存儲空間小和易懂性。 通常這四個方面不能同時滿足,要根據(jù)具體通常這四個方面不能同時滿足,要根據(jù)具體情況權(quán)衡利弊。情況權(quán)衡利弊。4.3.2 編寫程序編寫程序 在計算機(jī)速度越來越快,內(nèi)存越來越大的今在計算機(jī)速度越來越快,內(nèi)存越來越大的今天,程序的易懂性顯得更為重要。這是因為一個天,程序的易懂性顯得更為重要。這是因為一個程序除了能在計算機(jī)上運行外,還要求人能夠看程序除了能在計算機(jī)上運行外,還要求人能夠看懂。只有看懂程序,才能對程序中出現(xiàn)的問題進(jìn)懂。只有看懂程序,才能對程序中出現(xiàn)的問題進(jìn)行修改,才能根據(jù)需要擴(kuò)充其功能和改

29、善其性能。行修改,才能根據(jù)需要擴(kuò)充其功能和改善其性能。4.3.2 編寫程序編寫程序 編寫容易讀懂的程序代碼,要求程序有良好的編寫容易讀懂的程序代碼,要求程序有良好的結(jié)構(gòu)性和程序設(shè)計風(fēng)格。結(jié)構(gòu)性和程序設(shè)計風(fēng)格。 所謂程序有良好的結(jié)構(gòu)性是指程序僅由三種基所謂程序有良好的結(jié)構(gòu)性是指程序僅由三種基本的控制結(jié)構(gòu)構(gòu)造出來。本的控制結(jié)構(gòu)構(gòu)造出來。u順序控制結(jié)構(gòu)順序控制結(jié)構(gòu)u選擇控制結(jié)構(gòu)選擇控制結(jié)構(gòu)u重復(fù)控制結(jié)構(gòu)重復(fù)控制結(jié)構(gòu) 所謂良好的程序設(shè)計風(fēng)格,是要求編寫的程序所謂良好的程序設(shè)計風(fēng)格,是要求編寫的程序清晰明了,容易被人理解。清晰明了,容易被人理解。順序控制結(jié)構(gòu)順序控制結(jié)構(gòu)順序控制結(jié)構(gòu)含順序控制結(jié)構(gòu)含有多個

30、連續(xù)的步驟,有多個連續(xù)的步驟,如右圖所示。如右圖所示。在此控制結(jié)構(gòu)中在此控制結(jié)構(gòu)中的的A和和B是順序執(zhí)是順序執(zhí)行的。順序控制結(jié)行的。順序控制結(jié)構(gòu)是最簡單的一種構(gòu)是最簡單的一種基本結(jié)構(gòu)。基本結(jié)構(gòu)。選擇控制結(jié)構(gòu)選擇控制結(jié)構(gòu) 選擇控制結(jié)構(gòu)也稱選擇控制結(jié)構(gòu)也稱為分支結(jié)構(gòu),計算機(jī)為分支結(jié)構(gòu),計算機(jī)根據(jù)所列條件選擇執(zhí)根據(jù)所列條件選擇執(zhí)行路徑,如右圖所示。行路徑,如右圖所示。在此控制結(jié)構(gòu)中有在此控制結(jié)構(gòu)中有一個判斷框,它只能一個判斷框,它只能有兩個分支,根據(jù)條有兩個分支,根據(jù)條件件P 是否滿足而分別是否滿足而分別執(zhí)行執(zhí)行A或或B。重復(fù)控制結(jié)構(gòu)重復(fù)控制結(jié)構(gòu)重復(fù)控制結(jié)構(gòu)又稱循環(huán)結(jié)構(gòu),可以重復(fù)執(zhí)行一條重復(fù)控制結(jié)構(gòu)

31、又稱循環(huán)結(jié)構(gòu),可以重復(fù)執(zhí)行一條或多條指令,直到滿足退出條件?;蚨鄺l指令,直到滿足退出條件。重復(fù)控制結(jié)構(gòu)主要有以下兩種:重復(fù)控制結(jié)構(gòu)主要有以下兩種:u當(dāng)型(當(dāng)型(WHILE DO型)循環(huán)結(jié)構(gòu)型)循環(huán)結(jié)構(gòu)u直到型(直到型(UNTIL型)循環(huán)結(jié)構(gòu)型)循環(huán)結(jié)構(gòu)當(dāng)型(當(dāng)型(WHILE DO型)循環(huán)結(jié)構(gòu)型)循環(huán)結(jié)構(gòu) 當(dāng)條件當(dāng)條件P滿滿足時,反復(fù)執(zhí)行足時,反復(fù)執(zhí)行A。一旦條件。一旦條件P不滿足就不再執(zhí)不滿足就不再執(zhí)行行A,而執(zhí)行它,而執(zhí)行它下面的操作。如下面的操作。如果在開始時條件果在開始時條件P就不滿足,則就不滿足,則A一次也不執(zhí)行。一次也不執(zhí)行。直到型(直到型(UNTIL型)循環(huán)結(jié)構(gòu)型)循環(huán)結(jié)構(gòu) 先執(zhí)行

32、先執(zhí)行A,然,然后判斷條件后判斷條件P是否是否滿足,如條件滿足,如條件P不不滿足,則反復(fù)執(zhí)行滿足,則反復(fù)執(zhí)行A,直到某一時刻,直到某一時刻,條件條件P滿足則停止?jié)M足則停止循環(huán),執(zhí)行下面的循環(huán),執(zhí)行下面的操作。可以看到,操作??梢钥吹剑徽摋l件不論條件P是否滿是否滿足,至少執(zhí)行一次足,至少執(zhí)行一次A。這三種基本控制結(jié)構(gòu)的共同特點這三種基本控制結(jié)構(gòu)的共同特點(1)只有一個入口,如圖)只有一個入口,如圖4-2至圖至圖4-5中的中的a點。點。(2)只有一個出口,如圖)只有一個出口,如圖4-2至圖至圖4-5中的中的b點。點。(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到。)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到。(4

33、)結(jié)構(gòu)內(nèi)沒有死循環(huán)(無終止的循環(huán))。)結(jié)構(gòu)內(nèi)沒有死循環(huán)(無終止的循環(huán))。 盡管在表達(dá)形式上不完全一樣,但各種編程盡管在表達(dá)形式上不完全一樣,但各種編程語言都提供了對三種基本控制結(jié)構(gòu)的支持。語言都提供了對三種基本控制結(jié)構(gòu)的支持。不滿足基本要求的兩種情況不滿足基本要求的兩種情況B永遠(yuǎn)執(zhí)行不到永遠(yuǎn)執(zhí)行不到死循環(huán)死循環(huán)良好的程序設(shè)計風(fēng)格良好的程序設(shè)計風(fēng)格1)文檔化()文檔化(documentation)要有效、適當(dāng)?shù)厥褂米⑨?。注釋語句是每種程序設(shè)計語言都要提供要有效、適當(dāng)?shù)厥褂米⑨尅W⑨屨Z句是每種程序設(shè)計語言都要提供的語句。注釋語句對程序的執(zhí)行結(jié)果沒有影響,是用來幫助讀程序的語句。注釋語句對程序的執(zhí)行

34、結(jié)果沒有影響,是用來幫助讀程序的人理解程序的。一些規(guī)范的程序中,注釋行的數(shù)量占到整個源程的人理解程序的。一些規(guī)范的程序中,注釋行的數(shù)量占到整個源程序的序的1/3到到1/2,甚至更多。在程序的開頭可以添加對程序整體進(jìn),甚至更多。在程序的開頭可以添加對程序整體進(jìn)行說明的注釋;在程序模塊(如子程序、函數(shù)、過程等)行說明的注釋;在程序模塊(如子程序、函數(shù)、過程等) 前添加解前添加解釋該模塊作用的注釋;在較難理解的語句前添加解釋該語句的注釋。釋該模塊作用的注釋;在較難理解的語句前添加解釋該語句的注釋。要使用含義明確的符號名。符號名包括子程序名、函數(shù)名、變量名、要使用含義明確的符號名。符號名包括子程序名、

35、函數(shù)名、變量名、常量名等。這些名字應(yīng)能反映它所代表的實際東西,有實際意義,常量名等。這些名字應(yīng)能反映它所代表的實際東西,有實際意義,使其能見名知意。例如,表示總量用使其能見名知意。例如,表示總量用Total,表示平均值用,表示平均值用Average,表示和用,表示和用Sum,等等。,等等。良好的程序設(shè)計風(fēng)格良好的程序設(shè)計風(fēng)格2)格式化()格式化(layout)盡量使程序布局合理、清晰、明了。一個程序如果寫盡量使程序布局合理、清晰、明了。一個程序如果寫得太密,沒有留出空白,往往是很難讀懂的。恰當(dāng)?shù)乩锰埽瑳]有留出空白,往往是很難讀懂的。恰當(dāng)?shù)乩每崭瘛⒖招泻涂s進(jìn)可使程序清晰明了。用空格、空行和

36、縮進(jìn)可使程序清晰明了。自然程序段之間用空行分開。縮進(jìn)也稱為向右縮格或自然程序段之間用空行分開??s進(jìn)也稱為向右縮格或移行。程序中的各行不必左對齊,因為這樣做的話程序移行。程序中的各行不必左對齊,因為這樣做的話程序的層次關(guān)系就分不清了。對于選擇語句和循環(huán)語句,應(yīng)的層次關(guān)系就分不清了。對于選擇語句和循環(huán)語句,應(yīng)該把其中的程序段語句向右做階梯式移行。格式化可使該把其中的程序段語句向右做階梯式移行。格式化可使程序的邏輯結(jié)構(gòu)更加清晰,層次更加分明。程序的邏輯結(jié)構(gòu)更加清晰,層次更加分明。良好的程序設(shè)計風(fēng)格良好的程序設(shè)計風(fēng)格3)模塊化()模塊化(modularization) 把復(fù)雜的程序分解為功能獨立的程序

37、模塊,把復(fù)雜的程序分解為功能獨立的程序模塊,每一個程序模塊只完成一個獨立的功能,盡量每一個程序模塊只完成一個獨立的功能,盡量減少模塊之間的聯(lián)系。這樣,當(dāng)我們讀一個復(fù)減少模塊之間的聯(lián)系。這樣,當(dāng)我們讀一個復(fù)雜的程序時,只要分別去讀懂各個簡單的功能雜的程序時,只要分別去讀懂各個簡單的功能模塊即可。模塊即可。4.4 程序的測試、調(diào)試與維護(hù)程序的測試、調(diào)試與維護(hù)4.4.1 程序測試程序測試4.4.2 程序調(diào)試程序調(diào)試 4.4.3 程序維護(hù)程序維護(hù)4.4.1 程序測試程序測試程序測試是為了發(fā)現(xiàn)程序錯誤而執(zhí)行程序的過程。程序測試是為了發(fā)現(xiàn)程序錯誤而執(zhí)行程序的過程。測試時需要選擇測試數(shù)據(jù)作為輸入,運行程序后

38、測試時需要選擇測試數(shù)據(jù)作為輸入,運行程序后看是否會輸出預(yù)期的結(jié)果。看是否會輸出預(yù)期的結(jié)果。如果沒有產(chǎn)生正確的結(jié)果,則程序員必須查找并如果沒有產(chǎn)生正確的結(jié)果,則程序員必須查找并修改程序中的錯誤,然后再測試修改后的程序,修改程序中的錯誤,然后再測試修改后的程序,可能要經(jīng)過多次反復(fù),才能得出正確的結(jié)果。可能要經(jīng)過多次反復(fù),才能得出正確的結(jié)果。4.4.1 程序測試程序測試對于一組測試數(shù)據(jù),即使程序產(chǎn)生了正確的結(jié)果,對于一組測試數(shù)據(jù),即使程序產(chǎn)生了正確的結(jié)果,也還不能立即斷定程序是正確的,因為還不能保也還不能立即斷定程序是正確的,因為還不能保證輸入其他的數(shù)據(jù)時,程序會產(chǎn)生正確結(jié)果。證輸入其他的數(shù)據(jù)時,程

39、序會產(chǎn)生正確結(jié)果。但是這個但是這個“所有可能的數(shù)據(jù)所有可能的數(shù)據(jù)”集合一般是非常大集合一般是非常大的,可能是幾十億個數(shù)據(jù)甚至更多,都測試一遍的,可能是幾十億個數(shù)據(jù)甚至更多,都測試一遍是不現(xiàn)實的,所以要求我們根據(jù)某些原則選擇有是不現(xiàn)實的,所以要求我們根據(jù)某些原則選擇有代表性的測試數(shù)據(jù)進(jìn)行測試,以相對較少的測試代表性的測試數(shù)據(jù)進(jìn)行測試,以相對較少的測試次數(shù)發(fā)現(xiàn)程序中的錯誤次數(shù)發(fā)現(xiàn)程序中的錯誤黑盒測試法黑盒測試法 把程序看成一個把程序看成一個“黑盒子黑盒子”,測試人員完全不,測試人員完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只考慮程序的考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只考慮程序的功能,通過選擇一些測試數(shù)據(jù),

40、看程序的功能是功能,通過選擇一些測試數(shù)據(jù),看程序的功能是否都已實現(xiàn)否都已實現(xiàn)。黑盒測試的測試數(shù)據(jù)選擇(雞兔同籠問題)黑盒測試的測試數(shù)據(jù)選擇(雞兔同籠問題)把輸入的二元一次方程組的系數(shù)分為以下四類,每一類設(shè)計一個測試用例。把輸入的二元一次方程組的系數(shù)分為以下四類,每一類設(shè)計一個測試用例。合理的系數(shù):合理的系數(shù):(1)方程組有唯一解:)方程組有唯一解: a1 = 1,b1 = 1,c1 = 1,a2 = 0,b2 = 1,c2 = 2(2)方程組無解:)方程組無解: a1 = 1,b1 = 1,c1 = 1,a2 = 1,b2 = 1,c2 = 2(3)方程組有無窮組解:)方程組有無窮組解: a1

41、 = 1,b1 = 1,c1 = 1,a2 = 2,b2 = 2,c2 = 2不合理的系數(shù):不合理的系數(shù):(4)輸入的不全是數(shù)值:)輸入的不全是數(shù)值: a1 = a,b1 = 5,c1 = 0,a2 = 6,b2 = 8,c2 = 7選擇合理的輸入數(shù)據(jù)驗證程序的功能、性能是否符合設(shè)計的要求。選擇合理的輸入數(shù)據(jù)驗證程序的功能、性能是否符合設(shè)計的要求。選擇不合理的輸入數(shù)據(jù)對程序進(jìn)行測試也非常重要,這是對程序可靠性的考選擇不合理的輸入數(shù)據(jù)對程序進(jìn)行測試也非常重要,這是對程序可靠性的考驗。驗。白測試的測試數(shù)據(jù)選擇(雞兔同籠問題)白測試的測試數(shù)據(jù)選擇(雞兔同籠問題) 為了讓程序中的每條語句至少執(zhí)行一次,

42、使每個判斷條為了讓程序中的每條語句至少執(zhí)行一次,使每個判斷條件取一次件取一次“真真”或取一次或取一次“假假”,選擇如下測試用例:,選擇如下測試用例:(1)d = 0,s =“ Y”: a1 = 1,b1 = 1,c1 = 1,a2 = 2,b2 = 2,c2 = 2, s =“ Y”(2)d 0,s =“ N”: a1 = 1,b1 = 0,c1 = 1,a2 = 0,b2 = 1,c2 = 2, s =“ N” 這兩個例子測試后,使得程序中的每條語句至少執(zhí)行了這兩個例子測試后,使得程序中的每條語句至少執(zhí)行了一次,每個判斷條件分別取了一次一次,每個判斷條件分別取了一次“真真”和一次和一次“假假

43、”。測試的步驟測試的步驟一個復(fù)雜的程序往往由若干個子程序模塊組成,要保證一個復(fù)雜的程序往往由若干個子程序模塊組成,要保證程序整體的正確性,不僅需要各個模塊是正確的,還要求程序整體的正確性,不僅需要各個模塊是正確的,還要求各模塊之間的接口是正確的。測試工作要制定出測試規(guī)劃,各模塊之間的接口是正確的。測試工作要制定出測試規(guī)劃,包括測試的步驟、范圍、進(jìn)度和所用的資源(硬件、軟件)包括測試的步驟、范圍、進(jìn)度和所用的資源(硬件、軟件)等。等。測試工作先對每個模塊進(jìn)行測試,一般采用白盒測試法測試工作先對每個模塊進(jìn)行測試,一般采用白盒測試法保證每個程序模塊內(nèi)部的正確性,然后再把測試后的模塊保證每個程序模塊內(nèi)

44、部的正確性,然后再把測試后的模塊組裝在一起進(jìn)行整體測試,主要測試各模塊是否能正常配組裝在一起進(jìn)行整體測試,主要測試各模塊是否能正常配合工作,方法多采用黑盒測試法。對模塊的接口進(jìn)行測試,合工作,方法多采用黑盒測試法。對模塊的接口進(jìn)行測試,適當(dāng)輔以白盒測試法,以便對主要執(zhí)行路徑進(jìn)行測試。適當(dāng)輔以白盒測試法,以便對主要執(zhí)行路徑進(jìn)行測試。 4.4.2 程序調(diào)試程序調(diào)試 調(diào)試的任務(wù)是進(jìn)一步診斷和改正程序中的錯誤(調(diào)試的任務(wù)是進(jìn)一步診斷和改正程序中的錯誤( 一般是一般是測試時發(fā)現(xiàn)的錯誤),它是在完成了測試之后進(jìn)行的。測試時發(fā)現(xiàn)的錯誤),它是在完成了測試之后進(jìn)行的。調(diào)試活動首先確定程序中可疑錯誤的確切性質(zhì)和

45、位置,調(diào)試活動首先確定程序中可疑錯誤的確切性質(zhì)和位置,然后對程序(設(shè)計、編碼)進(jìn)行修改,排除錯誤。然后對程序(設(shè)計、編碼)進(jìn)行修改,排除錯誤。調(diào)試工作是一個具有很強(qiáng)技巧性的工作。軟件運行失效調(diào)試工作是一個具有很強(qiáng)技巧性的工作。軟件運行失效或出現(xiàn)問題,往往只是潛在錯誤的外部表現(xiàn),而外部表現(xiàn)或出現(xiàn)問題,往往只是潛在錯誤的外部表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒有明顯的聯(lián)系,要找出真正的原因,與內(nèi)在原因之間常常沒有明顯的聯(lián)系,要找出真正的原因,排除潛在的錯誤,不是一件易事。排除潛在的錯誤,不是一件易事??梢哉f,調(diào)試是通過現(xiàn)象找出原因的分析過程??梢哉f,調(diào)試是通過現(xiàn)象找出原因的分析過程。 調(diào)試步驟調(diào)試

46、步驟(1)對測試發(fā)現(xiàn)的錯誤現(xiàn)象進(jìn)行分析,確定程序)對測試發(fā)現(xiàn)的錯誤現(xiàn)象進(jìn)行分析,確定程序中的出錯位置;中的出錯位置;(2)研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因)研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因(有的錯誤不一定是編碼錯誤,可能是設(shè)計錯(有的錯誤不一定是編碼錯誤,可能是設(shè)計錯誤);誤);(3)修改設(shè)計或代碼,以排除這個錯誤;)修改設(shè)計或代碼,以排除這個錯誤;(4)重復(fù)進(jìn)行暴露了這個錯誤的原始測試和其他)重復(fù)進(jìn)行暴露了這個錯誤的原始測試和其他有關(guān)測試。有關(guān)測試。 調(diào)試步驟調(diào)試步驟當(dāng)在程序中發(fā)現(xiàn)一個錯誤時,它可能是語法錯誤,也可能是語義錯誤。當(dāng)在程序中發(fā)現(xiàn)一個錯誤時,它可能是語法錯誤,也可能是

47、語義錯誤。語法錯誤是由于指令沒有按照程序設(shè)計語言的語法規(guī)則編寫所致。例如,語法錯誤是由于指令沒有按照程序設(shè)計語言的語法規(guī)則編寫所致。例如,要打印一個消息時,需要使用要打印一個消息時,需要使用PRINT命令字。命令命令字。命令I(lǐng)F AGE = 16 THEN You can drive.將產(chǎn)生語法錯誤,因為少了命令字將產(chǎn)生語法錯誤,因為少了命令字PRINT。正確的寫法是正確的寫法是IF AGE = 16 THEN PRINT You can drive.。在編譯執(zhí)行的系統(tǒng)中,編譯時就能檢查出語法錯誤。在解釋執(zhí)行的系統(tǒng)在編譯執(zhí)行的系統(tǒng)中,編譯時就能檢查出語法錯誤。在解釋執(zhí)行的系統(tǒng)中,執(zhí)行到語法錯誤

48、的語句時輸出錯誤信息。語法錯誤是比較容易發(fā)現(xiàn)和中,執(zhí)行到語法錯誤的語句時輸出錯誤信息。語法錯誤是比較容易發(fā)現(xiàn)和糾正的。糾正的。語義錯誤是編寫的程序雖然能運行,但不能輸出正確的結(jié)果。出錯的原語義錯誤是編寫的程序雖然能運行,但不能輸出正確的結(jié)果。出錯的原因可能是多方面的,模型的建立、算法的設(shè)計和表達(dá)、編碼各個過程都可因可能是多方面的,模型的建立、算法的設(shè)計和表達(dá)、編碼各個過程都可能出錯,語義錯誤比語法錯誤更難檢查、修改。例如,把能出錯,語義錯誤比語法錯誤更難檢查、修改。例如,把IF A = 100 THEN PRINT A中的中的“”寫成了寫成了“”,就屬于語義方面的錯誤。,就屬于語義方面的錯誤。

49、 4.4.3 程序維護(hù)程序維護(hù)通常把程序的修改稱為程序維護(hù)。程序維護(hù)一般有三種類型通常把程序的修改稱為程序維護(hù)。程序維護(hù)一般有三種類型u改正性維護(hù)改正性維護(hù) 在程序測試時,有的錯誤沒被發(fā)現(xiàn),交付使用后,程序中某些錯誤在程序測試時,有的錯誤沒被發(fā)現(xiàn),交付使用后,程序中某些錯誤暴露出來,此時就要對程序進(jìn)行改正性維護(hù)。暴露出來,此時就要對程序進(jìn)行改正性維護(hù)。u適應(yīng)性維護(hù)適應(yīng)性維護(hù)假如程序運行的外在環(huán)境(假如程序運行的外在環(huán)境( 硬件配置和軟件配置等)發(fā)生了變化,硬件配置和軟件配置等)發(fā)生了變化,為了使程序適應(yīng)這種環(huán)境變化而修改程序的過程叫適應(yīng)性維護(hù)。為了使程序適應(yīng)這種環(huán)境變化而修改程序的過程叫適應(yīng)性

50、維護(hù)。u完善性維護(hù)完善性維護(hù)在程序使用的過程中,用戶往往會對程序提出增加新功能或改善性在程序使用的過程中,用戶往往會對程序提出增加新功能或改善性能的要求,這就需要修改程序,使程序更加完善,這個過程稱為完能的要求,這就需要修改程序,使程序更加完善,這個過程稱為完善性維護(hù)。善性維護(hù)。 4.4.3 程序維護(hù)程序維護(hù)程序維護(hù)在軟件生命周期中占相當(dāng)重要的地位,大程序維護(hù)在軟件生命周期中占相當(dāng)重要的地位,大約約75%的費用都產(chǎn)生在程序維護(hù)階段。的費用都產(chǎn)生在程序維護(hù)階段。不管對程序進(jìn)行哪種維護(hù),都需要維護(hù)人員熟悉程不管對程序進(jìn)行哪種維護(hù),都需要維護(hù)人員熟悉程序的工作過程和使用方法,讀懂原有的程序。修改程序

51、的工作過程和使用方法,讀懂原有的程序。修改程序的人員往往不是編寫程序的人員,有時候時間久了序的人員往往不是編寫程序的人員,有時候時間久了就是編寫程序的本人也記不清當(dāng)時是怎樣編寫程序的。就是編寫程序的本人也記不清當(dāng)時是怎樣編寫程序的。因此,為了能順利地進(jìn)行維護(hù),必須建立詳盡的程序因此,為了能順利地進(jìn)行維護(hù),必須建立詳盡的程序文檔。文檔。程序文檔解釋了程序的工作過程及使用方法。創(chuàng)建程序文檔解釋了程序的工作過程及使用方法。創(chuàng)建的文檔為修改程序或使用程序提供幫助。的文檔為修改程序或使用程序提供幫助。 程序文檔程序文檔程序文檔有兩種形式:插入到程序代碼中的注釋和專門制作程序文檔有兩種形式:插入到程序代碼

52、中的注釋和專門制作的文檔。的文檔。u注釋是插入到計算機(jī)程序代碼行中的解釋性注解,它能注釋是插入到計算機(jī)程序代碼行中的解釋性注解,它能為改寫程序的人閱讀程序、理解程序提供幫助。為改寫程序的人閱讀程序、理解程序提供幫助。u專門制作的文檔不屬于程序,它包含的是一些對程序員專門制作的文檔不屬于程序,它包含的是一些對程序員和用戶都有用的關(guān)于程序的信息。對程序員有用的文檔為和用戶都有用的關(guān)于程序的信息。對程序員有用的文檔為程序手冊,對用戶有用的文檔為用戶參考手冊。程序手冊,對用戶有用的文檔為用戶參考手冊。p程序手冊中包含問題描述、數(shù)學(xué)模型、算法及算法表達(dá)、程序程序手冊中包含問題描述、數(shù)學(xué)模型、算法及算法表

53、達(dá)、程序代碼、測試程序的過程和記錄等,它是程序開發(fā)和維護(hù)的重要代碼、測試程序的過程和記錄等,它是程序開發(fā)和維護(hù)的重要資料。資料。p用戶參考手冊中包含對程序的功能說明,操作程序的方法、步用戶參考手冊中包含對程序的功能說明,操作程序的方法、步驟、故障分析與排除等,它是幫助用戶學(xué)會使用軟件的重要資驟、故障分析與排除等,它是幫助用戶學(xué)會使用軟件的重要資料。用戶參考手冊還有電子版和在線幫助等形式料。用戶參考手冊還有電子版和在線幫助等形式。4.5 程序設(shè)計語言應(yīng)用程序設(shè)計語言應(yīng)用4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇4.5.2 軟件開發(fā)工具軟件開發(fā)工具4.5.3 VB程序設(shè)計語言程序

54、設(shè)計語言4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇 通常根據(jù)程序設(shè)計語言發(fā)展的歷程將其劃分為通常根據(jù)程序設(shè)計語言發(fā)展的歷程將其劃分為四代。四代。1)機(jī)器語言)機(jī)器語言第一代語言第一代語言2)匯編語言)匯編語言第二代語言第二代語言3)高級程序設(shè)計語言)高級程序設(shè)計語言第三代語言第三代語言4)智能語言)智能語言第四代語言第四代語言4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇1)機(jī)器語言)機(jī)器語言第一代語言第一代語言 機(jī)器語言是計算機(jī)能直接執(zhí)行的二進(jìn)制形式機(jī)器語言是計算機(jī)能直接執(zhí)行的二進(jìn)制形式的低級語言。它是由機(jī)器指令組成的語言,不同的低級語言。它是由機(jī)器指令組成的

55、語言,不同的機(jī)器有不同的機(jī)器語言。機(jī)器語言對人來說既的機(jī)器有不同的機(jī)器語言。機(jī)器語言對人來說既難理解又難掌握,編出的程序不易查錯糾錯。計難理解又難掌握,編出的程序不易查錯糾錯。計算機(jī)剛出現(xiàn)時用的就是機(jī)器語言。算機(jī)剛出現(xiàn)時用的就是機(jī)器語言。4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇2)匯編語言)匯編語言第二代語言第二代語言 匯編語言比機(jī)器語言直觀,它的每一條符號指令與相匯編語言比機(jī)器語言直觀,它的每一條符號指令與相應(yīng)的機(jī)器指令有對應(yīng)關(guān)系,同時又增加了一些宏、符號地應(yīng)的機(jī)器指令有對應(yīng)關(guān)系,同時又增加了一些宏、符號地址等功能。存儲空間的安排可由機(jī)器解決,減少了程序員址等功能。存儲空

56、間的安排可由機(jī)器解決,減少了程序員的工作量,也降低了出錯率。由于用匯編語言可以直接操的工作量,也降低了出錯率。由于用匯編語言可以直接操縱處理器、寄存器和內(nèi)存地址等硬件資源,這對于編寫設(shè)縱處理器、寄存器和內(nèi)存地址等硬件資源,這對于編寫設(shè)備驅(qū)動程序、編譯程序和操作系統(tǒng)等系統(tǒng)軟件非常有用。備驅(qū)動程序、編譯程序和操作系統(tǒng)等系統(tǒng)軟件非常有用。不同指令集的處理器系統(tǒng)有自己相應(yīng)的匯編語言。如微機(jī)不同指令集的處理器系統(tǒng)有自己相應(yīng)的匯編語言。如微機(jī)上常用的上常用的Microsoft的匯編語言的匯編語言MASM。匯編語言相對來。匯編語言相對來講還是比較晦澀,所以也被列為低級語言。講還是比較晦澀,所以也被列為低級語

57、言。4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇 3)高級程序設(shè)計語言)高級程序設(shè)計語言第三代語言第三代語言 高級程序設(shè)計語言從高級程序設(shè)計語言從20世紀(jì)世紀(jì)50年代就開始出現(xiàn),它年代就開始出現(xiàn),它提供給程序員的指令更像人類語言,為計算機(jī)應(yīng)用的普及提供給程序員的指令更像人類語言,為計算機(jī)應(yīng)用的普及起到了重要作用。人們用高級程序設(shè)計語言編程直觀、方起到了重要作用。人們用高級程序設(shè)計語言編程直觀、方便,但計算機(jī)最終執(zhí)行的還是二進(jìn)制表示的機(jī)器指令,這便,但計算機(jī)最終執(zhí)行的還是二進(jìn)制表示的機(jī)器指令,這中間需要編譯程序或解釋程序來做翻譯工作。高級程序設(shè)中間需要編譯程序或解釋程序來做翻譯工

58、作。高級程序設(shè)計語言不再與具體的計算機(jī)硬件相對應(yīng),同一高級程序設(shè)計語言不再與具體的計算機(jī)硬件相對應(yīng),同一高級程序設(shè)計語言,只要給出不同的編譯程序或解釋程序,就可以應(yīng)計語言,只要給出不同的編譯程序或解釋程序,就可以應(yīng)用于不同類型的計算機(jī)上。這就是高級程序設(shè)計語言的通用于不同類型的計算機(jī)上。這就是高級程序設(shè)計語言的通用性。用性。4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇 3)高級程序設(shè)計語言)高級程序設(shè)計語言第三代語言第三代語言 高級程序設(shè)計語言種類很多,可以把它們分為過程性高級程序設(shè)計語言種類很多,可以把它們分為過程性語言、面向?qū)ο蟮恼Z言、專用語言和腳本語言。這里僅就語言、面向

59、對象的語言、專用語言和腳本語言。這里僅就最典型的、用途最廣的幾種語言進(jìn)行介紹。最典型的、用途最廣的幾種語言進(jìn)行介紹。(1)過程性語言:)過程性語言:(2)面向?qū)ο蟮恼Z言:)面向?qū)ο蟮恼Z言:(3)專用語言:)專用語言:(4)腳本語言:)腳本語言:4.5.1 程序設(shè)計語言的分類與選擇程序設(shè)計語言的分類與選擇 3)高級程序設(shè)計語言)高級程序設(shè)計語言第三代語言第三代語言(1)過程性語言:)過程性語言:過程性編程語言適合于順序執(zhí)行的算法。用過程性語言編寫的程序有過程性編程語言適合于順序執(zhí)行的算法。用過程性語言編寫的程序有一個起點和一個終點,程序的執(zhí)行是流水線式的,在一個模塊被執(zhí)行一個起點和一個終點,程序

60、的執(zhí)行是流水線式的,在一個模塊被執(zhí)行完成前,不能處理其他任務(wù),也無法動態(tài)地改變程序的執(zhí)行過程。完成前,不能處理其他任務(wù),也無法動態(tài)地改變程序的執(zhí)行過程。uBASIC,簡單易學(xué)簡單易學(xué),包括包括GW-BASIC、QBASIC 和和Turbo BASIC等。等。uCOBOL,適合于大型計算機(jī)系統(tǒng)上的事務(wù)處理。,適合于大型計算機(jī)系統(tǒng)上的事務(wù)處理。uFORTRAN,廣泛應(yīng)用于科學(xué)和工程計算領(lǐng)域。廣泛應(yīng)用于科學(xué)和工程計算領(lǐng)域。uPASCAL,主要用于結(jié)構(gòu)化程序設(shè)計的教學(xué)主要用于結(jié)構(gòu)化程序設(shè)計的教學(xué)。uC語言語言,功能強(qiáng)大且十分靈活,以其高效、簡潔、可移植性強(qiáng)。功能強(qiáng)大且十分靈活,以其高效、簡潔、可移植性強(qiáng)。4.

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論