版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件工程5.1軟件實(shí)現(xiàn)的主要任務(wù)使用選定的程序設(shè)計(jì)語言,把模塊的過程性描述翻譯為用該語言書寫的源程序(源代碼)。模塊的過程性描述(不可執(zhí)行的)源程序(可執(zhí)行的)編碼清晰性效率開發(fā)時(shí)間程序輸出內(nèi)存數(shù)語句數(shù)程序可讀性最佳輸出可讀性最佳占內(nèi)存最小語句數(shù)最少開發(fā)時(shí)間最短1145321533351243521442521編碼要求結(jié)果名次評判項(xiàng)目Winberg的程序?qū)嶒?yàn)結(jié)果3結(jié)構(gòu)化程序設(shè)計(jì)是一種設(shè)計(jì)程序的技術(shù),它采用自頂向下、逐步細(xì)化的設(shè)計(jì)方法和單入口(Singleentry)、單出口(Singleexit)的控制結(jié)構(gòu)。這種控制結(jié)構(gòu)包括有:順序、選擇和循環(huán)。5.2結(jié)構(gòu)化程序設(shè)計(jì)45.2結(jié)構(gòu)化程序設(shè)計(jì)
a<=100FTb>=20b%3==1b+=3a++b-=5TFFTa=0,b=1單入口單出口5A<BA,B,CB<CA<C打印BFTFTTF打印C打印A5.2結(jié)構(gòu)化程序設(shè)計(jì)……If(A.LT.B)goto120If(B.LT.C)goto110100write(6,*)Cgoto140110write(6,*)Bgoto140120If(A.LT.C)goto130goto100130write(6,*)A140continue單入口多出口結(jié)構(gòu)6無節(jié)制地使用了GOTO語句所產(chǎn)生的程序流程5.2結(jié)構(gòu)化程序設(shè)計(jì)7一、結(jié)構(gòu)化程序設(shè)計(jì)的原則1、使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序;2、選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口;3、程序語句組成容易識別的塊(Block),每塊只有一個(gè)入口和一個(gè)出口;4、復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進(jìn)行組合嵌套來實(shí)現(xiàn);5、嚴(yán)格控制GOTO語句。5.2結(jié)構(gòu)化程序設(shè)計(jì)8……F0=F(a);F1=F(b);if(F0*F1<=0){X0=a;X1=b;for(i=1;i<=n;i++){Xm=(X0+X1)/2;Fm=F(Xm);if(abs(Fm)<eps||abs(X1-X0)<eps)gotofinish;if(F0*Fm>0){X0=Xm;F0=Fm;}elseX1=Xm;}finish:printf(“%d\n”,Xm);}5.2結(jié)構(gòu)化程序設(shè)計(jì)9Begin(F0*F1)<=0X0=aX1=bi=1Xm=(X0+X1)/2Fm=F(m)Q(F0*Fm)>0X0=XmX1=XmF0=FmTTXmFTFFF0=F(a)F1=F(b)11End22i<=niQ=abs((Fm)<eps||abs(X1-X0)<eps)10……F0=F(a);F1=F(b);if(F0*F1<=0){X0=a;X1=b;for(i=1;i<=n;i++){Xm=(X0+X1)/2;Fm=F(Xm);if(abs(Fm)<eps||abs(X1-X0)<eps)break;if(F0*Fm>0){X0=Xm;F0=Fm;}elseX1=Xm;}printf(“%d\n”,Xm);}11……F0=F(a);F1=F(b);if(F0*F1<=0){X0=a;X1=b;i=1;finish=0;while(i<=n&&finish==0){Xm=(X0+X1)/2;Fm=F(Xm);if(abs(Fm)<eps||abs(X1-X0)<eps)finish=1;if(finish==0);if(F0*Fm>0){X0=Xm;F0=Fm;}elseX1=Xm;i++;}printf(“%d\n”,Xm);}12二、程序設(shè)計(jì)自頂向下,逐步求精1、程序設(shè)計(jì)是一個(gè)由粗到細(xì)的“漸進(jìn)”的過程2、程序設(shè)計(jì)不僅包括對控制結(jié)構(gòu)的設(shè)計(jì),也包括對數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。
二者都要一步一步地細(xì)化。
采用逐步細(xì)化方法設(shè)計(jì)程序的步驟列出問題的初步解分解主要問題繼續(xù)細(xì)化利用圖形工具或偽代碼描述程序的詳細(xì)邏輯5.2結(jié)構(gòu)化程序設(shè)計(jì)13用逐步細(xì)化方法設(shè)計(jì)一個(gè)程序,其功能為:“從一組數(shù)中找出最大的數(shù)”舉例第一步:列出問題的初步解1:輸入一組數(shù)2:找出其中最大的數(shù)3:輸出最大的數(shù)第二步:分解主要問題2.1:首先讀入一個(gè)數(shù)并設(shè)其為最大的數(shù)2.2:將該數(shù)逐次與其它數(shù)進(jìn)行比較2.3:若有大于該數(shù)的則將其設(shè)為最大數(shù)保存14用逐步細(xì)化方法設(shè)計(jì)一個(gè)程序,其功能為:“從一組數(shù)中找出最大的數(shù)”舉例第三步:確定數(shù)據(jù)結(jié)構(gòu)3.1:定義一數(shù)組A3.2:max=A(1)3.3:從A(2)至A(n)開始比較3.4:若當(dāng)前數(shù)A(i)大于max,則令:max=A(i)第四步:用PDL描述InputarrayASetMax=A(1)DOfori=2tonIFMax<A(i)SetMax=A(i)ENDIFENDDOPrintMax15練習(xí)請用逐步細(xì)化方法設(shè)計(jì)由下列描述的程序結(jié)構(gòu)讀入一段任意長度的英語課文,將其分解為單字,然后輸出一張單詞表(listofwords),并指出每種單詞在課文中的出現(xiàn)次數(shù)。16三、程序復(fù)雜性的度量程序復(fù)雜性主要是指模塊內(nèi)部程序的復(fù)雜性。它直接關(guān)系到軟件開發(fā)費(fèi)用的多少,開發(fā)周期的長短和軟件和軟件內(nèi)部潛伏錯誤的多少。同時(shí)它也是軟件可理解性的另一種度量。5.2結(jié)構(gòu)化程序設(shè)計(jì)17它可以用來計(jì)算任何一個(gè)程序的復(fù)雜性;對于不合理的程序,例如對于長度動態(tài)增長的程序,或者對于原則上無法排錯的程序,不應(yīng)當(dāng)使用它進(jìn)行復(fù)雜性計(jì)算;如果程序中指令條數(shù)、附加存儲量、計(jì)算時(shí)間增多,不會增加程序的復(fù)雜性。為了度量程序復(fù)雜性,要求復(fù)雜性度量應(yīng)滿足以下假設(shè):三、程序復(fù)雜性的度量5.2結(jié)構(gòu)化程序設(shè)計(jì)18如果設(shè)每行代碼的出錯率為每100行源程序中可能的錯誤數(shù)目。例如,每行代碼的出錯率為1%,也就是說,每100行源程序中就可能有一個(gè)錯誤。1、代碼行度量法:統(tǒng)計(jì)程序中的源代碼的行數(shù)較小的程序---1.3%~1.8%/行較大的程序---2.7%~3.2%/行19該方法是利用程序模塊的程序圖中環(huán)路的個(gè)數(shù),來計(jì)算程序的復(fù)雜性的。為此,該方法也稱為環(huán)路復(fù)雜度計(jì)算法。2、McCabe度量法:利用程序的控制流來度量程序的復(fù)雜性
它是一種退化了的程序流程圖。即:把程序流程圖中每個(gè)處理符號都退化成一個(gè)結(jié)點(diǎn),而原來流程圖中的流程線,則變成連接不同結(jié)點(diǎn)的有向弧。20(1)程序圖符號2122TC1C2CABED(2)從流程圖導(dǎo)出程序圖A開始C1BCED結(jié)束C2T23McCabe的環(huán)路復(fù)雜性度量值為3(3)環(huán)路復(fù)雜性的計(jì)算方法V(G)=流圖中的區(qū)域數(shù)區(qū)域:由邊和節(jié)點(diǎn)圍起來的的面積,包括圖外部未被圍起來的區(qū)域。V(G)=區(qū)域數(shù)=324說明:V(G)是有向圖G中環(huán)路復(fù)雜性;ABCDEFGHKLIMcCabe的環(huán)路復(fù)雜性度量值為3(3)環(huán)路復(fù)雜性的計(jì)算方法V(G)=m-n+2說明:V(G)是有向圖G中環(huán)路復(fù)雜性;m:為圖G中弧數(shù);n:為圖G中節(jié)點(diǎn)數(shù);V(G)=12-11+2=3ABCDEFGHKLIMcCabe的環(huán)路復(fù)雜性度量值為3(3)環(huán)路復(fù)雜性的計(jì)算方法V(G)=n+1說明:V(G)是有向圖G中環(huán)路復(fù)雜性;n:為圖G中判定節(jié)點(diǎn)數(shù);V(G)=2+1=3ABCDEFGHKLI練習(xí)請將右側(cè)給出的程序流程圖轉(zhuǎn)換成程序圖,并計(jì)算其環(huán)路值。a<=100FTb>=20b%3==1b+=3a++b-=5TFFTa=0,b=127V(G)=42812345768V(G)=流圖中的區(qū)域數(shù)V(G)=m-n+2V(G)=10-8+2=4V(G)=P+1V(G)=3+1(4)、環(huán)路復(fù)雜度的用途程序的環(huán)路復(fù)雜度則取決于程序控制流的復(fù)雜度,也就是取決于程序結(jié)構(gòu)的復(fù)雜程度。當(dāng)程序內(nèi)分支或循環(huán)個(gè)數(shù)增加時(shí),則相應(yīng)地環(huán)域復(fù)雜度也隨之增加。因此,它是對測試難度的一種定量度量,也能對軟件最終的可靠性給出某種預(yù)測。V(G)<=1029請用程序流程圖描述下列問題的算法,再將其轉(zhuǎn)換為程序圖并計(jì)算其環(huán)路值。請定義一個(gè)數(shù)組a,要求找出數(shù)組中最大數(shù)和最小數(shù),并把最大數(shù)和a[0]中的數(shù)對調(diào)、最小數(shù)和a[1]中的數(shù)對調(diào)。作業(yè)30請畫出下列偽代碼程序的流程圖、程序圖并計(jì)算它的環(huán)路復(fù)雜度。LOOP:DoWhileZ>0A=A+1IFA>10THENX=AELSEY=ZENDIFIFY<5THENPRINTX,YELSEIFY=2THENGOTOLOOPELSEC=3ENDIFENDIFG=H+RENDDOIFF>0THENPRINTGELSEPRINTKENDIFSTOP作業(yè)31四、程序效率程序效率是指程序的執(zhí)行速度及程序占用的存儲空間。程序編碼是最后提高運(yùn)行速度和節(jié)省存儲機(jī)會,因此在此階段不能不考慮程序的效率。32源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法的效率有著直接的關(guān)系。當(dāng)我們把詳細(xì)設(shè)計(jì)翻譯并轉(zhuǎn)換成源代碼之后,那么算法效率就會反映為程序的執(zhí)行速度和存儲容量的要求。四、程序效率33(1)在編程序前,盡可能化簡有關(guān)的算術(shù)表達(dá)式和邏輯表達(dá)式(2)仔細(xì)檢查算法中的嵌套的循環(huán),盡可能將某些語句或表達(dá)式移到循環(huán)外面(3)盡量避免使用多維數(shù)組(4)盡量避免使用指針和復(fù)雜的表(5)不要混淆數(shù)據(jù)類型,避免在表達(dá)式中出現(xiàn)類型混雜(6)盡量采用整數(shù)算術(shù)表達(dá)式和布爾表達(dá)式(7)選用等效的高效率算法轉(zhuǎn)換過程中的指導(dǎo)原則是:34∑∑(i+1)2(j+2)203i=1j=1舉例請?jiān)O(shè)計(jì)求解下列問題的算法main(){inti,j;floatsum;sum=0.0;
for(i=1;i<=20;i++)for(j=1;j<=3;j++)sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%d\n”,sum);}內(nèi)循環(huán)判斷次數(shù)20X4=80外循環(huán)判斷次數(shù)21總循環(huán)判斷次數(shù)10135main(){inti,j;floatsum;sum=0.0;
for(j=1;j<=3;j++)for(i=1;i<=20;i++)
sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%d\n”,sum);}j+2共計(jì)執(zhí)行了3X20=60次36內(nèi)循環(huán)判斷次數(shù)3X21=63外循環(huán)判斷次數(shù)4總循環(huán)判斷次數(shù)67減少了34次main(){inti,j;floatsum;sum=0.0;for(j=1;j<=3;j++){k=j+2;for(i=1;i<=20;i++)sum=sum+(i+1)*(i+1)*k;
}printf(“sum=%d\n”,sum);}減少了57次i+1共計(jì)執(zhí)行了60X2=120次37j+2共計(jì)執(zhí)行了3次main(){inti,j;floatsum;sum=0.0;for(j=1;j<=3;j++){k=j+2;for(i=1;i<=20;i++){m=i+1;
sum=sum+m*m*k;}printf(“sum=%d\n”,sum);}60次i+1共計(jì)執(zhí)行了減少了60次練習(xí)從鍵盤輸入10個(gè)整數(shù),要求按由小到大的順序?qū)⑺鼈冚敵?。main(){inta[10],i,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++)for(j=i+1;j<10;j++)if(a[j]<a[i]){t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<10;i++)printf(“%2d”,a[i]);}……for(i=0;i<9;i++){k=i;for(j=i+1;j<10;j++)if(a[j]<a[k])k=j;if(k<>j){t=a[j];a[j]=a[k];a[k]=t;}}……五、程序設(shè)計(jì)風(fēng)格Codingstyle(1)、對多入口和多出口的控制結(jié)構(gòu)要作適當(dāng)?shù)奶幚怼璉fC1thengoto3010S220IfC2thengoto40goto1030S1goto2040SnC1S1S2C2SnTT多入口循環(huán)結(jié)構(gòu)40IfC1thenS1elseS2While(notC2)doS2C1S1C2SnTTS2S2改進(jìn)后的循環(huán)結(jié)構(gòu)41C1S1S2C2SnTT多入口循環(huán)結(jié)構(gòu)……IfC1thengoto3010S220IfC2thengoto40goto1030S1goto2040Sn10if(notC1)thengoto20if(notC2)thengoto30S1goto1020S230多出口循環(huán)結(jié)構(gòu)C1S2TTC2S142while(C1andC2)doS1If(not(C1)thenS2經(jīng)過處理后的單出口循環(huán)結(jié)構(gòu)C1andC2S2TC1S1TC1S2TTC2S110if(notC1)thengoto20if(notC2)thengoto30S1goto1020S230while(C1)doBeginS1IfC2thengoto10elseS2End10SnEXIT:=falsewhile(C1and
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江陰市個(gè)人房屋出租合同書
- 商場貨物供應(yīng)與銷售合同(2025年度)2篇
- 個(gè)人和單位的購貨合同3
- 二零二四年度園林景觀苗木采購及運(yùn)輸合同3篇
- 二零二五版特殊功能木門采購協(xié)議4篇
- 2025版企業(yè)宣傳片制作與推廣服務(wù)合同范本3篇
- 2025版土地整治及房屋重建合同書3篇
- 二零二五版機(jī)械制造外包項(xiàng)目進(jìn)度管理合同范本2篇
- 二零二四年度冶金工程竣工驗(yàn)收綜合評價(jià)擔(dān)保協(xié)議3篇
- 二零二五版拍賣師藝術(shù)品拍賣信息發(fā)布合同3篇
- 招標(biāo)師《招標(biāo)采購項(xiàng)目管理》近年考試真題題庫(含答案解析)
- 微生物組與唾液腺免疫反應(yīng)-洞察分析
- 2024公共數(shù)據(jù)授權(quán)運(yùn)營實(shí)施方案
- 2024年國家焊工職業(yè)技能理論考試題庫(含答案)
- 《向心力》 教學(xué)課件
- 結(jié)構(gòu)力學(xué)數(shù)值方法:邊界元法(BEM):邊界元法的基本原理與步驟
- 北師大版物理九年級全一冊課件
- 2024年第三師圖木舒克市市場監(jiān)督管理局招錄2人《行政職業(yè)能力測驗(yàn)》高頻考點(diǎn)、難點(diǎn)(含詳細(xì)答案)
- RFJ 006-2021 RFP型人防過濾吸收器制造與驗(yàn)收規(guī)范(暫行)
- 盆腔炎教學(xué)查房課件
- 110kv各類型變壓器的計(jì)算單
評論
0/150
提交評論