




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十一章第十一章 程序開發(fā)程序開發(fā)n自頂向下、逐步求精自頂向下、逐步求精n結(jié)構(gòu)化程序設(shè)計(jì)原則結(jié)構(gòu)化程序設(shè)計(jì)原則n程序風(fēng)格程序風(fēng)格作業(yè)作業(yè): 11.1 11.7 練習(xí)練習(xí): 11.6 編程序并不難,只要有算法,會程序設(shè)計(jì)語言,任何人都編程序并不難,只要有算法,會程序設(shè)計(jì)語言,任何人都可以編出程序,但是不同人編出的程序卻大不相同。針對同一可以編出程序,但是不同人編出的程序卻大不相同。針對同一個(gè)問題個(gè)問題: 有人編的程序風(fēng)格好、易讀、易維護(hù)、易重用、可靠性高、有人編的程序風(fēng)格好、易讀、易維護(hù)、易重用、可靠性高、運(yùn)行得既快又節(jié)省存儲空間;運(yùn)行得既快又節(jié)省存儲空間; 有人編的程序風(fēng)格差、晦澀難懂、難于維
2、護(hù)、冗長、正確有人編的程序風(fēng)格差、晦澀難懂、難于維護(hù)、冗長、正確性和可靠性極低、運(yùn)行起來既慢又占用空間。性和可靠性極低、運(yùn)行起來既慢又占用空間。編程序易,編好程序難編程序易,編好程序難。 要想編出一個(gè)風(fēng)格優(yōu)美、正確可靠、各方面均優(yōu)秀的好程要想編出一個(gè)風(fēng)格優(yōu)美、正確可靠、各方面均優(yōu)秀的好程序,必須按照現(xiàn)代軟件工程的規(guī)范進(jìn)行。同時(shí)也必須遵循好的序,必須按照現(xiàn)代軟件工程的規(guī)范進(jìn)行。同時(shí)也必須遵循好的程序設(shè)計(jì)原則和使用好的程序設(shè)計(jì)方法。程序設(shè)計(jì)原則和使用好的程序設(shè)計(jì)方法。 本章介紹程序開發(fā)、結(jié)構(gòu)化程序設(shè)計(jì)。本章介紹程序開發(fā)、結(jié)構(gòu)化程序設(shè)計(jì)。11.1 11.1 求三角形外心求三角形外心 -自頂向下、逐步
3、求精自頂向下、逐步求精 【例【例11.1】編程序,輸入平面上三個(gè)點(diǎn),求過該三】編程序,輸入平面上三個(gè)點(diǎn),求過該三點(diǎn)的圓的圓心。點(diǎn)的圓的圓心。 解:為了簡單,設(shè)該三點(diǎn)不在一條直線上。下邊考解:為了簡單,設(shè)該三點(diǎn)不在一條直線上。下邊考慮怎樣解決改問題。慮怎樣解決改問題。 按幾何知識,過該三點(diǎn)的圓的圓心應(yīng)該是由該三點(diǎn)按幾何知識,過該三點(diǎn)的圓的圓心應(yīng)該是由該三點(diǎn)組成的三角形的外心,即三條邊的垂直平分線的交點(diǎn)。組成的三角形的外心,即三條邊的垂直平分線的交點(diǎn)。設(shè)該三點(diǎn)為設(shè)該三點(diǎn)為A、B、C,三點(diǎn)的坐標(biāo)分別為:,三點(diǎn)的坐標(biāo)分別為:ax、ay、bx、by、cx、cy。該問題的解法可以描述為如下。該問題的解法可
4、以描述為如下PAD.讀入三點(diǎn)坐標(biāo)只是一個(gè)讀語句,不必求精讀入三點(diǎn)坐標(biāo)只是一個(gè)讀語句,不必求精 ,下邊考慮,下邊考慮求垂直平分線和求交點(diǎn)。求垂直平分線和求交點(diǎn)。 輸入三點(diǎn)坐標(biāo):輸入三點(diǎn)坐標(biāo):axax、ayay、bxbx、byby、cxcx、cycy計(jì)算邊計(jì)算邊AB的垂直平分線的垂直平分線R計(jì)算邊計(jì)算邊BC的垂直平分線的垂直平分線S求直線求直線R、S交點(diǎn)交點(diǎn)T輸出交點(diǎn)輸出交點(diǎn)T坐標(biāo)坐標(biāo)開始開始結(jié)束結(jié)束 求垂直平分線??梢韵仍O(shè)計(jì)一個(gè)函數(shù)求線段求垂直平分線??梢韵仍O(shè)計(jì)一個(gè)函數(shù)求線段VU的垂直平的垂直平分線,然后分別以分線,然后分別以AB、BC為實(shí)在參數(shù)調(diào)用該函數(shù)。求線段為實(shí)在參數(shù)調(diào)用該函數(shù)。求線段的垂
5、直平分線應(yīng)該找到該線段的中點(diǎn),和該線段的直線方程,的垂直平分線應(yīng)該找到該線段的中點(diǎn),和該線段的直線方程,然后過中點(diǎn)的與線段方程垂直的直線即是。按這個(gè)分析得如然后過中點(diǎn)的與線段方程垂直的直線即是。按這個(gè)分析得如下下PAD。計(jì)算邊計(jì)算邊UVUV的中點(diǎn)坐標(biāo)的中點(diǎn)坐標(biāo)求線段求線段UVUV的直線方程的直線方程求垂直平分線方程求垂直平分線方程開始開始結(jié)束結(jié)束計(jì)算計(jì)算UV中點(diǎn),只是兩個(gè)公式:中點(diǎn),只是兩個(gè)公式:x=(ux+vx)/2y=(uy+vy)/2求求AB直線方程也只是兩個(gè)公式:直線方程也只是兩個(gè)公式:斜率斜率a=(uy-vy)/(ux-vx)截距截距b=uy-a*ux可以寫一個(gè)函數(shù)可以寫一個(gè)函數(shù) l
6、ine(x1,y1,x2,y2, *a,*b ) line*b = y1-*a*x1結(jié)束結(jié)束*a = (y2-y1)/(x2-x1)x1,y1,x2,y2:兩點(diǎn)坐標(biāo):兩點(diǎn)坐標(biāo) *a, *b :直線方程系數(shù):直線方程系數(shù)垂直平分線方程為:垂直平分線方程為:斜率斜率aa= -1/a截距截距bb=y-a*x問題已經(jīng)解決。問題已經(jīng)解決。 求求R、S交點(diǎn)。已知交點(diǎn)。已知AB的垂直平分線的垂直平分線 R 的斜率為的斜率為aa,截距,截距為為bb ,設(shè)線段,設(shè)線段BC的垂直平分線的垂直平分線 S 的斜率的斜率aaa,截距為,截距為bbb,則,則兩條垂直平分線方程的交點(diǎn)為:兩條垂直平分線方程的交點(diǎn)為:x=(b
7、b-bbb)/(aaa-aa)y=aa*x+bb這就是所求。綜合上述分析,編出程序如下:這就是所求。綜合上述分析,編出程序如下:/*PROGRAM test*/#include stdio.h#include math.h/*求由兩點(diǎn)所確定直線方程系數(shù)求由兩點(diǎn)所確定直線方程系數(shù)y=a*x+b */void line(float x1,float y1,float x2,float y2,float *a,float *b)*a=(y1-y2)/(x1-x2);*b=y1-(*a)*x1;/*求由兩點(diǎn)所確定直線的中垂線的方程求由兩點(diǎn)所確定直線的中垂線的方程*/void vline(float x
8、1,float y1,float x2,float y2,float *a, float *b)float ta,tb;float x,y;x=(x1+x2)/2;y=(y1+y2)/2;/兩點(diǎn)所確定直線的中點(diǎn)兩點(diǎn)所確定直線的中點(diǎn)line(x1,y1,x2,y2,&ta,&tb);/兩點(diǎn)所確定直線的方程兩點(diǎn)所確定直線的方程*a=-1/ta;*b=y-(*a)*x;/中垂線方程中垂線方程運(yùn)行結(jié)果演示運(yùn)行結(jié)果演示/*求兩條直線交點(diǎn),計(jì)算交點(diǎn)坐標(biāo)求兩條直線交點(diǎn),計(jì)算交點(diǎn)坐標(biāo)*/void OnePoint(float a1,float b1,float a2,float b2,floa
9、t *x,float *y)*x=(b2-b1)/(a1-a2);*y=a1*(*x)+b1; /交點(diǎn)坐標(biāo)交點(diǎn)坐標(biāo)/*主程序主程序*/void main()float ax,ay,bx,by,cx,cy;/三點(diǎn)坐標(biāo)三點(diǎn)坐標(biāo)float a_a,a_b,b_a,b_b;/三角形兩條邊中垂線的直線方程三角形兩條邊中垂線的直線方程*/float centerx,centery;/中垂線交點(diǎn)坐標(biāo)中垂線交點(diǎn)坐標(biāo)*/printf(please input coordinat of point a、b、c:); /輸入三角輸入三角形三點(diǎn)坐標(biāo)形三點(diǎn)坐標(biāo)scanf(%f%f %f%f %f%f ,&ax,
10、&ay,&bx,&by,&cx,&cy);vline(ax,ay,bx,by,&a_a,&a_b);vline(bx,by,cx,cy,&b_a,&b_b); /求兩條中垂線的斜率和截距求兩條中垂線的斜率和截距OnePoint( a_a,a_b,b_a,b_b,¢erx,¢ery); /兩條中垂線交點(diǎn)兩條中垂線交點(diǎn)printf(the center of the circumcircle is:(%g,%g)n ,centerx,centery);例例11.1和本書所有稍微復(fù)雜點(diǎn)的例題,全部
11、都和本書所有稍微復(fù)雜點(diǎn)的例題,全部都是使用是使用“自頂向下、逐步求精自頂向下、逐步求精”的方法開發(fā)的。的方法開發(fā)的。“自自頂向下、逐步求精頂向下、逐步求精”的程序設(shè)計(jì)技術(shù)是目前較為時(shí)髦的程序設(shè)計(jì)技術(shù)是目前較為時(shí)髦的(當(dāng)然也是較為合理的)找出一個(gè)問題的解題算法的(當(dāng)然也是較為合理的)找出一個(gè)問題的解題算法的一種思維方法。該技術(shù)的基本思想在第五章已經(jīng)初的一種思維方法。該技術(shù)的基本思想在第五章已經(jīng)初步介紹過。步介紹過。 “自頂向下、逐步求精自頂向下、逐步求精”過程中的每一步,分解過程中的每一步,分解某一具體問題時(shí),主要用到如下四種求精技術(shù):某一具體問題時(shí),主要用到如下四種求精技術(shù): 1. 順序連接的
12、求精順序連接的求精 2. 分支、選擇的求精分支、選擇的求精 3. 循環(huán)的求精循環(huán)的求精 4. 遞歸的求精遞歸的求精“自頂向下,逐步求精自頂向下,逐步求精”的分析技術(shù)實(shí)質(zhì)上是上圖所示過程的反復(fù)。的分析技術(shù)實(shí)質(zhì)上是上圖所示過程的反復(fù)。 求解一個(gè)問題求解一個(gè)問題粗略的解決方案粗略的解決方案細(xì)細(xì) 化化第一步子問題第一步子問題第二步子問題第二步子問題第第n步子問題步子問題.前處理前處理 結(jié)束條件結(jié)束條件后處理后處理進(jìn)進(jìn)展展一一步步前處理前處理后處理后處理?xiàng)l條件件處理處理1處理處理2處理處理n. .條件條件2條件條件n 條件條件1前處理前處理后處理后處理遞歸遞歸條件條件遞歸遞歸順序順序 連接連接循環(huán)循環(huán)
13、分支分支 選擇選擇 遞歸遞歸 當(dāng)問題的子解具有前后關(guān)系時(shí),采用第一種順序連接的求精當(dāng)問題的子解具有前后關(guān)系時(shí),采用第一種順序連接的求精技術(shù),將問題分解成互不相交的幾個(gè)子問題的順序執(zhí)行。技術(shù),將問題分解成互不相交的幾個(gè)子問題的順序執(zhí)行。 當(dāng)問題是分別不同情況而應(yīng)該進(jìn)行不同處理時(shí),采用分支、選擇當(dāng)問題是分別不同情況而應(yīng)該進(jìn)行不同處理時(shí),采用分支、選擇的求精技術(shù),構(gòu)造分支。這時(shí)要注意分支的條件一定要正確。的求精技術(shù),構(gòu)造分支。這時(shí)要注意分支的條件一定要正確。當(dāng)問題的子解具有特性:如果有向解的方向前進(jìn)一步的方法,且當(dāng)問題的子解具有特性:如果有向解的方向前進(jìn)一步的方法,且不斷重復(fù)該步驟,即能解決問題,最
14、終達(dá)到完全解。則應(yīng)該采用不斷重復(fù)該步驟,即能解決問題,最終達(dá)到完全解。則應(yīng)該采用循環(huán)的求精技術(shù)(構(gòu)造循環(huán))。這時(shí)一定要弄清循環(huán)的初始條件、循環(huán)的求精技術(shù)(構(gòu)造循環(huán))。這時(shí)一定要弄清循環(huán)的初始條件、結(jié)束條件和有限進(jìn)展的一步都是什么。結(jié)束條件和有限進(jìn)展的一步都是什么。 當(dāng)問題的某步解法與前邊高層次的某步解法具有相同性質(zhì),只是當(dāng)問題的某步解法與前邊高層次的某步解法具有相同性質(zhì),只是某些參數(shù)不同時(shí),可采用遞歸的求精技術(shù)。這時(shí)應(yīng)注意遞歸的參數(shù)某些參數(shù)不同時(shí),可采用遞歸的求精技術(shù)。這時(shí)應(yīng)注意遞歸的參數(shù)變化規(guī)律以及遞歸出口。變化規(guī)律以及遞歸出口。 “自頂向下、逐步求精自頂向下、逐步求精”是一種思維方式,它不
15、是計(jì)算機(jī)程是一種思維方式,它不是計(jì)算機(jī)程序員獨(dú)有的。事實(shí)上在日常生活、工作中也經(jīng)常的使用該技術(shù),序員獨(dú)有的。事實(shí)上在日常生活、工作中也經(jīng)常的使用該技術(shù),只不過不自覺或沒意識到罷了。只不過不自覺或沒意識到罷了。 例如寫一本書、或文章,總要作一個(gè)提綱,全書分成幾章;例如寫一本書、或文章,總要作一個(gè)提綱,全書分成幾章;然后對每一章又列出本章分幾節(jié);對每一節(jié)又分出幾小節(jié)等等;然后對每一章又列出本章分幾節(jié);對每一節(jié)又分出幾小節(jié)等等;最后再具體著手寫每個(gè)小節(jié)。最后再具體著手寫每個(gè)小節(jié)。 又如,設(shè)計(jì)生產(chǎn)某產(chǎn)品的一個(gè)工廠(比如汽車廠):首先又如,設(shè)計(jì)生產(chǎn)某產(chǎn)品的一個(gè)工廠(比如汽車廠):首先應(yīng)考慮全廠應(yīng)該分成幾
16、個(gè)車間(例如,生產(chǎn)發(fā)動(dòng)機(jī)的發(fā)動(dòng)機(jī)車應(yīng)考慮全廠應(yīng)該分成幾個(gè)車間(例如,生產(chǎn)發(fā)動(dòng)機(jī)的發(fā)動(dòng)機(jī)車間、生產(chǎn)底盤的底盤車間、生產(chǎn)車輪的車輪車間、總裝車間、生產(chǎn)底盤的底盤車間、生產(chǎn)車輪的車輪車間、總裝車間、間、.);然后再考慮每個(gè)車間應(yīng)分成幾個(gè)工段(例如,發(fā)動(dòng));然后再考慮每個(gè)車間應(yīng)分成幾個(gè)工段(例如,發(fā)動(dòng)機(jī)車間應(yīng)分成生產(chǎn)機(jī)殼的機(jī)殼工段、生產(chǎn)活塞的活塞工段、負(fù)機(jī)車間應(yīng)分成生產(chǎn)機(jī)殼的機(jī)殼工段、生產(chǎn)活塞的活塞工段、負(fù)責(zé)工件熱處理的熱處理工段、責(zé)工件熱處理的熱處理工段、.);然后再考慮每個(gè)工段應(yīng)該);然后再考慮每個(gè)工段應(yīng)該配備多少種設(shè)備,每種設(shè)備應(yīng)配備多少臺,配備多少種設(shè)備,每種設(shè)備應(yīng)配備多少臺,. 等等。等等。
17、 這就是自頂向下、逐步求精。這就是自頂向下、逐步求精。 采用自頂向下、逐步求精方法構(gòu)造程序有如下優(yōu)點(diǎn)采用自頂向下、逐步求精方法構(gòu)造程序有如下優(yōu)點(diǎn): 1. 程序的層次分明、結(jié)構(gòu)清晰。程序的層次分明、結(jié)構(gòu)清晰。 2. 便于集體開發(fā)程序。對于大型程序來講,可以每組便于集體開發(fā)程序。對于大型程序來講,可以每組負(fù)責(zé)一個(gè)模塊(一個(gè)子部分),在一個(gè)組內(nèi)又可以每個(gè)人負(fù)負(fù)責(zé)一個(gè)模塊(一個(gè)子部分),在一個(gè)組內(nèi)又可以每個(gè)人負(fù)責(zé)一個(gè)子模塊(更小的子部分)等等。而各個(gè)模塊之間以及責(zé)一個(gè)子模塊(更小的子部分)等等。而各個(gè)模塊之間以及各個(gè)子模塊之間相對獨(dú)立,互相之間沒有制約,各個(gè)模塊的各個(gè)子模塊之間相對獨(dú)立,互相之間沒有制
18、約,各個(gè)模塊的負(fù)責(zé)人員可以獨(dú)立的進(jìn)行各自的程序設(shè)計(jì)。負(fù)責(zé)人員可以獨(dú)立的進(jìn)行各自的程序設(shè)計(jì)。 3. 便于調(diào)試。若程序有錯(cuò)誤,可以很容易的將錯(cuò)誤局便于調(diào)試。若程序有錯(cuò)誤,可以很容易的將錯(cuò)誤局部于某一子部分,找出錯(cuò)誤,同時(shí)每一部分的錯(cuò)誤是獨(dú)立的,部于某一子部分,找出錯(cuò)誤,同時(shí)每一部分的錯(cuò)誤是獨(dú)立的,也不至于影響其它的部分。也不至于影響其它的部分。例例11.2 三個(gè)齒輪嚙合問題三個(gè)齒輪嚙合問題 設(shè)有三個(gè)齒輪互相銜接,求當(dāng)三個(gè)齒輪的某設(shè)有三個(gè)齒輪互相銜接,求當(dāng)三個(gè)齒輪的某兩對齒互相銜接后到下一次這兩對齒再互相銜接,兩對齒互相銜接后到下一次這兩對齒再互相銜接,每個(gè)齒輪最少各轉(zhuǎn)多少圈。每個(gè)齒輪最少各轉(zhuǎn)多少圈
19、。 解解:這是求最小公倍數(shù)的問題。每個(gè)齒輪需轉(zhuǎn)這是求最小公倍數(shù)的問題。每個(gè)齒輪需轉(zhuǎn)圈數(shù)是三個(gè)齒輪齒數(shù)的最小公倍數(shù)除以自己的齒圈數(shù)是三個(gè)齒輪齒數(shù)的最小公倍數(shù)除以自己的齒數(shù)。設(shè)數(shù)。設(shè) 三個(gè)齒輪的齒數(shù)分別為三個(gè)齒輪的齒數(shù)分別為:na、nb、nc ; 嚙合最小圈數(shù)分別為嚙合最小圈數(shù)分別為:ma、mb、mc ; 三齒輪齒數(shù)的最小公倍數(shù)為三齒輪齒數(shù)的最小公倍數(shù)為k3 。計(jì)算步驟表示為:計(jì)算步驟表示為:開始開始讀入三齒輪齒數(shù)讀入三齒輪齒數(shù)求三齒數(shù)的最小公倍數(shù)求三齒數(shù)的最小公倍數(shù) k3分別計(jì)算嚙合的最小圈數(shù)分別計(jì)算嚙合的最小圈數(shù)輸出結(jié)果輸出結(jié)果結(jié)束結(jié)束 讀入三齒輪齒數(shù)和輸出結(jié)果,分別只是一次調(diào)用讀入三齒輪齒數(shù)
20、和輸出結(jié)果,分別只是一次調(diào)用讀或?qū)懞瘮?shù),不必求精。讀或?qū)懞瘮?shù),不必求精。 求精計(jì)算三齒數(shù)的最小公倍數(shù)求精計(jì)算三齒數(shù)的最小公倍數(shù)k3 ??梢园言搯栴}分解成??梢园言搯栴}分解成 先求兩個(gè)齒數(shù)先求兩個(gè)齒數(shù)na與與nb的最小公倍數(shù)的最小公倍數(shù)k2 , 然后再求然后再求k2與第三個(gè)齒數(shù)與第三個(gè)齒數(shù) nc 的最小公倍數(shù)的最小公倍數(shù)k3 , k3即為即為na、nb、nc三個(gè)齒輪齒數(shù)的最小公倍數(shù)。三個(gè)齒輪齒數(shù)的最小公倍數(shù)。設(shè)已經(jīng)有求兩個(gè)數(shù)的最小公倍數(shù)的函數(shù)設(shè)已經(jīng)有求兩個(gè)數(shù)的最小公倍數(shù)的函數(shù) int lowestcm( int x, int y )則該求精過程可表示成則該求精過程可表示成 。求三齒數(shù)的求三齒數(shù)的
21、最小公倍數(shù)最小公倍數(shù) k3=lowestcm( lowestcm(na,nb), nc)結(jié)束結(jié)束求精求兩個(gè)數(shù)的最小公倍數(shù)的函求精求兩個(gè)數(shù)的最小公倍數(shù)的函lowestcm 。 x、y的最小公倍數(shù)是的最小公倍數(shù)是x、y 的積除以的積除以x、y 的最的最大公約數(shù)。設(shè)已經(jīng)有求兩個(gè)數(shù)的最大公約數(shù)的函數(shù)大公約數(shù)。設(shè)已經(jīng)有求兩個(gè)數(shù)的最大公約數(shù)的函數(shù) int gcd(int x, int y)則該求精過程可表示成:則該求精過程可表示成: int lowestcm(int x , int y)return x*y / gcd(x,y)結(jié)束結(jié)束def采用展轉(zhuǎn)相除法求兩個(gè)數(shù)的最大公約數(shù),函數(shù)采用展轉(zhuǎn)相除法求兩個(gè)數(shù)的
22、最大公約數(shù),函數(shù)int gcd(int x, int y)定義如下定義如下 0y )%,gcd(0y y)gcd(x, yxyx函數(shù)函數(shù)gcd是一個(gè)遞歸函數(shù),先采用分支求精過程、再采用是一個(gè)遞歸函數(shù),先采用分支求精過程、再采用遞歸求精過程,可以求精成下圖遞歸求精過程,可以求精成下圖int gcd( int x, int y)結(jié)束結(jié)束y0return gcd(y , x % y)return x最后,分別計(jì)算嚙合的最小圈數(shù)可以被求精成下圖最后,分別計(jì)算嚙合的最小圈數(shù)可以被求精成下圖 。開始開始ma = na / k3mb = nb / k3mc = nc / k3結(jié)束結(jié)束/*PROGRAM me
23、sh*/#include stdio.h/*求求x,y的最大公約數(shù)的最大公約數(shù)*/int gcd(int x,int y)if(y=0)return x;elsereturn gcd(y,x%y);/*求求x,y的最小公倍數(shù)的最小公倍數(shù)*/int lcm(int x,int y)return(x*y/gcd(x,y);/*主函數(shù)主函數(shù)*/void main()int n1,n2,n3,result;printf(please input n1 n2 n3:);scanf(%d%d%d,&n1,&n2,&n3);result=lcm(lcm(n1,n2),n3);prin
24、tf(to mesh again the first gear must rotate about %4d ringsn,result/n1);printf(to mesh again the second gear must rotate about %4d ringsn,result/n2);printf(to mesh again the third gear must rotate about %4d ringsn,result/n3);getchar();getchar();運(yùn)行結(jié)果演示運(yùn)行結(jié)果演示11.2 11.2 結(jié)構(gòu)化程序設(shè)計(jì)原則結(jié)構(gòu)化程序設(shè)計(jì)原則 從從20世紀(jì)世紀(jì)60年代開始
25、,計(jì)算機(jī)軟件系統(tǒng)日益發(fā)展,作為軟年代開始,計(jì)算機(jī)軟件系統(tǒng)日益發(fā)展,作為軟件主要組成部分的程序系統(tǒng)越來越龐大,復(fù)雜度越來越高,造件主要組成部分的程序系統(tǒng)越來越龐大,復(fù)雜度越來越高,造價(jià)也越來越昂貴,同時(shí)出錯(cuò)率也不斷增加,系統(tǒng)的可靠性越來價(jià)也越來越昂貴,同時(shí)出錯(cuò)率也不斷增加,系統(tǒng)的可靠性越來越難以保證,維護(hù)也越來越困難。比如,當(dāng)年著名的越難以保證,維護(hù)也越來越困難。比如,當(dāng)年著名的IBM360操作系統(tǒng)出錯(cuò)率是操作系統(tǒng)出錯(cuò)率是3 。經(jīng)過幾年運(yùn)行后,征集了廣大用戶的。經(jīng)過幾年運(yùn)行后,征集了廣大用戶的意見意見, 集中進(jìn)行一次修改,修改完成后,最后測試出錯(cuò)率仍是集中進(jìn)行一次修改,修改完成后,最后測試出錯(cuò)率
26、仍是3 。例子很多,此種情況的不斷發(fā)展,最后終于導(dǎo)致一場所。例子很多,此種情況的不斷發(fā)展,最后終于導(dǎo)致一場所謂的軟件危機(jī)。在該背景下,謂的軟件危機(jī)。在該背景下,1968年年Dijkstra 提出了結(jié)構(gòu)化程提出了結(jié)構(gòu)化程序設(shè)計(jì)思想。這種思想的基點(diǎn)是:序設(shè)計(jì)思想。這種思想的基點(diǎn)是:“清晰,易懂地書寫程序邏輯,使程序結(jié)構(gòu)表現(xiàn)得簡單、明快清晰,易懂地書寫程序邏輯,使程序結(jié)構(gòu)表現(xiàn)得簡單、明快” 從這點(diǎn)出發(fā),人們經(jīng)過艱苦實(shí)踐,總結(jié)出了一套結(jié)構(gòu)化程從這點(diǎn)出發(fā),人們經(jīng)過艱苦實(shí)踐,總結(jié)出了一套結(jié)構(gòu)化程序設(shè)計(jì)原則。這套原則要求程序員寫出的程序應(yīng)該是結(jié)構(gòu)良好序設(shè)計(jì)原則。這套原則要求程序員寫出的程序應(yīng)該是結(jié)構(gòu)良好的,
27、即的,即: 1. 易于保證和驗(yàn)證程序的正確性易于保證和驗(yàn)證程序的正確性 2. 易于閱讀、維護(hù)和調(diào)試。易于閱讀、維護(hù)和調(diào)試。這種良好結(jié)構(gòu)的程序具體體現(xiàn)在:對任意程序段來講這種良好結(jié)構(gòu)的程序具體體現(xiàn)在:對任意程序段來講 1. 僅有一個(gè)入口,一個(gè)出口僅有一個(gè)入口,一個(gè)出口 2. 沒有死循環(huán)沒有死循環(huán) 3. 沒有死碼區(qū)。沒有死碼區(qū)。為了達(dá)到上述目的,強(qiáng)調(diào)程序員在寫程序時(shí)應(yīng)該為了達(dá)到上述目的,強(qiáng)調(diào)程序員在寫程序時(shí)應(yīng)該: 1. 利用自頂向下、逐步求精的技術(shù)設(shè)計(jì)程序利用自頂向下、逐步求精的技術(shù)設(shè)計(jì)程序 2. 具有良好的程序設(shè)計(jì)風(fēng)格具有良好的程序設(shè)計(jì)風(fēng)格 3. 盡量利用標(biāo)準(zhǔn)的順序、分支、重復(fù)控制結(jié)構(gòu)。保證程序
28、盡量利用標(biāo)準(zhǔn)的順序、分支、重復(fù)控制結(jié)構(gòu)。保證程序僅有一個(gè)入口、一個(gè)出口。僅有一個(gè)入口、一個(gè)出口。 4. 限制使用限制使用 GOTO 語句??赡芤粋€(gè)壞程序的缺點(diǎn)都是由語句??赡芤粋€(gè)壞程序的缺點(diǎn)都是由 GOTO 語句引起的。語句引起的。 結(jié)構(gòu)化程序設(shè)計(jì)的發(fā)展,使程序設(shè)計(jì)從技藝走向工程,為軟件工程學(xué)發(fā)結(jié)構(gòu)化程序設(shè)計(jì)的發(fā)展,使程序設(shè)計(jì)從技藝走向工程,為軟件工程學(xué)發(fā)展奠定了有力基礎(chǔ)。使軟件生產(chǎn)由個(gè)體作坊式的藝術(shù)創(chuàng)作方式發(fā)展成為千千展奠定了有力基礎(chǔ)。使軟件生產(chǎn)由個(gè)體作坊式的藝術(shù)創(chuàng)作方式發(fā)展成為千千萬萬人參加的工程方式,達(dá)到了萬萬人參加的工程方式,達(dá)到了“系列化、產(chǎn)品化系列化、產(chǎn)品化 、工程化、工程化 、標(biāo)
29、準(zhǔn)化、標(biāo)準(zhǔn)化”?!败浖こ誊浖こ獭币矎倪@一時(shí)期開始逐步發(fā)展起來。也從這一時(shí)期開始逐步發(fā)展起來。 能夠反映結(jié)構(gòu)化程序設(shè)計(jì)要求,便于書寫結(jié)構(gòu)化程序的程序設(shè)計(jì)語言,能夠反映結(jié)構(gòu)化程序設(shè)計(jì)要求,便于書寫結(jié)構(gòu)化程序的程序設(shè)計(jì)語言,稱結(jié)構(gòu)化程序設(shè)計(jì)語言??梢哉J(rèn)為稱結(jié)構(gòu)化程序設(shè)計(jì)語言??梢哉J(rèn)為C是結(jié)構(gòu)化程序設(shè)計(jì)語言。是結(jié)構(gòu)化程序設(shè)計(jì)語言。 目前程序設(shè)計(jì)領(lǐng)域的熱點(diǎn)是目前程序設(shè)計(jì)領(lǐng)域的熱點(diǎn)是“面向?qū)ο蟪绦蛟O(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)方法”和和“基于構(gòu)件的程基于構(gòu)件的程序設(shè)計(jì)方法序設(shè)計(jì)方法”等。但是,它們的主要特長在于程序的組織、信息封裝、軟件等。但是,它們的主要特長在于程序的組織、信息封裝、軟件重用等。而最終對于
30、足夠小的程序模塊的編碼,它們沒有給人們帶來益處。重用等。而最終對于足夠小的程序模塊的編碼,它們沒有給人們帶來益處。 結(jié)構(gòu)化程序設(shè)計(jì)方法針對每個(gè)程序模塊的設(shè)計(jì)起著不可缺少的十分關(guān)鍵的結(jié)構(gòu)化程序設(shè)計(jì)方法針對每個(gè)程序模塊的設(shè)計(jì)起著不可缺少的十分關(guān)鍵的作用??梢哉f結(jié)構(gòu)化程序設(shè)計(jì)是一切程序設(shè)計(jì)技術(shù)的基礎(chǔ),是任何軟件工作作用??梢哉f結(jié)構(gòu)化程序設(shè)計(jì)是一切程序設(shè)計(jì)技術(shù)的基礎(chǔ),是任何軟件工作者必須掌握的技術(shù)。本書的目標(biāo)是講授程序設(shè)計(jì)基礎(chǔ),主要介紹結(jié)構(gòu)化程序者必須掌握的技術(shù)。本書的目標(biāo)是講授程序設(shè)計(jì)基礎(chǔ),主要介紹結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。設(shè)計(jì)技術(shù)。11.3 11.3 程序風(fēng)格程序風(fēng)格 程序風(fēng)格是指程序的書寫格式等與易讀
31、性、清晰性、互相交流有關(guān)的,程序風(fēng)格是指程序的書寫格式等與易讀性、清晰性、互相交流有關(guān)的,而與程序執(zhí)行無關(guān)或關(guān)系不大的一些的問題。而與程序執(zhí)行無關(guān)或關(guān)系不大的一些的問題。寫程序不僅僅是為了與計(jì)算機(jī)進(jìn)行交流,而且也是為了與人進(jìn)行交流,寫程序不僅僅是為了與計(jì)算機(jī)進(jìn)行交流,而且也是為了與人進(jìn)行交流,進(jìn)一步還為了給自己或別人閱讀,同時(shí)程序員自己也需要不斷地查閱自己編進(jìn)一步還為了給自己或別人閱讀,同時(shí)程序員自己也需要不斷地查閱自己編出的程序,更何況程序的維護(hù)很可能由別人來做。出的程序,更何況程序的維護(hù)很可能由別人來做。 在寫程序時(shí)要考慮到:程序既是為了在計(jì)算機(jī)上運(yùn)行,也是為了今后的在寫程序時(shí)要考慮到:程
32、序既是為了在計(jì)算機(jī)上運(yùn)行,也是為了今后的交流和閱讀,同時(shí)還是為了留下有用的參考文件。交流和閱讀,同時(shí)還是為了留下有用的參考文件。 為此,程序必須是宜于閱讀的,也就是必須是結(jié)構(gòu)良好或風(fēng)格優(yōu)美的。為此,程序必須是宜于閱讀的,也就是必須是結(jié)構(gòu)良好或風(fēng)格優(yōu)美的。 程序設(shè)計(jì)風(fēng)格不好不利于產(chǎn)生正確、高效、易讀、易維護(hù)的程序。風(fēng)格程序設(shè)計(jì)風(fēng)格不好不利于產(chǎn)生正確、高效、易讀、易維護(hù)的程序。風(fēng)格不好的程序會使程序維護(hù)費(fèi)用與時(shí)間增加,甚至導(dǎo)致整個(gè)編程過程失敗。不好的程序會使程序維護(hù)費(fèi)用與時(shí)間增加,甚至導(dǎo)致整個(gè)編程過程失敗。 程序設(shè)計(jì)風(fēng)格是程序員必須的修養(yǎng)。良好的程序設(shè)計(jì)風(fēng)格是程序員在長程序設(shè)計(jì)風(fēng)格是程序員必須的修
33、養(yǎng)。良好的程序設(shè)計(jì)風(fēng)格是程序員在長期的編程實(shí)踐中逐步發(fā)展,積累和提煉出來的。它是產(chǎn)生正確、高效、易讀、期的編程實(shí)踐中逐步發(fā)展,積累和提煉出來的。它是產(chǎn)生正確、高效、易讀、易維護(hù)程序的一種重要的手段。易維護(hù)程序的一種重要的手段。 程序風(fēng)格主要涉及程序的行文格式、注釋和空白的合適用法、盡量使用合適的程序風(fēng)格主要涉及程序的行文格式、注釋和空白的合適用法、盡量使用合適的助記名來命名標(biāo)識符、明白地表示出程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)等。助記名來命名標(biāo)識符、明白地表示出程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)等。 11.3.1 11.3.1 行文格式行文格式n程序的行文格式不好直接影響程序的可讀程序的行文格式不好直接影響程序的可讀性、清晰
34、性和外觀。性、清晰性和外觀。/* A */ #include int i;main ()i=25+38;printf(“25+38=%d”,i);/* B */ #include int i;main () i = 25+38; printf ( “25+38=%d” , i );/* C */ #include int i; /* 聲明整型變量聲明整型變量i */ int main (void) /* 主函數(shù)主函數(shù) */ i = 25+38; /* 求和運(yùn)算求和運(yùn)算 */ printf ( “25+38=%d” , i ); /* 打印打印 */ if ( b ) S1else S2 swi
35、tch ( expr ) case a1: S1 case a2: S2 . case an: sn /* switch */ 圖圖1 函數(shù)定義函數(shù)定義 圖圖2 IF語句語句 圖圖3 SWITCH語句語句 int main ( ) DS DS . /* main */ do S while (b)for(expr1;expr2;expe3) S /* for */ while ( b ) S /* while */ 圖圖4 WHILE語句語句 圖圖5 FOR語句語句 圖圖6 DO語句語句11.3.2 標(biāo)識符標(biāo)識符 標(biāo)識符是程序員給自己引進(jìn)的常量、類型、變量、函數(shù)等標(biāo)識符是程序員給自己引進(jìn)的常量
36、、類型、變量、函數(shù)等起的名字。程序設(shè)計(jì)語言對如何命名標(biāo)識符沒有限制,標(biāo)識符起的名字。程序設(shè)計(jì)語言對如何命名標(biāo)識符沒有限制,標(biāo)識符也沒有固定的含義。但是從使用角度看,標(biāo)識符表記的每個(gè)對也沒有固定的含義。但是從使用角度看,標(biāo)識符表記的每個(gè)對象都有具體的含義。為了提高可讀性和有助于記憶,應(yīng)該使標(biāo)象都有具體的含義。為了提高可讀性和有助于記憶,應(yīng)該使標(biāo)識符在拼寫上盡量和它所標(biāo)記對象的物理、數(shù)學(xué)等含義相一致,識符在拼寫上盡量和它所標(biāo)記對象的物理、數(shù)學(xué)等含義相一致,并且要避免與系統(tǒng)預(yù)定義的標(biāo)準(zhǔn)標(biāo)識符重名。例如,表示圓周并且要避免與系統(tǒng)預(yù)定義的標(biāo)準(zhǔn)標(biāo)識符重名。例如,表示圓周率率用用pai就比用一個(gè)一般的就比用一個(gè)一般的a要好;表示面積用要好;表示面積用area就比用就比用s要要好;表示長度用好;表示長度用length就比用就比用l要好;要好; . 。11.3.3 注釋注釋 注釋是間
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年石家莊貨運(yùn)從業(yè)資格考試模擬考試題目及答案
- 茉莉花茶代理合同7篇
- 古箏采購合同范本
- 廠區(qū)道路修路合同范本
- 企業(yè)經(jīng)營貸款服務(wù)合同范本
- 上半年工作總結(jié)開頭
- 儒學(xué)大師邀請合同范本
- 動(dòng)物防疫練習(xí)題庫與答案
- 病理學(xué)與病理生理學(xué)習(xí)題庫與參考答案
- 一年級法制教育教案
- 小學(xué)數(shù)學(xué)西南師大三年級上冊三辨認(rèn)方向指南針PPT
- 工作室成員成長檔案模板(內(nèi)部版)課件
- 項(xiàng)目滯后趕工措施
- 預(yù)防接種人員崗位培訓(xùn)習(xí)題(Ⅰ類培訓(xùn)練習(xí)題庫共385題)
- 現(xiàn)場經(jīng)濟(jì)簽證單范本
- 固定義齒工藝流程圖
- 《網(wǎng)店運(yùn)營與管理》課件(完整版)
- (高職)員工培訓(xùn)與開發(fā)(第四版)完整版教學(xué)課件全套電子教案
- 相親相愛 簡譜
- 第四章工具鋼
- 2022年春新冀人版科學(xué)五年級下冊全冊課件
評論
0/150
提交評論