第三章C程序和流程設(shè)計(jì)p56.ppt_第1頁(yè)
第三章C程序和流程設(shè)計(jì)p56.ppt_第2頁(yè)
第三章C程序和流程設(shè)計(jì)p56.ppt_第3頁(yè)
第三章C程序和流程設(shè)計(jì)p56.ppt_第4頁(yè)
第三章C程序和流程設(shè)計(jì)p56.ppt_第5頁(yè)
已閱讀5頁(yè),還剩117頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 C程序和流程設(shè)計(jì) p56,3.1 算法,算法:是指對(duì)各種數(shù)據(jù)進(jìn)行操作的方法。 算法數(shù)據(jù)程序,.1.1算法的性質(zhì)和組成要素 ()性質(zhì): 、解題方法是一個(gè)有窮的動(dòng)作序列 、此動(dòng)作序列只有一個(gè)初始動(dòng)作 、序列中的每一動(dòng)作只有一個(gè)后繼動(dòng)作 、序列終止表示問(wèn)題得到解答或沒(méi)有得到解答。 (二)組成要素 、有確定的操作運(yùn)算符集 、具有控制結(jié)構(gòu) 中的控制結(jié)構(gòu)有: 順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。,返回,算法,算法 算法特性 有窮性 算法是有限的操作序列 確定性 每個(gè)操作有確定的含義;無(wú)二義性 可執(zhí)行性 每個(gè)操作都是可以執(zhí)行的 有序性 執(zhí)行步驟嚴(yán)格按邏輯順序進(jìn)行,算法描述,算法通常采用程序流程圖和N-S圖

2、的形式來(lái)描述。 常用的流程圖符號(hào)有: 開(kāi)始、結(jié)束框,加工、處理框,判別框,輸入|輸出框,流程線,連接點(diǎn),程序、程序設(shè)計(jì),程序 是指計(jì)算機(jī)實(shí)現(xiàn)特定操作的指令的集合。 通俗地講: 程序 = 數(shù)據(jù)結(jié)構(gòu)(屬性、聯(lián)系)+算法 程序設(shè)計(jì) 是人關(guān)于現(xiàn)實(shí)問(wèn)題求解的思維活動(dòng)的“代碼化”過(guò)程,是用計(jì)算機(jī)語(yǔ)言作為工具進(jìn)行的創(chuàng)造性勞動(dòng)。,模塊化程序結(jié)構(gòu),模塊化 就是把程序劃分為若干個(gè)部分,每個(gè)部分獨(dú)立存放、完成一個(gè)特定的功能。其目的是降低程序的復(fù)雜度,使設(shè)計(jì)出來(lái)的程序便于閱讀、調(diào)試和維護(hù)。,結(jié)構(gòu)化程序設(shè)計(jì)(SP),自頂向下、逐步求精 程序結(jié)構(gòu)按功能劃分為模塊化 模塊功能單一、簡(jiǎn)單 模塊由三種基本程序結(jié)構(gòu)組成 程序由函

3、數(shù)、子程序來(lái)實(shí)現(xiàn),SP方法的基本思想是:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分 階段 進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫?和處理的范圍內(nèi)。,for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);,(一)流程圖算法結(jié)構(gòu)化(習(xí)題集p23),(二)ns圖描述算法 (習(xí)題集p25),yN,返回,例 判斷m是否素?cái)?shù),從鍵盤輸入20個(gè)整數(shù),求出不大于90所有數(shù)的和,#include stdio.h main()int i ,s=0,x;for (i=0;i20;i+)scanf(%d,從鍵盤輸入10個(gè)實(shí)數(shù),按從大到小的順序排列起來(lái) #includ

