




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 C言語程序設(shè)計(jì)The C Programming Language )耿小慶第四章 流程控制 4-1 構(gòu)造化程序設(shè)計(jì)4-2 C語句概述4-3 選擇語句4-4 循環(huán)語句4-5 輔助控制語句4-6 習(xí)題第四章 流程控制構(gòu)造化程序設(shè)計(jì)思想算法傳統(tǒng)流程圖表示的三種構(gòu)造N/S方框圖表示的三種構(gòu)造小結(jié)4-1 構(gòu)造化程序設(shè)計(jì)4.1.1 構(gòu)造化程序設(shè)計(jì)思想任何程序都可以用三種根本構(gòu)造表示,即用順序(Composition)、選擇(Alternation)和循環(huán)(Iteration)構(gòu)造來表示。這三種構(gòu)造反復(fù)組合、嵌套構(gòu)成的程序稱為構(gòu)造化程序。順序構(gòu)造的程序流程是按照語句的順序依次執(zhí)行;選擇構(gòu)造是根據(jù)給定的條
2、件進(jìn)展判別,由判別構(gòu)造決議執(zhí)行兩支或多支程序段中的一支;循環(huán)構(gòu)造是在給定條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。優(yōu)點(diǎn)構(gòu)造化程序?qū)哟吻宄?、?gòu)造明晰、有效地改善了程序的可靠性,從而大大地提高了程序設(shè)計(jì)的質(zhì)量和效率。4-1 概述員工工資管理系統(tǒng)稅率計(jì)算員工福利員工出勤記錄保險(xiǎn)費(fèi)退休金4-1 構(gòu)造化程序設(shè)計(jì)自頂向下,逐漸求精4.1.2 算法 “算法是為處理一個(gè)詳細(xì)問題而采取確實(shí)定的有限的操作步驟。數(shù)據(jù)構(gòu)造算法 程序 NWirth 算法的表示方法:傳統(tǒng)的流程圖N/S方框圖自然言語偽碼問題求解圖PAD明確問題利用某種言語描畫算法設(shè)計(jì)算法4-1 構(gòu)造化程序設(shè)計(jì) 4.1.3 傳統(tǒng)流程圖表示的三種構(gòu)造開場(chǎng)/終了框
3、普通處置框判別框輸入/輸出框流程線銜接符4-1 構(gòu)造化程序設(shè)計(jì)4.1.3 傳統(tǒng)流程圖表示的三種構(gòu)造順序構(gòu)造(Composition)AB4-1 構(gòu)造化程序設(shè)計(jì) 4.1.3 傳統(tǒng)流程圖表示的三種構(gòu)造 選擇構(gòu)造(Alternation)AB條件P成立不成立4-1 構(gòu)造化程序設(shè)計(jì)4.1.3 傳統(tǒng)流程圖表示的三種構(gòu)造循環(huán)構(gòu)造(Iteration)不成立條件PA成立成立A條件P不成立1當(dāng)型2直到型4-1 構(gòu)造化程序設(shè)計(jì)實(shí)例1:計(jì)算1+2+3+100的值i =i+1s = s+i開場(chǎng)NY循環(huán)變量i 置1累加器s 置0i=100? 終了輸出s4-1 構(gòu)造化程序設(shè)計(jì) 這是一款意大利消費(fèi)的多功能廚具|請(qǐng)猜價(jià)錢!
4、600答案是:720低了!800750700高了!高了!正確! 這是一款瑞士消費(fèi)的多功能刀具|請(qǐng)猜價(jià)錢!600高了!500高了!時(shí)間到!1個(gè)商標(biāo)720低了!答案是:4284-1 構(gòu)造化程序設(shè)計(jì)實(shí)例2:僥幸52“僥幸52的傳統(tǒng)流程圖否是是是否否否是時(shí)間到?輸出產(chǎn)品特點(diǎn)新產(chǎn)品?開場(chǎng)計(jì)時(shí)商標(biāo)數(shù)清0猜對(duì)了?猜高了?輸入猜測(cè)價(jià)錢輸出“高了!輸出“正確!輸出“低了!累計(jì)商標(biāo)數(shù)終了輸出商標(biāo)數(shù)輸出“時(shí)間到!傳統(tǒng)流程圖的優(yōu)缺陷優(yōu)點(diǎn):籠統(tǒng)直觀,各種操作一目了然,不會(huì)產(chǎn)生“歧義性,便于了解,算法出錯(cuò)時(shí)容易發(fā)現(xiàn),并可直接轉(zhuǎn)化為程序。缺陷:所占篇幅較大,由于運(yùn)用流程線,過于靈敏,不受約束,運(yùn)用者可使流程線恣意轉(zhuǎn)移,從而
5、呵斥程序閱讀和修正的困難,不利于構(gòu)造化程序的設(shè)計(jì)。4-1 構(gòu)造化程序設(shè)計(jì)4.1.4 N/S方框圖N/S方框圖是由美國學(xué)者INassi和BSchneiderman 于1973年提出的。N/S方框圖的重要特點(diǎn)就是完全取消了流程線,這樣,算法被迫只能順序執(zhí)行,從而防止了流程的恣意轉(zhuǎn)向,保證了程序的質(zhì)量。尤其適宜構(gòu)造化程序的設(shè)計(jì)。N/S方框圖的另一個(gè)優(yōu)點(diǎn)是既籠統(tǒng)直觀,又節(jié)省篇幅。4-1 構(gòu)造化程序設(shè)計(jì)4-1 構(gòu)造化程序設(shè)計(jì)4.1.4 N/S方框圖順序構(gòu)造(Composition)AB4-1 構(gòu)造化程序設(shè)計(jì)4.1.4 N/S方框圖選擇構(gòu)造(Alternation)AB條件P成立不成立4-1 構(gòu)造化程序設(shè)
6、計(jì)4.1.4 N/S方框圖循環(huán)構(gòu)造(Iteration)A當(dāng)P成立A直到P成立1當(dāng)型2直到型實(shí)例1的N/S方框圖累加器s 置0循環(huán)變量i 置1i =i+1s = s+ii=100?輸出s4-1 構(gòu)造化程序設(shè)計(jì) 表達(dá)式語句 表達(dá)式; 賦值語句 i=10; 函數(shù)調(diào)用語句 printf(Hello!n); 流程控制語句 選擇 ifelse, elseif, switchcase 循環(huán) for, while, dowhile 輔助控制 break, continue,goto,return 空語句 ; 什么也不干 for(i=1;i5000;i+); 延時(shí) 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(表達(dá)式) 語句; 闡明: 普通言語,if 后是關(guān)系或邏輯表達(dá)式,而C無要求 if 只是測(cè)試表達(dá)式的值,當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行語句 if(表達(dá)式) if(表達(dá)式!=0) if(!表達(dá)式) if(表達(dá)式=0) “語句為一條語句或復(fù)合語句4-3 選擇語句 4.3.2 ifelse 語句 格式: if(表達(dá)式) 語句1; else 語句2; 闡明: 表達(dá)式仍為普通表達(dá)式,當(dāng)表達(dá)式非0時(shí),執(zhí)行語句1,否那么
8、,執(zhí)行語句2 “語句1、“語句2均為一條語句或復(fù)合語句4-3 選擇語句 根據(jù)需求交換兩個(gè)變量的值#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;什么時(shí)候執(zhí)行z=b;?太簡單了! else總是與其上最近的且未與其他else配對(duì)的if 配對(duì),因此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ù)游戲:由計(jì)算機(jī)“想一個(gè)數(shù)請(qǐng)人猜,假設(shè)猜對(duì)了那么給出提示“Right,否那么提示“Wrong,并通知人是大還是小了?4-3 選擇語句輸入學(xué)號(hào)及成果,并根據(jù)成果定等級(jí)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 開關(guān)分支switchcase 格式: switch(表達(dá)式) case 值1: 語句組1; break; case 值2: 語句組2; break; . case 值n: 語句組 n; break; default: 語句組n+1; break; 功能:根據(jù)表達(dá)式的值與各個(gè)case判別值的比較情況決議執(zhí)行哪個(gè)語句組。4-3 選擇語句4.3.5 開關(guān)分支switchcase 留意:表達(dá)式的值可為恣意類型,但普通為整型或字符型數(shù)據(jù)
12、,判別值的類型與其要一致case判別值必需為常量或常量表達(dá)式,且判別值必需互不一樣default缺省時(shí),當(dāng)一切case判別不符時(shí),那么直接自動(dòng)退出 switch當(dāng)break語句不缺省時(shí),case和default的順序可以恣意break語句缺省時(shí),系統(tǒng)將繼續(xù)執(zhí)行下一條case 語句組,可以運(yùn)用case 重疊 共用一個(gè)語句組4-3 選擇語句運(yùn)輸公司計(jì)算運(yùn)費(fèi)的原那么是間隔越遠(yuǎn),每公里收費(fèi)越低 s250無折扣;250=s500 2%折扣;500=s1000 5%; 1000=s2000 8% ;2000=s=3000 15% p-單價(jià) w-分量 d-折扣 f 運(yùn)費(fèi) 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)計(jì)輸入的一行字符中的英文各元音字母的個(gè)數(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 選擇語句輸入學(xué)號(hào)及成果,并根據(jù)成果定等級(jí)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)就是反復(fù)執(zhí)行一段程序,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。 循環(huán)必需能終了,通常需求循環(huán)變量來控制循環(huán)。4.4.1 while語句 當(dāng)型 格式: while(表達(dá)式) 循環(huán)體語句; 闡明:進(jìn)入循環(huán)前要作初始化任務(wù)循環(huán)體中應(yīng)有使條件向假方向變化的語句表達(dá)式為常數(shù)非O是無限循環(huán),需配合其他語句加以控制循環(huán)體可以是空語句4-4 循環(huán)語句0非0表達(dá)式?循環(huán)體4-4 循環(huán)語句計(jì)算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);求個(gè)位數(shù)為6且能被3整除的5位數(shù)共有多少個(gè)?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表達(dá)式;闡明:先執(zhí)行一次循環(huán)體,再判表達(dá)式在不知道循環(huán)次數(shù),且又必需執(zhí)行一次循環(huán)體時(shí)4-4 循環(huán)語句0非0表達(dá)式?循環(huán)體4-4 循環(huán)語句計(jì)算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(表達(dá)式1;表達(dá)式2;表達(dá)式3 循環(huán)體; 執(zhí)行順序:1執(zhí)行表達(dá)式12判別表達(dá)式2,假設(shè)表達(dá)式2成立,那么執(zhí)行循環(huán)體, 假設(shè)表達(dá)式2不成立,那么執(zhí)行43再執(zhí)行表達(dá)式3,然后回到24 闡明: 表達(dá)式均可省略,分號(hào)不能省略 for( ; ; ) 表達(dá)式1和3可為逗號(hào)表達(dá)式 for(i=0,j=100;ij;i+,j-); 表達(dá)式2多為關(guān)系或邏輯表達(dá)式for( ;low=high&found=0;)4-4 循環(huán)語句0非0表達(dá)式1表達(dá)式2?循環(huán)體表達(dá)式34-4 循環(huán)語句計(jì)算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言語中,當(dāng)一個(gè)循環(huán)構(gòu)造的循環(huán)體內(nèi)有另一個(gè)循環(huán)構(gòu)造時(shí),稱為多重循環(huán)或循環(huán)嵌套,前面引見的三種循環(huán)構(gòu)造可以相互嵌套。當(dāng)一個(gè)循環(huán)的循環(huán)體僅是另一個(gè)單一的循環(huán)構(gòu)造時(shí),外層循環(huán)不需求運(yùn)用大括號(hào)包圍它的循環(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退出闡明:強(qiáng)行退出僅退出一層循環(huán)或一層switch4.5.2 continue語句 功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一次循環(huán)4-5 輔助控制語句跳過負(fù)元素,求為正元素之和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 轉(zhuǎn)向語句goto 格式:goto 標(biāo)號(hào); error: . for( ) if( ) goto error; . goto破壞構(gòu)造化,不用!4.5.4 前往語句 return格式:return 值; return(值);4-6 習(xí)題簡單運(yùn)用 見書(譚)例題枚舉法求最小公倍數(shù)找出100999之間的一切水仙花數(shù),各位立方和=本身153等百錢買百雞、百馬運(yùn)百貨 求素?cái)?shù) 編程序找出1000之內(nèi)的一切完數(shù),一
24、個(gè)數(shù)恰好等于其因子之和如 6=1+2+34-6 習(xí)題遞推法公式類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、素?cái)?shù)判別一個(gè)數(shù)能否為素?cái)?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); 素?cái)?shù)求一個(gè)區(qū)間中一切的素?cái)?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之內(nèi)的完數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年太陽能電池生產(chǎn)專用設(shè)備項(xiàng)目建議書
- 2025年汽車車速傳感器項(xiàng)目合作計(jì)劃書
- 2025年應(yīng)急救生系統(tǒng)項(xiàng)目建議書
- 貴州省黔東南苗族侗族自治州2024-2025學(xué)年高一上學(xué)期1月期末考試 語文 含解析
- 2025年新型分子篩系列產(chǎn)品項(xiàng)目建議書
- 客戶服務(wù)層次化響應(yīng)體系構(gòu)建
- 娛樂行業(yè)演出安全協(xié)議書
- Rebaudioside-E-Standard-生命科學(xué)試劑-MCE
- 伊索寓言小動(dòng)物的故事解讀
- 監(jiān)控采購安裝合同
- 硫酸分公司30萬噸硫磺制酸試車方案
- 高壓氧科工作總結(jié)高壓氧科個(gè)人年終總結(jié).doc
- 電子電路基礎(chǔ)習(xí)題解答
- 《政治學(xué)概論》教學(xué)大綱
- 食品生物化學(xué)習(xí)題謝達(dá)平(動(dòng)態(tài))
- 保安員工入職登記表
- 斷路器控制回路超詳細(xì)講解
- 簽證戶口本完整翻譯模板
- 睿達(dá)RDCAM激光雕刻切割軟件V5.0操作說明書
- 變電設(shè)備運(yùn)行與維護(hù)培訓(xùn)課件(共102頁).ppt
- 機(jī)械設(shè)計(jì)基礎(chǔ)平面連桿機(jī)構(gòu)課件
評(píng)論
0/150
提交評(píng)論