版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 C言語程序設計The C Programming Language )耿小慶第四章 流程控制 4-1 構造化程序設計4-2 C語句概述4-3 選擇語句4-4 循環(huán)語句4-5 輔助控制語句4-6 習題第四章 流程控制構造化程序設計思想算法傳統(tǒng)流程圖表示的三種構造N/S方框圖表示的三種構造小結4-1 構造化程序設計4.1.1 構造化程序設計思想任何程序都可以用三種根本構造表示,即用順序(Composition)、選擇(Alternation)和循環(huán)(Iteration)構造來表示。這三種構造反復組合、嵌套構成的程序稱為構造化程序。順序構造的程序流程是按照語句的順序依次執(zhí)行;選擇構造是根據給定的條
2、件進展判別,由判別構造決議執(zhí)行兩支或多支程序段中的一支;循環(huán)構造是在給定條件成立的情況下,反復執(zhí)行某個程序段。優(yōu)點構造化程序層次清楚、構造明晰、有效地改善了程序的可靠性,從而大大地提高了程序設計的質量和效率。4-1 概述員工工資管理系統(tǒng)稅率計算員工福利員工出勤記錄保險費退休金4-1 構造化程序設計自頂向下,逐漸求精4.1.2 算法 “算法是為處理一個詳細問題而采取確實定的有限的操作步驟。數(shù)據構造算法 程序 NWirth 算法的表示方法:傳統(tǒng)的流程圖N/S方框圖自然言語偽碼問題求解圖PAD明確問題利用某種言語描畫算法設計算法4-1 構造化程序設計 4.1.3 傳統(tǒng)流程圖表示的三種構造開場/終了框
3、普通處置框判別框輸入/輸出框流程線銜接符4-1 構造化程序設計4.1.3 傳統(tǒng)流程圖表示的三種構造順序構造(Composition)AB4-1 構造化程序設計 4.1.3 傳統(tǒng)流程圖表示的三種構造 選擇構造(Alternation)AB條件P成立不成立4-1 構造化程序設計4.1.3 傳統(tǒng)流程圖表示的三種構造循環(huán)構造(Iteration)不成立條件PA成立成立A條件P不成立1當型2直到型4-1 構造化程序設計實例1:計算1+2+3+100的值i =i+1s = s+i開場NY循環(huán)變量i 置1累加器s 置0i=100? 終了輸出s4-1 構造化程序設計 這是一款意大利消費的多功能廚具|請猜價錢!
4、600答案是:720低了!800750700高了!高了!正確! 這是一款瑞士消費的多功能刀具|請猜價錢!600高了!500高了!時間到!1個商標720低了!答案是:4284-1 構造化程序設計實例2:僥幸52“僥幸52的傳統(tǒng)流程圖否是是是否否否是時間到?輸出產品特點新產品?開場計時商標數(shù)清0猜對了?猜高了?輸入猜測價錢輸出“高了!輸出“正確!輸出“低了!累計商標數(shù)終了輸出商標數(shù)輸出“時間到!傳統(tǒng)流程圖的優(yōu)缺陷優(yōu)點:籠統(tǒng)直觀,各種操作一目了然,不會產生“歧義性,便于了解,算法出錯時容易發(fā)現(xiàn),并可直接轉化為程序。缺陷:所占篇幅較大,由于運用流程線,過于靈敏,不受約束,運用者可使流程線恣意轉移,從而
5、呵斥程序閱讀和修正的困難,不利于構造化程序的設計。4-1 構造化程序設計4.1.4 N/S方框圖N/S方框圖是由美國學者INassi和BSchneiderman 于1973年提出的。N/S方框圖的重要特點就是完全取消了流程線,這樣,算法被迫只能順序執(zhí)行,從而防止了流程的恣意轉向,保證了程序的質量。尤其適宜構造化程序的設計。N/S方框圖的另一個優(yōu)點是既籠統(tǒng)直觀,又節(jié)省篇幅。4-1 構造化程序設計4-1 構造化程序設計4.1.4 N/S方框圖順序構造(Composition)AB4-1 構造化程序設計4.1.4 N/S方框圖選擇構造(Alternation)AB條件P成立不成立4-1 構造化程序設
6、計4.1.4 N/S方框圖循環(huán)構造(Iteration)A當P成立A直到P成立1當型2直到型實例1的N/S方框圖累加器s 置0循環(huán)變量i 置1i =i+1s = s+ii=100?輸出s4-1 構造化程序設計 表達式語句 表達式; 賦值語句 i=10; 函數(shù)調用語句 printf(Hello!n); 流程控制語句 選擇 ifelse, elseif, switchcase 循環(huán) for, while, dowhile 輔助控制 break, continue,goto,return 空語句 ; 什么也不干 for(i=1;i5000;i+); 延時 for(i=0;ib) t=a;a=b;b=
7、t; if (ac) t=a;a=c;c=t; if (bc) t=b;b=c;c=t; printf(%5.2f=%5.2f=%5.2fn,a,b,c); 4.3.1 if 語句 格式: if(表達式) 語句; 闡明: 普通言語,if 后是關系或邏輯表達式,而C無要求 if 只是測試表達式的值,當表達式的值為非0時,執(zhí)行語句 if(表達式) if(表達式!=0) if(!表達式) if(表達式=0) “語句為一條語句或復合語句4-3 選擇語句 4.3.2 ifelse 語句 格式: if(表達式) 語句1; else 語句2; 闡明: 表達式仍為普通表達式,當表達式非0時,執(zhí)行語句1,否那么
8、,執(zhí)行語句2 “語句1、“語句2均為一條語句或復合語句4-3 選擇語句 根據需求交換兩個變量的值#include main( ) int a,b,x,ch; printf(Enter two integers:); scanf(%d%d,&a,&b); printf(Swap?(y/n):); ch=getchar(); if(ch=y|ch=Y) x=a; a=b; b=x; printf(a=%d,b=%d,a,b); else printf(No swap!n);加上就行了!if(n0) if(ab) z=a; else z=b;4-3 選擇語句要想在n0) if(ab) z=a; el
9、se z=b;什么時候執(zhí)行z=b;?太簡單了! else總是與其上最近的且未與其他else配對的if 配對,因此n0并且amagic) printf(“Too high!n); else printf(Too low!n); 4-3 選擇語句main() int magic=200,guess; printf(“Please guess a magic number:); scanf(%d,&guess); if(guess=magic) printf(“Right!n); else if(guessmagic) printf(“Wrong!Too big!n); else printf(Wr
10、ong!Too small!n); 猜數(shù)數(shù)游戲:由計算機“想一個數(shù)請人猜,假設猜對了那么給出提示“Right,否那么提示“Wrong,并通知人是大還是小了?4-3 選擇語句輸入學號及成果,并根據成果定等級main() int score,snum; char grade; scanf(%d%d,&snum,&score); if(snum0&snum=0&score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E; printf(
11、number:%d is grade %cn,snum,grade); else printf(The No.is invalid!n); 4-3 選擇語句 4.3.5 開關分支switchcase 格式: switch(表達式) case 值1: 語句組1; break; case 值2: 語句組2; break; . case 值n: 語句組 n; break; default: 語句組n+1; break; 功能:根據表達式的值與各個case判別值的比較情況決議執(zhí)行哪個語句組。4-3 選擇語句4.3.5 開關分支switchcase 留意:表達式的值可為恣意類型,但普通為整型或字符型數(shù)據
12、,判別值的類型與其要一致case判別值必需為常量或常量表達式,且判別值必需互不一樣default缺省時,當一切case判別不符時,那么直接自動退出 switch當break語句不缺省時,case和default的順序可以恣意break語句缺省時,系統(tǒng)將繼續(xù)執(zhí)行下一條case 語句組,可以運用case 重疊 共用一個語句組4-3 選擇語句運輸公司計算運費的原那么是間隔越遠,每公里收費越低 s250無折扣;250=s500 2%折扣;500=s1000 5%; 1000=s2000 8% ;2000=s=3000 15% p-單價 w-分量 d-折扣 f 運費 p*W*S*(1-d)main( )
13、 int s; float p,w,d,f; scanf(%f %f %d,&p,&w,&s); switch(s/250) case 0: d=0;break; case 1: d=0.02;break; case 2: case 3: d=0.05;break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11: d=0.1; break; default: d=0.15; break; f=p*w*s*(1-d); printf(freight=%.2fn,f);4-3 選擇語句
14、統(tǒng)計輸入的一行字符中的英文各元音字母的個數(shù)不區(qū)分大小寫#include main() int na,ne,ni,no,nu; char c; na=ne=ni=no=nu=0; while(c=getchar()!=n) switch(c) case A: case a: na+; break; case E: case e: ne+; break; case I: case i: ni+; break; case O: case o: no+; break; case U: case u: nu+; break; printf(na=%d,ne=%d,ni=%d,no=%d,nu=%dn,
15、na,ne,ni,no,nu);4-3 選擇語句輸入學號及成果,并根據成果定等級main() int score,snum; char grade; scanf(%d%d,&snum,&score); if(snum0&snum=0&score=100) switch(score/10) case 10: case 9: grade=A; break; case 8: grade=B; break; case 7: grade=C; break; case 6: grade=D; break; default: grade=E;break; printf(number:%d is grade
16、%cn,snum,grade); else printf(The No.or Score is invalid!n); 4-4 循環(huán)語句 循環(huán)就是反復執(zhí)行一段程序,被反復執(zhí)行的程序段稱為循環(huán)體。 循環(huán)必需能終了,通常需求循環(huán)變量來控制循環(huán)。4.4.1 while語句 當型 格式: while(表達式) 循環(huán)體語句; 闡明:進入循環(huán)前要作初始化任務循環(huán)體中應有使條件向假方向變化的語句表達式為常數(shù)非O是無限循環(huán),需配合其他語句加以控制循環(huán)體可以是空語句4-4 循環(huán)語句0非0表達式?循環(huán)體4-4 循環(huán)語句計算1+2+3+100的值main() int sum=0,i=1; while(i=100)
17、sum+=i+; /* sum+=i;i+; */ printf(“sum of 1-100 is:%dn,sum);求個位數(shù)為6且能被3整除的5位數(shù)共有多少個?main( ) int i=0; long m=10006; while(m=99996l) if(m%3=0) /*if(m/3)*3=m) */ i+; m+=10; printf(“It is %d n,i);4-4 循環(huán)語句求出200800之間一切既能被7又能被11整除的整數(shù)main( ) int i=0,m=200; while(m=800) if(m%7=0&m%11=0) printf(“%5d,m); i+; if(i
18、%10=0) printf(“n); m+; 4.4.2 do while語句格式:do 循環(huán)體 while表達式;闡明:先執(zhí)行一次循環(huán)體,再判表達式在不知道循環(huán)次數(shù),且又必需執(zhí)行一次循環(huán)體時4-4 循環(huán)語句0非0表達式?循環(huán)體4-4 循環(huán)語句計算1+2+3+100的值main() int sum=0,i=1; do sum+=i; i+; while(i=100); printf(“sum of 1-100 is :%dn,sum);某數(shù)用3除余2,用5余3,用7余2main() int i=0; do i+; while(!(i%3=2 & i%5=3 &i%7=2); /*while(i
19、%3!=2 | i%5!=3|i%7!=2);*/ printf(“%dn,i); 4.4.3 for 語句 格式:for(表達式1;表達式2;表達式3 循環(huán)體; 執(zhí)行順序:1執(zhí)行表達式12判別表達式2,假設表達式2成立,那么執(zhí)行循環(huán)體, 假設表達式2不成立,那么執(zhí)行43再執(zhí)行表達式3,然后回到24 闡明: 表達式均可省略,分號不能省略 for( ; ; ) 表達式1和3可為逗號表達式 for(i=0,j=100;ij;i+,j-); 表達式2多為關系或邏輯表達式for( ;low=high&found=0;)4-4 循環(huán)語句0非0表達式1表達式2?循環(huán)體表達式34-4 循環(huán)語句計算1+2+3
20、+100的值eg.main() int sum=0,i; for(i=1;i=100;i+) sum+=i; printf(“sum of 1-100 is :%dn,sum);4-4 循環(huán)語句4.4.4 循環(huán)的嵌套 多重循環(huán)在C言語中,當一個循環(huán)構造的循環(huán)體內有另一個循環(huán)構造時,稱為多重循環(huán)或循環(huán)嵌套,前面引見的三種循環(huán)構造可以相互嵌套。當一個循環(huán)的循環(huán)體僅是另一個單一的循環(huán)構造時,外層循環(huán)不需求運用大括號包圍它的循環(huán)體。打印乘法口訣表for(i=1;i=9;i+) for(j=1;j=9;j+) printf(“%5d,i*j); printf(“n); 1 2 3 4 5 6 7 8 9
21、 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9
22、 18 27 36 45 54 63 72 81 1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 9 12 15 18 21 24 27 16 20 24 28 32 36 25 30 35 40 45 36 42 48 54 49 56 63 64 72 814-5 輔助控制語句4.5.1 break語句功能:中斷循環(huán)過程,退出循環(huán)體從包含它的switch退出闡明:強行退出僅退出一層循環(huán)或一層switch4.5.2 continue語句 功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一次循環(huán)4-5 輔助控制語句跳過負元素,求為正元素之和main() int n,sum=0;
23、while(1) scanf(“%d,&n); if(n=0) break; if(n0) continue; sum+=n; printf(sum=%dn,sum)4-5 輔助控制語句4.5.3 轉向語句goto 格式:goto 標號; error: . for( ) if( ) goto error; . goto破壞構造化,不用!4.5.4 前往語句 return格式:return 值; return(值);4-6 習題簡單運用 見書(譚)例題枚舉法求最小公倍數(shù)找出100999之間的一切水仙花數(shù),各位立方和=本身153等百錢買百雞、百馬運百貨 求素數(shù) 編程序找出1000之內的一切完數(shù),一
24、個數(shù)恰好等于其因子之和如 6=1+2+34-6 習題遞推法公式類1!+2!+3!+20!1+1/1!+1/2!+ +1/10!/4=1-1/3+1/5-1/7+1/9+ 10-6 求a+aa+aaa+aaaa a=2,n=7 2+22+222+2222+22222+222222+2222222其它猴子吃桃珠穆朗瑪峰皮球落地最小公倍、最大公約main() int a,b,bei; printf(Please enter two integers:); scanf(%d%d,&a,&b); if(ab) bei=a; chu=b; else bei=b; chu=a; while(yu=bei%c
25、hu)!=0) bei=chu; chu=yu; printf(“n最大公約數(shù)為:%dn,chu);水仙花數(shù)main() int i,j,k,m,n; for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) m=i*100+j*10+k; n=i*i*i+j*j*j+k*k*k; if(m=n) printf(%5d,m); main() int m,i,j,k; for(m=100;m=999;m+) i=m/100; j=(m-i*100)/10; /*j=m%100/10;*/ k=m%10; if(i*i*i+j*j*j+k*k*k=m) pri
26、ntf(%5d,m); 百錢買百雞、百馬拉百貨main() int i,j,k; for(i=1;i20;i+) for(j=1;j=33;j+) k=100-i-j; if(5*i+3*j+k/3=100&k%3=0) printf(cock:%d,hen:%d,chick:%dn,i,j,k); main() int i,j,k; for(i=1;i34;i+) for(j=1;j50;j+) for(k=2;k100;k+=2) if(i*3+j*2+k/2=100&i+j+k=100) printf(big = %3dtmiddle = %3dtsmall =%3dn,i,j,k);
27、素數(shù)判別一個數(shù)能否為素數(shù)#include main() long m; int i,sqrtm; printf(Please enter a numbers:); scanf(%ld,&m); sqrtm=sqrt(m); for(i=2;isqrtm) printf(%ld is a prime.n,m); else printf(%ld is not a prime.n,m); 素數(shù)求一個區(qū)間中一切的素數(shù)#include void main(void) long a,b,m; int i,sqrtm,count=0; printf(Please enter two numbers:); s
28、canf(%ld%ld,&a,&b); printf(Primes from %d to %d is:n,a,b); for(m=(a%2=0)?a+1:a;m=b;m+=2) sqrtm=sqrt(m); for(i=2;isqrtm) if(count+%10=0) printf(n); printf(%8ld,m); 完數(shù)main() int i,j,s,n=0; printf(“1000之內的完數(shù): ); for(i=1;i=1000;i+) s=0; for(j=1;ji;j+) if(i%j=0) s+=j; if(s=i) printf(%5d,i); n+; if(n%10=0
29、) printf(n); /4=1-1/3+1/5-1/7+1/9+ 求#include main() int s=1; long n=1; double pi=0,t=1; /* double pi=0,s=1,t=1,n=1; */ while(fabs(t)=1e-6) pi+=t; n+=2; s=-s; t=(double)s/n; /* t=s/n; */ pi*=4; printf(“PI=%fn,pi);1!+2!+3!+20!main() int i; float s=0,t=1; for(i=1;i=20;i+) t*=i; s+=t; printf(“Result:%fn,s);1+1/2!+1/3!+1/10!main() int i; long t=1; float s=0; for(i=1;i=10;i+) t*=i; s+=1.0/t; printf(“Result:%fn,s);a+aa+aaa+aaaa main() int i,a,n; double t=0,s=0; printf(“%d%d,&a,&n); for(i=1;i=1;i-) n=(n+1)*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園平安建設宣傳月工作總結
- 六年級道德與法治地球我們的家園學情分析方案
- 宣傳制作類項目服務方案
- 第六章 回歸分析課件
- 黨支部品牌創(chuàng)建方案
- 智庫建設工作實施方案
- Metribuzin-Standard-生命科學試劑-MCE
- Methyl-Eugenol-Standard-生命科學試劑-MCE
- 教師的趣味游戲活動方案
- MEB55-生命科學試劑-MCE
- 《病人安全護理學》-教學大綱
- 項目分成比例合同模板
- 企業(yè)在線培訓資源合同
- GB 27887-2024機動車兒童乘員用約束系統(tǒng)
- IATF16949-2024質量管理體系各過程風險識別評價分析及控制方案
- 自然科學基金項目申請書
- 第四屆全國新能源汽車關鍵技術技能大賽(新能源汽車輕量化技術方向)決賽參考試題庫(含答案)
- 教師資格考試小學數(shù)學面試試題與參考答案
- 2024年新人教版一年級數(shù)學上冊課件 第二單元 6~10的認識和加、減法 1. 6~9的認識 課時2 比大小、第幾練習課
- 服務行業(yè)感受心得體會(8篇)
- 滬科版九年級物理 15.1 電阻和變阻器(學習、上課課件)
評論
0/150
提交評論