4、e stdio.h void main()int i, j ,k;float b10,temp;for (i=0;iM;i+)scanf(%d,(三)用PA圖描述算法(自學(xué)) (四)偽代碼和逐步細(xì)化的程序設(shè)計(jì)方法 例3.1三數(shù)中取大數(shù) 偽代碼如下: s1:輸入三個(gè)數(shù): s2:找出三數(shù)的最大數(shù)max s3: 打印出max 上面的每一步進(jìn)一步細(xì)化得: s1:調(diào)用scanf函數(shù) s2:調(diào)用自定義函數(shù)max3(a,b,c) s3: 調(diào)用printf函數(shù)。 上面的第二步的自定義函數(shù)還沒(méi)有定義,應(yīng)定義: s2.1從x和y中取最大數(shù)送入m s2.2從m和z 中取最大數(shù)又送入m,返回,s2.3返回n給調(diào)用者。

5、 將上面的關(guān)于自定義函數(shù)譯成的源代碼: float max3(float x,float y,float z) float m; if(xy) m=x; else m=y; if(mz) m=m; else m=z; return m; 相應(yīng)的主函數(shù)如下:,返回,main() float max3( );自定義函數(shù)的申明 float a,b,c,max; printf(input 3 menber a b c:);提示用戶 scanf(%f%f%f, 總的程序如 (301.c)所示。,返回,例3.2 “百雞問(wèn)題”:雞翁、雞母、雞雛價(jià)格分別為錢、3錢、三分之一錢,現(xiàn)有百錢、要求買雞百只,問(wèn)有多少

6、種買法。 分析:設(shè)三種雞的只數(shù)分別為:cocks hens chicks, 依初等數(shù)學(xué)的知識(shí)容易得出下面兩式:,返回,cocks+hens+chicks=100 5*cocks+3*hens+hens/3.0=100 .0 再經(jīng)分析:上面的方程是個(gè)不定方程,又發(fā)現(xiàn)這個(gè)方程的解只能是正整數(shù),再進(jìn)一步分析,就可發(fā)現(xiàn)三個(gè)未知數(shù) 的取值范圍為: cocks (0-20) hens (0-33) chichs (0-100) 在初等數(shù)學(xué)中,解不定方程通用的方法是采用“窮舉”的方法,語(yǔ)言中同樣也是采用這種方法。即: s1: cocks=0; s2:while(cocks=20) s2 .1:找出適合條件的

7、hens和chicks s3: cocks 加 1,再使程序轉(zhuǎn)到執(zhí)行s2,直至cocks=20 來(lái)結(jié)束程序。 再對(duì)s2.1進(jìn)行細(xì)化: s2.1.1 hens=0; s2.1.2 while(hens=33) s2.1.2.1 找出適合條件的chicks,s2.1.2.1使hens加 1,再使程序回到 s2.1.2 再對(duì)s2.1.2.1進(jìn)行細(xì)化 ckicks=100-cocks-hens; if(5*cocks+3*hens+hens/3.0= =100) printf(%d%d%d,cocks,hens,chicks); 將上面的偽代碼用C語(yǔ)言的的源代碼表示如(302.c)所示:,返回,mai

8、n() int cocks,hens,chicks; cocks=0; while(cocks=20) hens=0; while(hens=33) chicks=100-cocks-hens; if(5.0*cocks+3.0*hens+chicks/3.0=100) printf(%d %d %dn,cocks,hens,chicks); hens=hens+1; cocks=cocks+1; ,3.2 用C語(yǔ)言描述算法 P64,3.2.1 表達(dá)式語(yǔ)句 在表達(dá)式后加上 ;就成了句子,句子的種類有: 1、賦值語(yǔ)句 如:i=9; 2、函數(shù)調(diào)用語(yǔ)句 如:x=sin(y); printf(Chin

9、a,ny natherland !); 3、空語(yǔ)句: 如: ; 只有一個(gè)分號(hào),沒(méi)有任何內(nèi)容。 4、語(yǔ)句塊: 如: t=x, x=y, y=t; 也可寫成 t=x; x=y; y=t; 如: a=(a=6, a*3, a+3); a的最終結(jié)果為9 如:若a=5; printf(%d,%d,%d, a, a+,a); 打印結(jié)果為: 6,5,5,返回,C語(yǔ)句概述 C語(yǔ)句:以“;”作分隔符,編譯后產(chǎn)生機(jī)器指令. C語(yǔ)句分類 表達(dá)式語(yǔ)句:表達(dá)式加分號(hào)構(gòu)成。,空語(yǔ)句: ;,程序控制語(yǔ)句(9種):,如 total=total+limit; a=3; func( ); printf(“Hello,world!

10、n”);,復(fù)合語(yǔ)句:用 括起來(lái)的一組語(yǔ)句 一般形式: 數(shù)據(jù)說(shuō)明部分; 執(zhí)行語(yǔ)句部分; 說(shuō)明: “”后不加分號(hào) 語(yǔ)法上和單一語(yǔ)句相同 復(fù)合語(yǔ)句可嵌套,程序的三種基本結(jié)構(gòu) 結(jié)構(gòu)化程序設(shè)計(jì) 基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無(wú)條件轉(zhuǎn)移語(yǔ)句(goto) 結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序叫 優(yōu)點(diǎn):結(jié)構(gòu)清晰,易讀,提高程序設(shè)計(jì)質(zhì)量和效率 三種基本結(jié)構(gòu) 順序結(jié)構(gòu),二分支選擇結(jié)構(gòu),多分支選擇結(jié)構(gòu),3.2.2 流程控制結(jié)構(gòu)語(yǔ)句 一、選擇型結(jié)構(gòu),if(條件) s1( 語(yǔ)句或) else s2(if分結(jié)構(gòu)),是二選一,注意:ss中有可能有一個(gè)或兩個(gè)還可以是if else結(jié)構(gòu)。 if(條

11、件) if(條件) s1 else s2 else if( 條件) s3 else s4,y,n,s1,s4,是多選一,返回,注意:總是認(rèn)為 else是和它前方的離它最近的而且還沒(méi)有和其它的任何else形成配對(duì)關(guān)系的那個(gè)if 配對(duì)。,事實(shí)上還有一種switch結(jié)構(gòu)語(yǔ)句也具備多路選擇的功能。,switch(表達(dá)式) case 常量1 :s1; break; case 常量2 :s2; break; case 常量3 :s3; break; . . case 常量n :sn; break; default : sn+1; ,說(shuō)明: 1、break語(yǔ)句是可有可無(wú)的。 2、break語(yǔ)句的作用為:使程

12、序流程跳出自已所在的那個(gè)程序塊。 3、當(dāng)有break語(yǔ)句時(shí),若表達(dá)式的值與常量3的值相等時(shí),程序執(zhí)行s3, 后執(zhí)行break結(jié)束這個(gè)結(jié)構(gòu)的執(zhí)行,若表達(dá)式的值不與任何一個(gè)常量相等,則執(zhí)行sn+1,之后結(jié)束程序的執(zhí)行。 4、當(dāng)無(wú)break時(shí),若表達(dá)式的值仍與常量3的值相等,則程序s3, s4,s5sn,sn+1語(yǔ)句。,返回,當(dāng)型循環(huán)結(jié)構(gòu),直到型循環(huán)結(jié)構(gòu),二、循環(huán)控制結(jié)構(gòu),真,這種結(jié)構(gòu)應(yīng)由三部分構(gòu)成 進(jìn)入條件,退出條件、循環(huán)體。 C提供了三種循環(huán)結(jié)構(gòu) while結(jié)構(gòu)(稱作 “當(dāng)型循環(huán)”) 1、 如:int i,s; i=1; s=0; while(i4) s+=i*i ; i+ ; 則s的值為14

13、2、dowhile 結(jié)構(gòu) (稱作“直到型循環(huán)”) 如: int i,s; i=1; s=0; do s+=i*i; i+; while(i4); 則s的值為14 for結(jié)構(gòu)(稱作“for循環(huán)“) int i,s; for(i=1, s=0; i4; i+) s+=i*i; 則 s的值仍為14,返回,初值,3.2.3 限定轉(zhuǎn)向語(yǔ)句,1、break語(yǔ)句:作用是在一定的條件下使程序流程退出它所在的那個(gè)程序塊 2、continue語(yǔ)句,只用在循環(huán)體中,作用于使當(dāng)次循環(huán)提前結(jié)束,而不執(zhí)行循環(huán)體中在其后面的語(yǔ)句。 continue語(yǔ)句和break語(yǔ)句是: continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)

14、循環(huán)的的執(zhí)行。而break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程。 下面的程序有什么功能?,int i=1,s=1; while( 1 ) s=s*i; if(s= 721) break; +i; printf(%d, i);,main() int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(%d”,n); ,返回,.2.4 goto語(yǔ)句 p66,作用:使程序轉(zhuǎn)向本函數(shù)內(nèi)的某一行 試說(shuō)明下面的程序有什么功能,main() int i=50, s=0; start : +i; s+=i; if (i=100) goto start ; printf(%d

15、n, s); ,start只是一個(gè)行的標(biāo)號(hào),返回,這個(gè) ; 不能少!,goto 不能寫成 go to,這個(gè) : 不能少!,3.2.5 C基本語(yǔ)句一覽(自學(xué))p67 3.2.6 復(fù)合語(yǔ)句,復(fù)合語(yǔ)句是用來(lái)表示的,內(nèi)可有任意多條語(yǔ)句。 如:t=a; a=b; b=t; 上面的語(yǔ)句b=t 后的分號(hào)不能少,而后不能有分號(hào)。,if(x=0) x=x+1; y=x*x; else y=x; 上面的結(jié)構(gòu)是錯(cuò)的,if(x=0) x=x+1; y=x*x; else y=x; 這是對(duì)的,因?yàn)閕f else 中每個(gè)只能是一個(gè)句子或復(fù)合語(yǔ)句。,返回,3.2.7 停止語(yǔ)句exit p69,exit()是個(gè)庫(kù)函數(shù),在st

