




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章 C程序和流程設(shè)計 p56,3.1 算法,算法:是指對各種數(shù)據(jù)進行操作的方法。 算法數(shù)據(jù)程序,.1.1算法的性質(zhì)和組成要素 ()性質(zhì): 、解題方法是一個有窮的動作序列 、此動作序列只有一個初始動作 、序列中的每一動作只有一個后繼動作 、序列終止表示問題得到解答或沒有得到解答。 (二)組成要素 、有確定的操作運算符集 、具有控制結(jié)構(gòu) 中的控制結(jié)構(gòu)有: 順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。,返回,算法,算法 算法特性 有窮性 算法是有限的操作序列 確定性 每個操作有確定的含義;無二義性 可執(zhí)行性 每個操作都是可以執(zhí)行的 有序性 執(zhí)行步驟嚴(yán)格按邏輯順序進行,算法描述,算法通常采用程序流程圖和N-S圖
2、的形式來描述。 常用的流程圖符號有: 開始、結(jié)束框,加工、處理框,判別框,輸入|輸出框,流程線,連接點,程序、程序設(shè)計,程序 是指計算機實現(xiàn)特定操作的指令的集合。 通俗地講: 程序 = 數(shù)據(jù)結(jié)構(gòu)(屬性、聯(lián)系)+算法 程序設(shè)計 是人關(guān)于現(xiàn)實問題求解的思維活動的“代碼化”過程,是用計算機語言作為工具進行的創(chuàng)造性勞動。,模塊化程序結(jié)構(gòu),模塊化 就是把程序劃分為若干個部分,每個部分獨立存放、完成一個特定的功能。其目的是降低程序的復(fù)雜度,使設(shè)計出來的程序便于閱讀、調(diào)試和維護。,結(jié)構(gòu)化程序設(shè)計(SP),自頂向下、逐步求精 程序結(jié)構(gòu)按功能劃分為模塊化 模塊功能單一、簡單 模塊由三種基本程序結(jié)構(gòu)組成 程序由函
3、數(shù)、子程序來實現(xiàn),SP方法的基本思想是:把一個復(fù)雜問題的求解過程分 階段 進行,每個階段處理的問題都控制在人們?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是否素數(shù),從鍵盤輸入20個整數(shù),求出不大于90所有數(shù)的和,#include stdio.h main()int i ,s=0,x;for (i=0;i20;i+)scanf(%d,從鍵盤輸入10個實數(shù),按從大到小的順序排列起來 #includ
4、e stdio.h void main()int i, j ,k;float b10,temp;for (i=0;iM;i+)scanf(%d,(三)用PA圖描述算法(自學(xué)) (四)偽代碼和逐步細化的程序設(shè)計方法 例3.1三數(shù)中取大數(shù) 偽代碼如下: s1:輸入三個數(shù): s2:找出三數(shù)的最大數(shù)max s3: 打印出max 上面的每一步進一步細化得: s1:調(diào)用scanf函數(shù) s2:調(diào)用自定義函數(shù)max3(a,b,c) s3: 調(diào)用printf函數(shù)。 上面的第二步的自定義函數(shù)還沒有定義,應(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 “百雞問題”:雞翁、雞母、雞雛價格分別為錢、3錢、三分之一錢,現(xiàn)有百錢、要求買雞百只,問有多少
6、種買法。 分析:設(shè)三種雞的只數(shù)分別為:cocks hens chicks, 依初等數(shù)學(xué)的知識容易得出下面兩式:,返回,cocks+hens+chicks=100 5*cocks+3*hens+hens/3.0=100 .0 再經(jīng)分析:上面的方程是個不定方程,又發(fā)現(xiàn)這個方程的解只能是正整數(shù),再進一步分析,就可發(fā)現(xiàn)三個未知數(shù) 的取值范圍為: cocks (0-20) hens (0-33) chichs (0-100) 在初等數(shù)學(xué)中,解不定方程通用的方法是采用“窮舉”的方法,語言中同樣也是采用這種方法。即: s1: cocks=0; s2:while(cocks=20) s2 .1:找出適合條件的
7、hens和chicks s3: cocks 加 1,再使程序轉(zhuǎn)到執(zhí)行s2,直至cocks=20 來結(jié)束程序。 再對s2.1進行細化: 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 再對s2.1.2.1進行細化 ckicks=100-cocks-hens; if(5*cocks+3*hens+hens/3.0= =100) printf(%d%d%d,cocks,hens,chicks); 將上面的偽代碼用C語言的的源代碼表示如(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語言描述算法 P64,3.2.1 表達式語句 在表達式后加上 ;就成了句子,句子的種類有: 1、賦值語句 如:i=9; 2、函數(shù)調(diào)用語句 如:x=sin(y); printf(Chin
9、a,ny natherland !); 3、空語句: 如: ; 只有一個分號,沒有任何內(nèi)容。 4、語句塊: 如: 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語句概述 C語句:以“;”作分隔符,編譯后產(chǎn)生機器指令. C語句分類 表達式語句:表達式加分號構(gòu)成。,空語句: ;,程序控制語句(9種):,如 total=total+limit; a=3; func( ); printf(“Hello,world!
10、n”);,復(fù)合語句:用 括起來的一組語句 一般形式: 數(shù)據(jù)說明部分; 執(zhí)行語句部分; 說明: “”后不加分號 語法上和單一語句相同 復(fù)合語句可嵌套,程序的三種基本結(jié)構(gòu) 結(jié)構(gòu)化程序設(shè)計 基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無條件轉(zhuǎn)移語句(goto) 結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序叫 優(yōu)點:結(jié)構(gòu)清晰,易讀,提高程序設(shè)計質(zhì)量和效率 三種基本結(jié)構(gòu) 順序結(jié)構(gòu),二分支選擇結(jié)構(gòu),多分支選擇結(jié)構(gòu),3.2.2 流程控制結(jié)構(gòu)語句 一、選擇型結(jié)構(gòu),if(條件) s1( 語句或) else s2(if分結(jié)構(gòu)),是二選一,注意:ss中有可能有一個或兩個還可以是if else結(jié)構(gòu)。 if(條
11、件) if(條件) s1 else s2 else if( 條件) s3 else s4,y,n,s1,s4,是多選一,返回,注意:總是認(rèn)為 else是和它前方的離它最近的而且還沒有和其它的任何else形成配對關(guān)系的那個if 配對。,事實上還有一種switch結(jié)構(gòu)語句也具備多路選擇的功能。,switch(表達式) case 常量1 :s1; break; case 常量2 :s2; break; case 常量3 :s3; break; . . case 常量n :sn; break; default : sn+1; ,說明: 1、break語句是可有可無的。 2、break語句的作用為:使程
12、序流程跳出自已所在的那個程序塊。 3、當(dāng)有break語句時,若表達式的值與常量3的值相等時,程序執(zhí)行s3, 后執(zhí)行break結(jié)束這個結(jié)構(gòu)的執(zhí)行,若表達式的值不與任何一個常量相等,則執(zhí)行sn+1,之后結(jié)束程序的執(zhí)行。 4、當(dāng)無break時,若表達式的值仍與常量3的值相等,則程序s3, s4,s5sn,sn+1語句。,返回,當(dāng)型循環(huán)結(jié)構(gòu),直到型循環(huán)結(jié)構(gòu),二、循環(huán)控制結(jié)構(gòu),真,這種結(jié)構(gòu)應(yīng)由三部分構(gòu)成 進入條件,退出條件、循環(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)向語句,1、break語句:作用是在一定的條件下使程序流程退出它所在的那個程序塊 2、continue語句,只用在循環(huán)體中,作用于使當(dāng)次循環(huán)提前結(jié)束,而不執(zhí)行循環(huán)體中在其后面的語句。 continue語句和break語句是: continue語句只結(jié)束本次循環(huán),而不是終止整個
14、循環(huán)的的執(zhí)行。而break語句則是結(jié)束整個循環(huán)過程。 下面的程序有什么功能?,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語句 p66,作用:使程序轉(zhuǎn)向本函數(shù)內(nèi)的某一行 試說明下面的程序有什么功能,main() int i=50, s=0; start : +i; s+=i; if (i=100) goto start ; printf(%d
15、n, s); ,start只是一個行的標(biāo)號,返回,這個 ; 不能少!,goto 不能寫成 go to,這個 : 不能少!,3.2.5 C基本語句一覽(自學(xué))p67 3.2.6 復(fù)合語句,復(fù)合語句是用來表示的,內(nèi)可有任意多條語句。 如:t=a; a=b; b=t; 上面的語句b=t 后的分號不能少,而后不能有分號。,if(x=0) x=x+1; y=x*x; else y=x; 上面的結(jié)構(gòu)是錯的,if(x=0) x=x+1; y=x*x; else y=x; 這是對的,因為if else 中每個只能是一個句子或復(fù)合語句。,返回,3.2.7 停止語句exit p69,exit()是個庫函數(shù),在st
16、dlib.h中定義 故用到這個函數(shù)時在程序中應(yīng)有下面這行。 #includestdlib.h 它的作用為:使程序終止,退出到DOS的命令提示符下。 若程序是正常終止,那么其參數(shù)應(yīng)是;即exit(0); 若程序不是正常終止;那么其參數(shù)應(yīng)為錯誤類型的編號。,返回,if語句(條件選擇語句) if語句的三種形式 形式一: 格式:if (expression) statement 執(zhí)行過程:,例:if (xy) printf(“%d”,x);,3.3 選擇型程序設(shè)計,形式二:格式:if (expression) statement1 else statement2執(zhí)行過程:,例:if (xy) max=
17、x; else max=y;,形式三: 格式:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn ,執(zhí)行過程:,例: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() /*商品的購買量*/ int num; /*商品的單價和應(yīng)付金額*/ float price,money; printf(請輸入商品的購買量:); scanf(%d, ,如:if(a=b,說明: if后面的表達式類型任意,語句可以是復(fù)合語句 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, ,例 求一個數(shù)的絕對值,運行:Enter an integ
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工湖方案(3篇)
- 2025春季教務(wù)處工作計劃
- 園區(qū)水肥規(guī)劃方案(3篇)
- 面向電力市場環(huán)境的配電系統(tǒng)源網(wǎng)荷儲協(xié)同規(guī)劃
- 安全生產(chǎn)領(lǐng)導(dǎo)小組制度
- 畫廊實體經(jīng)營方案(3篇)
- 飯店餐具抽查方案(3篇)
- 2025年廣西水利電力職業(yè)技術(shù)學(xué)院教師招聘考試筆試備考題庫附答案詳解(典型題)
- 信息安全管理體系是
- 地下停車場安全管理制度
- 2024年湖北省中考地理生物試卷(含答案)
- 《化工裝備技術(shù)》課件-項目五 離心式壓縮機的運行與維護
- 基于PLC的冷卻系統(tǒng)自整定模糊控制研究
- MOOC 分子生物學(xué)-南京大學(xué) 中國大學(xué)慕課答案
- MH-T 5078.4-2024 運輸機場建設(shè)工程資料管理規(guī)程 第4部分:目視助航設(shè)施工程施工資料
- 打擊非法行醫(yī)非法采供血和規(guī)范醫(yī)療機構(gòu)執(zhí)業(yè)行為
- 水處理反滲透設(shè)備日常維護保養(yǎng)點檢記錄表
- 《講師技能培訓(xùn)》課件
- 設(shè)備日常點檢表
- 青島版二年級數(shù)學(xué)下冊(六三制)全冊課件【完整版】
評論
0/150
提交評論