版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 淺析結(jié)構(gòu)化程序的設(shè)計技巧</p><p> 摘 要:結(jié)構(gòu)化程序設(shè)計方法可以概括為自頂向下、逐步求精和模塊化,將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計方法。本文從結(jié)構(gòu)程序設(shè)計的基本特點入手,簡要分析了在結(jié)構(gòu)化程序設(shè)計中靈活運用若干技巧對提高程序設(shè)計的穩(wěn)定性和可靠性的應(yīng)用價值。 </p><p> 關(guān)鍵詞:結(jié)構(gòu)化程序設(shè)計 數(shù)據(jù)結(jié)構(gòu) 算法 設(shè)計技巧 </p&
2、gt;<p> 近年來,計算機(jī)程序設(shè)計技術(shù)已從結(jié)構(gòu)化程序設(shè)計技術(shù)逐步向?qū)ο蟪绦蛟O(shè)計技術(shù)過渡,特別是當(dāng)設(shè)計一個較大規(guī)模的應(yīng)用程序時,面向?qū)ο笤O(shè)計思路成為首選。縱觀計算機(jī)軟件技術(shù)的發(fā)展,在局部功能的實現(xiàn)上及功能模塊的設(shè)計上,結(jié)構(gòu)化程序設(shè)計仍然有其不可替代的獨特魅力。在結(jié)構(gòu)化程序設(shè)計中(以C語言為例),巧妙地運用一些設(shè)計技巧,對增強(qiáng)程序的穩(wěn)定性和可靠性,簡化程序操作步聚,提高程序的運行效率十分有效。 </p>&
3、lt;p> 結(jié)構(gòu)化程序設(shè)計的概念最初是由荷蘭學(xué)者E?W?DUKSTRA等人在20世紀(jì)60年代提出的,它的基本思路是:以模塊化設(shè)計為中心,將原來較為復(fù)雜的問題簡化為一系列簡單模塊的設(shè)計,也就是將一個大的計算任務(wù)劃分為若干個較小的任務(wù),這些小任務(wù)均由函數(shù)來完成。函數(shù)既可以是C語言定義的標(biāo)準(zhǔn)庫函數(shù),也可以是自定義函數(shù)。在實際應(yīng)用程序中,一個具備一定規(guī)模的C語言程序往往由多個函數(shù)組成,其中必有一個命名為main的主函數(shù),由main來調(diào)用
4、其他函數(shù)。必要時,其他函數(shù)還可以調(diào)用另外的函數(shù),同一函數(shù)可以被一個或多個函數(shù)調(diào)用一次或多次。 </p><p> 結(jié)構(gòu)化程序設(shè)計把程序歸結(jié)為用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等三種基本結(jié)構(gòu)來描述的邏輯問題。順序結(jié)構(gòu)的程序流程是按語句的書寫順序依次執(zhí)行;在C語言中,有4種語句是順序執(zhí)行的:即空語句、表達(dá)式語句、函數(shù)調(diào)用語句及復(fù)合語句;選擇結(jié)構(gòu)是對給定條件進(jìn)行判斷,根據(jù)判斷結(jié)果決定執(zhí)行兩分支中的一個分支或多分支中的一個
5、分支,選擇語句有if語句和switch語句;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個程序段,循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句如continue,break,go to等等。以上三種結(jié)構(gòu)通過流程控制語句來實現(xiàn)。流程控制語句在程序設(shè)計中起著十分重要的作用,通過三種基本控制結(jié)構(gòu)的合理調(diào)配使結(jié)構(gòu)化程序具有唯一的入口和出口,不會出現(xiàn)死循環(huán),而且程序的靜態(tài)形式與動態(tài)執(zhí)行形式之間具有良好的對應(yīng)關(guān)系。 &
6、lt;/p><p> 從以上結(jié)構(gòu)化程序的基本特點分析,結(jié)構(gòu)化程序設(shè)計主要強(qiáng)調(diào)的是程序。程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境,其中算法是靈魂,是解決“做什么”和“怎么做”的問題;數(shù)據(jù)結(jié)構(gòu)是加工對象;語言是工具;編程需要采用合適的方法。具體解決主要問題包含以下幾個步驟: </p><p> 分析問題,找出解決問題的模型→根據(jù)模型設(shè)計出適合計算機(jī)特點的處理方法即算法→進(jìn)行編程程序,
7、以實現(xiàn)算法→上機(jī)編輯(.c)、編譯(.obj)、連接(.exe)、運行所編制的程序,直到得出正確結(jié)果→對結(jié)果進(jìn)行分析,整理出文字材料。 </p><p> 程序設(shè)計的任務(wù)不只是編寫出一個能得到正確結(jié)果的程序,還應(yīng)考慮程序的質(zhì)量,否則編寫的程序就會出現(xiàn)質(zhì)量低下、可靠性差、開發(fā)周期長、維護(hù)費用高等不良后果,即所謂的的“軟件危機(jī)”,它會嚴(yán)重阻礙計算機(jī)應(yīng)用的發(fā)展。由于大多高級語言都支持結(jié)構(gòu)化程序設(shè)計方法,其語法上都含有
8、表示三種基本結(jié)構(gòu)的語句,所以用結(jié)構(gòu)化程序設(shè)計方法設(shè)計的模塊從結(jié)構(gòu)到程序的實現(xiàn)是直接轉(zhuǎn)換的,只需用相應(yīng)的語句結(jié)構(gòu)代替標(biāo)準(zhǔn)的控制結(jié)構(gòu)即可。筆者在實際應(yīng)用中,總結(jié)出以下幾點實用技巧。 </p><p> 一、通過引申法廓清思路,選準(zhǔn)目標(biāo) </p><p> “引申法”就是通過對某一結(jié)論的合理引申,結(jié)合已經(jīng)解決的問題,因勢利導(dǎo),在此基礎(chǔ)上解決相關(guān)聯(lián)的其他問題?!耙攴ā笨梢耘囵B(yǎng)人們在程序設(shè)計方
9、面的發(fā)散思維,提高程序設(shè)計的應(yīng)變能力。問題是活的,但程序是有章可循的;語法是有限的,可解決的問題是無限的。程序設(shè)計相當(dāng)一部分工作是分析問題,找到解決問題的方法,再以相應(yīng)的語言寫出代碼。要熟練掌握一些簡單的算法,根據(jù)不同的問題,再靈活應(yīng)用。如用100元錢買100只雞,公雞、母雞、小雞分別是5元、3元、1元一只。在數(shù)學(xué)上解三元一次方程,三個未知數(shù),兩個方程好像解不出來。通過“窮舉法”,我們要費好大一番工夫才能算出結(jié)果,但是通過計算機(jī)“引申”
10、編程運算卻不用一秒鐘即可解決問題。只有在分析實際向題的基礎(chǔ)上,以清晰的思路去設(shè)計算法,才能舉一反三,以不變應(yīng)萬變。通過“引申”法,我們可使初學(xué)者對函數(shù)設(shè)計的關(guān)鍵問題有清晰的認(rèn)識,利于從統(tǒng)籌全局的角度去考慮問題,體現(xiàn)了程序設(shè)計逐步求精的思路。 </p><p> 二、利用框架法培養(yǎng)全局思維和算法的整體設(shè)計能力 </p><p> 其具體體現(xiàn)在兩方面。一是在有了一點編程基礎(chǔ)后要利用偽代碼或
11、流程圖,從算法設(shè)計的角度講解編程思路,而不應(yīng)拘泥于語法細(xì)節(jié),不分主次、逐條語句地講解代碼。這樣可以層次分明,突出算法設(shè)計的關(guān)鍵,利于培養(yǎng)編程思路。二是在學(xué)習(xí)重點章節(jié)函數(shù)時,由于新的算法已很少,主要是學(xué)習(xí)用函數(shù)調(diào)用的方法來重新編制以前所熟悉的程序,我們可以把著眼點放在函數(shù)的設(shè)計框架上,體現(xiàn)參數(shù)設(shè)計、返回值設(shè)計等關(guān)鍵問題,而無需細(xì)講函數(shù)體的實現(xiàn)細(xì)節(jié)。結(jié)構(gòu)化構(gòu)造減小了程序的復(fù)雜性,提高了可靠性、可測試性和可維護(hù)性,使用少數(shù)的基本結(jié)構(gòu),就可使程
12、序邏輯結(jié)構(gòu)清晰,易讀易懂,并且容易驗證程序的正確性。 </p><p> 三、借助求異法引導(dǎo)新思路,啟迪新思維 </p><p> 結(jié)構(gòu)化程序設(shè)計方法的基本思路是:把一個復(fù)雜的問題的求解過程分階段進(jìn)行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。一個固定的問題,解決的方法可能不唯一,如果能啟發(fā)人們多角度、多側(cè)面去尋求解決問題的辦法,則可激發(fā)思考的積極性,提高其學(xué)習(xí)興致。對一個
13、初學(xué)計算機(jī)語言的人來說,最重要的就是要有正確的程序流程概念,不僅要懂得,而且要靈活應(yīng)用。由此可見,用結(jié)構(gòu)化方法設(shè)計的結(jié)構(gòu)是清晰的,有利于編寫出結(jié)構(gòu)良好的程序。在C語言中一題多解的情況有很多,有意識地引導(dǎo)新思路,鼓勵新方法,以培養(yǎng)人們在編程中的求異思維,而不是死記硬背,墨守成規(guī)。結(jié)構(gòu)化程序設(shè)計強(qiáng)調(diào)程序設(shè)計風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。 四、選準(zhǔn)切入口,合理劃分功能模塊“分而治之” </p><p>
14、 結(jié)構(gòu)化程序設(shè)計的關(guān)鍵在于功能模塊的選定和劃分。模塊化設(shè)計的思想實際上是一種“分而治之”的思想,把一個大任務(wù)分為若干個子任務(wù),每一個子任務(wù)的劃分以相對簡單為前提。劃分子模塊時我們應(yīng)注意模塊的獨立性,即:使一個模塊完成一項功能,耦合性愈少愈好。具體應(yīng)用時從問題本身入手,自頂向下,逐步細(xì)化,精益求精,將解決問題的步驟分解為由基本程序結(jié)構(gòu)模塊組成的通過程序流程圖、N-S圖、PAD圖表格等表示的結(jié)構(gòu)化程序框圖。在實踐應(yīng)用中往往會出現(xiàn)以下幾個問
15、題:一是用戶要求難以在系統(tǒng)分析階段準(zhǔn)確定義,致使系統(tǒng)在交付使用時產(chǎn)生許多問題。二是用系統(tǒng)開發(fā)每個階段的成果來進(jìn)行控制,不能適應(yīng)事物變化的要求。三是系統(tǒng)的開發(fā)周期較長。 </p><p> 為解決這些問題,我們要求模塊的設(shè)計要簡潔明了,語句的選用要直觀,不要拖泥帶水。下面是一段小程序,從中可以看出一些語句選用的技巧。 </p><p> 某淘寶商城為鼓勵更多網(wǎng)友光臨本店,對新老網(wǎng)友給出如
16、下優(yōu)惠:凡是購買10件以上者,打9折;20件以上者,8.5折優(yōu)惠;30件以上者,8折優(yōu)惠,40件以上者,7.5折優(yōu)惠。如用習(xí)慣上的if嵌套語句編寫程序如下: </p><p><b> Main() </b></p><p> {float x,y; </p><p> printf(“請輸入優(yōu)惠購額款X:\n”); </p>
17、<p> scanf(“%f”,&x); </p><p><b> if(x<10) </b></p><p><b> y=x; </b></p><p> else if(x<20) </p><p><b> y=0.9*x; </
18、b></p><p> else if(x<30) </p><p> y=0.85*x; </p><p> else if(x<40) </p><p><b> y=0.8*x; </b></p><p><b> else </b><
19、/p><p> y=0.75*x; </p><p> printf(“網(wǎng)友應(yīng)付優(yōu)惠后款額Y為:y);} </p><p> 顯然,這段程序冗長,一旦情況有變化,難以擴(kuò)展。轉(zhuǎn)換為switch語句結(jié)構(gòu)后,程序就變得相對簡單: </p><p><b> Main() </b></p><p>
20、 {float x,y; </p><p><b> Int t; </b></p><p> Printf(“請輸入優(yōu)惠購額款X:\n”); </p><p> Scanf(“%f”,&x); </p><p> If(x>=40) </p><p><b>
21、t =4; </b></p><p><b> elst </b></p><p> t=(in)(x/10); </p><p> switch(t) </p><p> {case 0:y=x;break; </p><p> case1:y=0.9*x;break; &
22、lt;/p><p> case2:y=0.85*x;break; </p><p> case3:y=0.8*x;break; </p><p> case4:y=0.75*x;break;} </p><p> printf(“網(wǎng)友應(yīng)付優(yōu)惠后款額Y為:y);} </p><p> 兩種方法可謂異曲同工,但是對于
23、程序的調(diào)試性和可維護(hù)性卻有天壤之別。在結(jié)構(gòu)化程序的編程實踐中,我們要查找某些錯誤比較困難,所以要盡可能避免出現(xiàn)這些問題。編程技巧需要在編制和調(diào)試結(jié)構(gòu)化程序時不斷總結(jié)和完善,力求找出最簡便、最直觀的方法。 </p><p> 總之,結(jié)構(gòu)化程序設(shè)計方法在實際應(yīng)用中有許多技巧可以合理運用,這需要我們對算法和數(shù)據(jù)結(jié)構(gòu)展開深入分析,尋找最佳結(jié)合點,有的放矢,對癥下藥;更需要在實踐中不斷總結(jié)和積累。在編寫過程中我們覺得有些
24、程序沒什么問題,但是一上機(jī)調(diào)試,就出現(xiàn)這樣或那樣的問題,這說明程序還不完善,還需要調(diào)整或改進(jìn)。當(dāng)今,高效率和快節(jié)湊的生活與工作方式對程序的設(shè)計提出了更高的要求和更苛刻的標(biāo)準(zhǔn),我們只有不斷創(chuàng)新設(shè)計理念和方法,才能編制出更多高質(zhì)量、高性能、低故障的優(yōu)質(zhì)程序。 </p><p><b> 參考文獻(xiàn): </b></p><p> [1]林銳等編著.高質(zhì)量程序設(shè)計指南[M]
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 結(jié)構(gòu)化面試技巧
- 結(jié)構(gòu)化面試技巧
- 程序開發(fā)和結(jié)構(gòu)化程序設(shè)計
- 結(jié)構(gòu)化面試技巧.doc
- 招聘結(jié)構(gòu)化面試技巧
- 淺析結(jié)構(gòu)化面試
- 淺析結(jié)構(gòu)化面試
- 結(jié)構(gòu)化面試的步驟及技巧
- 淺析結(jié)構(gòu)化行為面試
- 非結(jié)構(gòu)化面試技巧套路
- 結(jié)構(gòu)化面試的組織實施程序
- 結(jié)構(gòu)化面試必備知識的面試技巧
- 結(jié)構(gòu)化面試技巧(完整版)
- 事業(yè)單位結(jié)構(gòu)化面試技巧
- 公務(wù)員結(jié)構(gòu)化的面試技巧
- 結(jié)構(gòu)化面試特征及應(yīng)對技巧
- 結(jié)構(gòu)化面試90-答題技巧
- 如何看人不走眼—結(jié)構(gòu)化面試技巧
- 【面試方法】結(jié)構(gòu)化面試技巧-24頁
- 事業(yè)單位結(jié)構(gòu)化面試技巧套路
評論
0/150
提交評論