16、dlib.h中定義 故用到這個(gè)函數(shù)時(shí)在程序中應(yīng)有下面這行。 #includestdlib.h 它的作用為:使程序終止,退出到DOS的命令提示符下。 若程序是正常終止,那么其參數(shù)應(yīng)是;即exit(0); 若程序不是正常終止;那么其參數(shù)應(yīng)為錯(cuò)誤類型的編號(hào)。,返回,if語(yǔ)句(條件選擇語(yǔ)句) if語(yǔ)句的三種形式 形式一: 格式:if (expression) statement 執(zhí)行過(guò)程:,例:if (xy) printf(“%d”,x);,3.3 選擇型程序設(shè)計(jì),形式二:格式:if (expression) statement1 else statement2執(zhí)行過(guò)程:,例:if (xy) max=

17、x; else max=y;,形式三: 格式:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn ,執(zhí)行過(guò)程:,例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0;,#define RATE1 1.0f #define RATE2 0.

18、8f #define RATE3 0.7f main() /*商品的購(gòu)買量*/ int num; /*商品的單價(jià)和應(yīng)付金額*/ float price,money; printf(請(qǐng)輸入商品的購(gòu)買量:); scanf(%d, ,如:if(a=b,說(shuō)明: if后面的表達(dá)式類型任意,語(yǔ)句可以是復(fù)合語(yǔ)句 if(x) if(x!=0) if(!x) if(x=0),例308 考慮下面程序的輸出結(jié)果: #include main() int x,y; scanf(“%d,%d”, ,/*ch4_1.c*/ #include main() int x,y; printf(Enter an integer:); scanf(%d, ,例 求一個(gè)數(shù)的絕對(duì)值,運(yùn)行:Enter an integ

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論