版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)(TheCProgrammingLanguage)耿小慶第四章流程控制
§4-1結(jié)構(gòu)化程序設(shè)計(jì)§4-2C語句概述§4-3選擇語句§4-4循環(huán)語句§4-5輔助控制語句§4-6習(xí)題第四章流程控制
結(jié)構(gòu)化程序設(shè)計(jì)思想算法傳統(tǒng)流程圖表示的三種結(jié)構(gòu)N/S方框圖表示的三種結(jié)構(gòu)小結(jié)§4-1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)思想§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.1結(jié)構(gòu)化程序設(shè)計(jì)思想任何程序都可以用三種基本結(jié)構(gòu)表示,即用順序(Composition)、選擇(Alternation)和循環(huán)(Iteration)結(jié)構(gòu)來表示。這三種結(jié)構(gòu)反復(fù)組合、嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序。順序結(jié)構(gòu)的程序流程是按照語句的順序依次執(zhí)行;選擇結(jié)構(gòu)是根據(jù)給定的條件進(jìn)行判斷,由判斷結(jié)構(gòu)決定執(zhí)行兩支或多支程序段中的一支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。優(yōu)點(diǎn)結(jié)構(gòu)化程序?qū)哟畏置鳌⒔Y(jié)構(gòu)清晰、有效地改善了程序的可靠性,從而大大地提高了程序設(shè)計(jì)的質(zhì)量和效率。§4-1概述4.1.1結(jié)構(gòu)化程序設(shè)計(jì)§4-1概述員工工資管理系統(tǒng)…………稅率計(jì)算員工福利員工出勤記錄保險(xiǎn)費(fèi)退休金§4-1結(jié)構(gòu)化程序設(shè)計(jì)自頂向下,逐步求精員工工資管理系統(tǒng)…………稅率計(jì)算員工福利員工出勤記錄保險(xiǎn)費(fèi)退4.1.2算法“算法”是為解決一個(gè)具體問題而采取的確定的有限的操作步驟。(數(shù)據(jù)結(jié)構(gòu))+(算法)=程序 N·Wirth算法的表示方法:傳統(tǒng)的流程圖N/S方框圖自然語言偽碼問題求解圖(PAD)明確問題利用某種語言描述算法設(shè)計(jì)算法§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.2算法明確問題利用某種語言描述算法設(shè)計(jì)算法§4-14.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)開始/結(jié)束框一般處理框判斷框輸入/輸出框流程線連接符§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)開始/結(jié)束框一般處理框4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)順序結(jié)構(gòu)(Composition)AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)AB§4-1結(jié)構(gòu)化程4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)選擇結(jié)構(gòu)(Alternation)AB條件P成立不成立§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)AB條件P成立不成立§4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)循環(huán)結(jié)構(gòu)(Iteration)不成立條件PA成立成立A條件P不成立(1)當(dāng)型(2)直到型§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)不成立條件PA成立成立A實(shí)例1:計(jì)算1+2+3+……+100的值i=i+1s=s+i開始NY循環(huán)變量i置1累加器s置0i<=100?結(jié)束輸出s§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例1:計(jì)算1+2+3+……+100的值i=i+1s=這是一款意大利生產(chǎn)的多功能廚具|……請猜價(jià)格!600答案是:720低了!800750700高了!高了!正確!這是一款瑞士生產(chǎn)的多功能刀具|……請猜價(jià)格!600高了!500高了!時(shí)間到!1個(gè)商標(biāo)720低了!答案是:428§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例2:幸運(yùn)52這是一款意大利生產(chǎn)的多功能廚具|……6“幸運(yùn)52”的傳統(tǒng)流程圖否是是是否否否是時(shí)間到?輸出產(chǎn)品特點(diǎn)新產(chǎn)品?開始計(jì)時(shí)商標(biāo)數(shù)清0猜對了?猜高了?輸入猜想價(jià)格輸出“高了!”輸出“正確!”輸出“低了!”累計(jì)商標(biāo)數(shù)結(jié)束輸出商標(biāo)數(shù)輸出“時(shí)間到!”“幸運(yùn)52”的傳統(tǒng)流程圖否是是是否否否是時(shí)間到?輸出產(chǎn)品特點(diǎn)傳統(tǒng)流程圖的優(yōu)缺點(diǎn)優(yōu)點(diǎn):形象直觀,各種操作一目了然,不會產(chǎn)生“歧義性”,便于理解,算法出錯(cuò)時(shí)容易發(fā)現(xiàn),并可直接轉(zhuǎn)化為程序。缺點(diǎn):所占篇幅較大,由于使用流程線,過于靈活,不受約束,使用者可使流程線任意轉(zhuǎn)移,從而造成程序閱讀和修改的困難,不利于結(jié)構(gòu)化程序的設(shè)計(jì)?!?-1結(jié)構(gòu)化程序設(shè)計(jì)傳統(tǒng)流程圖的優(yōu)缺點(diǎn)§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖N/S方框圖是由美國學(xué)者I·Nassi和B·Schneiderman于1973年提出的。N/S方框圖的重要特點(diǎn)就是完全取消了流程線,這樣,算法被迫只能順序執(zhí)行,從而避免了流程的任意轉(zhuǎn)向,保證了程序的質(zhì)量。尤其適合結(jié)構(gòu)化程序的設(shè)計(jì)。N/S方框圖的另一個(gè)優(yōu)點(diǎn)是既形象直觀,又節(jié)省篇幅?!?-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖§4-1結(jié)構(gòu)化程序設(shè)計(jì)§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖順序結(jié)構(gòu)(Composition)AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖選擇結(jié)構(gòu)(Alternation)AB條件P成立不成立§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖AB條件P§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖循環(huán)結(jié)構(gòu)(Iteration)A當(dāng)P成立A直到P成立(1)當(dāng)型(2)直到型§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖A當(dāng)P成立實(shí)例1的N/S方框圖累加器s置0循環(huán)變量i置1i=i+1s=s+ii<=100?輸出s§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例1的N/S方框圖累加器s置0循環(huán)變量i置1i=i+表達(dá)式語句表達(dá)式;賦值語句i=10;函數(shù)調(diào)用語句printf("Hello!\n");流程控制語句
選擇if~else,else~if,switch~case循環(huán)for,while,do~while輔助控制break,continue,goto,return空語句;什么也不干
for(i=1;i<5000;i++);延時(shí)for(i=0;i<100;a[i++]=0);語法要求復(fù)合語句{多個(gè)簡單句}語法上等同于一個(gè)簡單語句可以嵌套使用
分程序,數(shù)據(jù)說明一定要在所有執(zhí)行語句之前?!?-2C語句概述表達(dá)式語句表達(dá)式;賦值語句i=10;§4-2§4-3選擇語句輸入三個(gè)數(shù),按從小到大輸出main(){floata,b,c,t;scanf("%f%f%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f<=%5.2f<=%5.2f\n",a,b,c);}
4.3.1if語句格式:if(表達(dá)式)語句;說明:一般語言,if后是關(guān)系或邏輯表達(dá)式,而C無要求if只是測試表達(dá)式的值,當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行語句if(表達(dá)式)if(表達(dá)式!=0)if(!表達(dá)式)if(表達(dá)式==0)“語句”為一條語句或復(fù)合語句§4-3選擇語句輸入三個(gè)數(shù),按從小到大輸出4.3.1§4-3選擇語句4.3.2if~else語句格式:if(表達(dá)式)語句1;else語句2;說明:
表達(dá)式仍為一般表達(dá)式,當(dāng)表達(dá)式非0時(shí),執(zhí)行語句1,否則,執(zhí)行語句2“語句1”、“語句2”均為一條語句或復(fù)合語句§4-3選擇語句4.3.2if~else語句§4-3選擇語句根據(jù)需要交換兩個(gè)變量的值#include<stdio.h>main(){inta,b,x,ch;printf("Entertwointegers:");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);}elseprintf("Noswap!\n");}§4-3選擇語句根據(jù)需要交換兩個(gè)變量的值加上{}就行了!if(n>0){if(a>b)z=a;}elsez=b;§4-3選擇語句要想在n<=0時(shí)執(zhí)行z=b;怎么辦呢?給你出個(gè)難題?現(xiàn)有程序段if(n>0)if(a>b)z=a;elsez=b;什么時(shí)候執(zhí)行z=b;?太簡單了!else總是與其上最近的且未與其他else配對的if配對,因此n>0并且a<=b時(shí)執(zhí)行z=b;4.3.3分支嵌套else總與其上最近的且未與其他else配對的if配對要想與其他if匹配加{}書寫形式不能代替邏輯關(guān)系加上{}就行了!§4-3選擇語句要想在n<=0時(shí)執(zhí)行z=§4-3選擇語句4.3.4else-if語句格式:if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;.....elseif(表達(dá)式n)語句n;else語句n+1;功能:逐個(gè)判斷表達(dá)式的值,對首次為真者執(zhí)行其后的語句,然后繼續(xù)執(zhí)行n+1條語句后的語句,全不為真時(shí)執(zhí)行else后的語句。§4-3選擇語句4.3.4else-if語句main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf("%d",&guess);if(guess==magic)printf(“Right!\n”);else{printf(“Wrong!”);if(guess>magic)printf(“Toohigh!\n”);elseprintf("Toolow!\n”);}}§4-3選擇語句main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf("%d",&guess);if(guess==magic)printf(“Right!\n”);elseif(guess>magic)printf(“Wrong!Toobig!\n”);elseprintf("Wrong!Toosmall!\n”);}猜數(shù)數(shù)游戲:由計(jì)算機(jī)“想”一個(gè)數(shù)請人猜,若猜對了則給出提示“Right”,否則提示“Wrong”,并告訴人是大還是小了?main()§4-3選擇語句main()猜數(shù)數(shù)游戲:由計(jì)§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級main(){intscore,snum;chargrade;scanf("%d%d",&snum,&score);if(snum>0&&snum<35&&score>=0&&score<=100){if(score>=90)grade='A';elseif(score>=80)grade='B';elseif(score>=70)grade='C';elseif(score>=60)grade='D';elsegrade='E';printf("number:%disgrade%c\n",snum,grade);}elseprintf("TheNo.isinvalid!\n);}§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級§4-3選擇語句4.3.5開關(guān)分支switch~case格式:switch(表達(dá)式){case值1:語句組1;[break;]case值2:語句組2;[break;]......case值n:語句組n;[break;][default:語句組n+1;[break;]]}功能:根據(jù)表達(dá)式的值與各個(gè)case判斷值的比較情況決定執(zhí)行哪個(gè)語句組?!?-3選擇語句4.3.5開關(guān)分支switch~ca§4-3選擇語句4.3.5開關(guān)分支switch~case注意:表達(dá)式的值可為任意類型,但一般為整型或字符型數(shù)據(jù),判斷值的類型與其要一致case判斷值必須為常量或常量表達(dá)式,且判斷值必須互不相同default缺省時(shí),當(dāng)所有case判斷不符時(shí),則直接自動退出switch當(dāng)break語句不缺省時(shí),case和default的順序可以任意break語句缺省時(shí),系統(tǒng)將繼續(xù)執(zhí)行下一條case語句組,可以使用case重疊共用一個(gè)語句組§4-3選擇語句4.3.5開關(guān)分支switch~cas§4-3選擇語句運(yùn)輸公司計(jì)算運(yùn)費(fèi)的原則是距離越遠(yuǎn),每公里收費(fèi)越低s<250無折扣;250<=s<5002%折扣;500<=s<10005%;1000<=s<20008%;2000<=s<300010%;s>=300015%p-單價(jià)w-重量d-折扣f運(yùn)費(fèi)p*W*S*(1-d)main(){ints;floatp,w,d,f;scanf("%f%f%d",&p,&w,&s);switch(s/250){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;break;}f=p*w*s*(1-d);printf("freight=%.2f\n",f);}§4-3選擇語句運(yùn)輸公司計(jì)算運(yùn)費(fèi)的原則是距離越遠(yuǎn),每公里§4-3選擇語句統(tǒng)計(jì)輸入的一行字符中的英文各元音字母的個(gè)數(shù)(不區(qū)分大小寫)#include<stdio.h>main(){intna,ne,ni,no,nu;charc;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=%d\n",na,ne,ni,no,nu);}§4-3選擇語句統(tǒng)計(jì)輸入的一行字符中的英文各元音字母的個(gè)§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級main(){intscore,snum;chargrade;scanf("%d%d",&snum,&score);if(snum>0&&snum<35&&score>=0&&score<=100){switch(score/10){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;default:grade='E';break;}printf("number:%disgrade%c\n",snum,grade);}elseprintf("TheNo.orScoreisinvalid!\n);}§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級§4-4循環(huán)語句循環(huán)就是反復(fù)執(zhí)行一段程序,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。循環(huán)必須能結(jié)束,通常需要循環(huán)變量來控制循環(huán)?!?-4循環(huán)語句循環(huán)就是反復(fù)執(zhí)行一段程序,被反復(fù)執(zhí)行的4.4.1while語句當(dāng)型格式:
while(表達(dá)式)循環(huán)體語句;說明:進(jìn)入循環(huán)前要作初始化工作循環(huán)體中應(yīng)有使條件向假方向變化的語句表達(dá)式為常數(shù)(非O)是無限循環(huán),需配合其他語句加以控制循環(huán)體可以是空語句§4-4循環(huán)語句0非0表達(dá)式?循環(huán)體4.4.1while語句當(dāng)型§4-4循環(huán)語句0非§4-4循環(huán)語句計(jì)算1+2+3+……+100的值main(){intsum=0,i=1;while(i<=100)sum+=i++;/*{sum+=i;i++;}*/printf(“sumof1-100is:%d\n”,sum);}求個(gè)位數(shù)為6且能被3整除的5位數(shù)共有多少個(gè)?main(){inti=0;longm=10006;while(m<=99996l){if(m%3==0)/*if((m/3)*3==m)*/i++;m+=10;}printf(“Itis%d\n”,i);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值§4-4循環(huán)語句求出200~800之間所有既能被7又能被11整除的整數(shù)main(){inti=0,m=200;while(m<=800){if(m%7==0&&m%11==0){printf(“%5d”,m);i++;if(i%10==0)printf(“\n”);}m++;}}§4-4循環(huán)語句求出200~800之間所有既能被7又能被4.4.2dowhile語句格式: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.2dowhile語句§4-4循環(huán)語句0非0表§4-4循環(huán)語句計(jì)算1+2+3+……+100的值main(){intsum=0,i=1;do{sum+=i;i++;}while(i<=100);printf(“sumof1-100is:%d\n”,sum);}某數(shù)用3除余2,用5余3,用7余2)main(){inti=0;do{i++;}while(!(i%3==2&&i%5==3&&i%7==2));/*}while(i%3!=2||i%5!=3||i%7!=2));*/printf(“%d\n”,i);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值
4.4.3for語句
格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體;執(zhí)行順序:(1)執(zhí)行表達(dá)式1(2)判斷表達(dá)式2,如果表達(dá)式2成立,則執(zhí)行循環(huán)體,如果表達(dá)式2不成立,則執(zhí)行(4)(3)再執(zhí)行表達(dá)式3,然后回到(2)(4)………說明:表達(dá)式均可省略,分號不能省略for(;;)表達(dá)式1和3可為逗號表達(dá)式for(i=0,j=100;i<j;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.3for語句§4-4循環(huán)語句0非0表達(dá)式1§4-4循環(huán)語句計(jì)算1+2+3+……+100的值eg.main(){intsum=0,i;for(i=1;i<=100;i++)sum+=i;printf(“sumof1-100is:%d\n”,sum);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值§4-4循環(huán)語句4.4.4循環(huán)的嵌套多重循環(huán)在C語言中,當(dāng)一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)有另一個(gè)循環(huán)結(jié)構(gòu)時(shí),稱為多重循環(huán)或循環(huán)嵌套,前面介紹的三種循環(huán)結(jié)構(gòu)可以相互嵌套。當(dāng)一個(gè)循環(huán)的循環(huán)體僅是另一個(gè)單一的循環(huán)結(jié)構(gòu)時(shí),外層循環(huán)不需要使用大括號包圍它的循環(huán)體。打印乘法口訣表for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf(“%5d”,i*j);printf(“\n”);}12345678924681012141618369121518212427481216202428323651015202530354045612182430364248547142128354249566381624324048566472918273645546372811243694812165101520256121824303671421283542498162432404856649182736455463728112345678946810121416189121518212427162024283236253035404536424854495663647281§4-4循環(huán)語句4.4.4循環(huán)的嵌套多重循環(huán)打印乘§4-5輔助控制語句4.5.1break語句功能:中斷循環(huán)過程,退出循環(huán)體從包含它的switch退出說明:強(qiáng)行退出僅退出一層循環(huán)或一層switch4.5.2continue語句功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一次循環(huán)§4-5輔助控制語句4.5.1break語句§4-5輔助控制語句跳過負(fù)元素,求為正元素之和main(){intn,sum=0;while(1){scanf(“%d”,&n);if(n==0)break;if(n<0)continue;sum+=n;}printf("sum=%d\n",sum)}§4-5輔助控制語句跳過負(fù)元素,求為正元素之和§4-5輔助控制語句4.5.3轉(zhuǎn)向語句goto格式:goto標(biāo)號;error:......for(){if()gotoerror;}.......goto破壞結(jié)構(gòu)化,不用!4.5.4返回語句return格式:return值;return(值);§4-5輔助控制語句4.5.3轉(zhuǎn)向語句goto§4-6習(xí)題簡單應(yīng)用見書(譚)例題枚舉法求最小公倍數(shù)找出100~999之間的所有水仙花數(shù),各位立方和=本身(153等)百錢買百雞、百馬運(yùn)百貨
求素?cái)?shù)
編程序找出1000之內(nèi)的所有完數(shù),一個(gè)數(shù)恰好等于其因子之和如6=1+2+3§4-6習(xí)題簡單應(yīng)用見書(譚)例題§4-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+……+aa……aaa=2,n=72+22+222+2222+22222+222222+2222222其它猴子吃桃珠穆朗瑪峰皮球落地§4-6習(xí)題遞推法最小公倍、最大公約main(){inta,b,bei;printf("Pleaseentertwointegers:");scanf("%d%d",&a,&b);if(a<b){bei=a;a=b;b=bei;}bei=a;while(bei%b!=0)bei+=a;printf(“\n最小公倍數(shù)為:%d\n",bei);}main(){inta,b,bei,chu,yu;printf("Pleaseentertwointegers:");scanf("%d%d",&a,&b);if(a>b){bei=a;chu=b;}else{bei=b;chu=a;}while((yu=bei%chu)!=0){bei=chu;chu=yu;}printf(“\n最大公約數(shù)為:%d\n",chu);}最小公倍、最大公約main()main()水仙花數(shù)main(){inti,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(){intm,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)printf("%5d",m);}}水仙花數(shù)main()main()百錢買百雞、百馬拉百貨main(){inti,j,k;for(i=1;i<20;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:%d\n",i,j,k);}}main(){inti,j,k;for(i=1;i<34;i++)for(j=1;j<50;j++)for(k=2;k<100;k+=2)if(i*3+j*2+k/2==100&&i+j+k=100)printf("big=%3d\tmiddle=%3d\tsmall=%3d\n",i,j,k);}百錢買百雞、百馬拉百貨main()main()素?cái)?shù)判斷一個(gè)數(shù)是否為素?cái)?shù)#include<math.h>main(){longm;inti,sqrtm;printf("Pleaseenteranumbers:");scanf("%ld",&m);sqrtm=sqrt(m);for(i=2;i<=sqrtm;i++)if(m%i==0)break;if(i>sqrtm)printf("%ldisaprime.\n",m);else printf("%ldisnotaprime.\n",m);}素?cái)?shù)判斷一個(gè)數(shù)是否為素?cái)?shù)素?cái)?shù)求一個(gè)區(qū)間中所有的素?cái)?shù)#include<math.h>voidmain(void){longa,b,m;inti,sqrtm,count=0;printf("Pleaseentertwonumbers:");scanf("%ld%ld",&a,&b);printf("Primesfrom%dto%dis:\n",a,b);for(m=(a%2==0)?a+1:a;m<=b;m+=2){sqrtm=sqrt(m);for(i=2;i<=sqrtm;i++)if(m%i==0)break;if(i>sqrtm){if(count++%10==0)printf("\n"); printf("%8ld",m); }}}素?cái)?shù)求一個(gè)區(qū)間中所有的素?cái)?shù)完數(shù)main(){inti,j,s,n=0;printf(“1000之內(nèi)的完數(shù):”);for(i=1;i<=1000;i++){s=0;for(j=1;j<i;j++)if(i%j==0)s+=j;if(s==i){printf("%5d",i);n++;if(n%10==0)printf("\n");}}}完數(shù)main()Π/4=1-1/3+1/5-1/7+1/9+……求Π#include<math.h>main(){ints=1;longn=1;doublepi=0,t=1;/*doublepi=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=%f\n",pi);}Π/4=1-1/3+1/5-1/7+1/9+……求Π#1!+2!+3!+……+20!main(){inti;floats=0,t=1;for(i=1;i<=20;i++){t*=i;s+=t;}printf(“Result:%f\n",s);}1!+2!+3!+……+20!main()1+1/2!+1/3!+……+1/10!main(){inti;longt=1;floats=0;for(i=1;i<=10;i++){t*=i;s+=1.0/t;}printf(“Result:%f\n",s);}1+1/2!+1/3!+……+1/10!main()a+aa+aaa+……+aa……aamain(){inti,a,n;doublet=0,s=0;printf(“%d%d”,&a,&n);for(i=1;i<=n;i++){t=t*10+a;s+=t;}printf(“Result:%f\n",s);}a+aa+aaa+……+aa……aamain()猴子吃桃main(){inti,n;for(i=9,n=1;i>=1;i--)n=(n+1)*2;printf(“Thefirstdayhave%d.\n",n);}猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè),第二天又將剩下的桃子吃了一半,并多吃了一個(gè),以后每天早上都這樣,第十天想再吃時(shí),只剩一個(gè)桃子,求第一天共摘多少桃子猴子吃桃main()猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半珠穆朗瑪峰main(){doublehigh=0.00009;intn=0;while(high<8848){n++;high*=2;}printf(“對折%d次。\n",n);}假設(shè)有一張足夠大的紙,厚度為0.09毫米,將紙不斷對折。編制程序,求將紙對折多少次后,可以達(dá)到珠穆朗瑪峰的高度(8848米)。珠穆朗瑪峰main()假設(shè)有一張足夠大的紙,厚度為0.09皮球落地main(){floathigh=100,s=0;inti;for(i=1;i<=10;i++){s+=high;high/=2;s+=high;}s-=high;printf(“第10次落地共經(jīng)過%f米,第10次反彈%f米\n”,s,high);}一球從100米高度自由落下,每次落地后反彈回原高度的一半,再落下。求它在第10次落地時(shí),共經(jīng)過多少米?第10次反彈多高?皮球落地main()一球從100米高度自由落下,每次落地后作業(yè)編程設(shè)計(jì)一個(gè)簡單的計(jì)數(shù)器程序,要求根據(jù)用戶從鍵盤輸入的表達(dá)式:操作數(shù)1運(yùn)算符操作數(shù)2,計(jì)算表達(dá)式的值。指定運(yùn)算為+,-,*,/。例如輸入:2.5+3輸出為:2.500000+3.000000=5.500000例如輸入:5/2輸出為:5.000000/2.000000=2.500000書第120頁6.2、6.5求1-1/2+1/3-1/4+1/5……+1/99-1/100編程輸出以下圖形,行數(shù)及每行個(gè)數(shù)由用戶輸入決定************************************************************作業(yè)編程設(shè)計(jì)一個(gè)簡單的計(jì)數(shù)器程序,要求根據(jù)用戶從鍵盤作業(yè)編寫猜數(shù)程序,程序中預(yù)先給定某個(gè)整數(shù),從鍵盤反復(fù)輸入整數(shù)進(jìn)行猜數(shù),每次輸入數(shù)未猜中時(shí),提示輸入數(shù)過大或過小。猜中時(shí)顯示猜的次數(shù),最多允許猜20次。編寫程序,從鍵盤輸入一個(gè)正整數(shù),計(jì)算該數(shù)的各個(gè)位數(shù)字之和,并顯示結(jié)果。例如輸入3257,結(jié)果為17。思考題:水手分椰子。五個(gè)水手在一個(gè)島上發(fā)現(xiàn)了一堆椰子,現(xiàn)由第一個(gè)水手把椰子分為等量的5堆,剩下的1個(gè)給猴子,并自己藏起1堆,然后由第二個(gè)水手把剩下的4堆混合后重新分為等量的5堆,剩下的1個(gè)給猴子,并自己藏起一堆。以后第三、四個(gè)水手同樣處理。最后第五個(gè)水手把剩下的椰子混合后分為等量的5堆,同樣剩下1各給猴子。問原來這堆椰子至少有多少個(gè)。作業(yè)編寫猜數(shù)程序,程序中預(yù)先給定某個(gè)整數(shù),從鍵盤反復(fù)演講完畢,謝謝觀看!演講完畢,謝謝觀看!
C語言程序設(shè)計(jì)(TheCProgrammingLanguage)耿小慶第四章流程控制
§4-1結(jié)構(gòu)化程序設(shè)計(jì)§4-2C語句概述§4-3選擇語句§4-4循環(huán)語句§4-5輔助控制語句§4-6習(xí)題第四章流程控制
結(jié)構(gòu)化程序設(shè)計(jì)思想算法傳統(tǒng)流程圖表示的三種結(jié)構(gòu)N/S方框圖表示的三種結(jié)構(gòu)小結(jié)§4-1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)思想§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.1結(jié)構(gòu)化程序設(shè)計(jì)思想任何程序都可以用三種基本結(jié)構(gòu)表示,即用順序(Composition)、選擇(Alternation)和循環(huán)(Iteration)結(jié)構(gòu)來表示。這三種結(jié)構(gòu)反復(fù)組合、嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序。順序結(jié)構(gòu)的程序流程是按照語句的順序依次執(zhí)行;選擇結(jié)構(gòu)是根據(jù)給定的條件進(jìn)行判斷,由判斷結(jié)構(gòu)決定執(zhí)行兩支或多支程序段中的一支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。優(yōu)點(diǎn)結(jié)構(gòu)化程序?qū)哟畏置?、結(jié)構(gòu)清晰、有效地改善了程序的可靠性,從而大大地提高了程序設(shè)計(jì)的質(zhì)量和效率?!?-1概述4.1.1結(jié)構(gòu)化程序設(shè)計(jì)§4-1概述員工工資管理系統(tǒng)…………稅率計(jì)算員工福利員工出勤記錄保險(xiǎn)費(fèi)退休金§4-1結(jié)構(gòu)化程序設(shè)計(jì)自頂向下,逐步求精員工工資管理系統(tǒng)…………稅率計(jì)算員工福利員工出勤記錄保險(xiǎn)費(fèi)退4.1.2算法“算法”是為解決一個(gè)具體問題而采取的確定的有限的操作步驟。(數(shù)據(jù)結(jié)構(gòu))+(算法)=程序 N·Wirth算法的表示方法:傳統(tǒng)的流程圖N/S方框圖自然語言偽碼問題求解圖(PAD)明確問題利用某種語言描述算法設(shè)計(jì)算法§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.2算法明確問題利用某種語言描述算法設(shè)計(jì)算法§4-14.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)開始/結(jié)束框一般處理框判斷框輸入/輸出框流程線連接符§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)開始/結(jié)束框一般處理框4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)順序結(jié)構(gòu)(Composition)AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)AB§4-1結(jié)構(gòu)化程4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)選擇結(jié)構(gòu)(Alternation)AB條件P成立不成立§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)AB條件P成立不成立§4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)循環(huán)結(jié)構(gòu)(Iteration)不成立條件PA成立成立A條件P不成立(1)當(dāng)型(2)直到型§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.3傳統(tǒng)流程圖表示的三種結(jié)構(gòu)不成立條件PA成立成立A實(shí)例1:計(jì)算1+2+3+……+100的值i=i+1s=s+i開始NY循環(huán)變量i置1累加器s置0i<=100?結(jié)束輸出s§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例1:計(jì)算1+2+3+……+100的值i=i+1s=這是一款意大利生產(chǎn)的多功能廚具|……請猜價(jià)格!600答案是:720低了!800750700高了!高了!正確!這是一款瑞士生產(chǎn)的多功能刀具|……請猜價(jià)格!600高了!500高了!時(shí)間到!1個(gè)商標(biāo)720低了!答案是:428§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例2:幸運(yùn)52這是一款意大利生產(chǎn)的多功能廚具|……6“幸運(yùn)52”的傳統(tǒng)流程圖否是是是否否否是時(shí)間到?輸出產(chǎn)品特點(diǎn)新產(chǎn)品?開始計(jì)時(shí)商標(biāo)數(shù)清0猜對了?猜高了?輸入猜想價(jià)格輸出“高了!”輸出“正確!”輸出“低了!”累計(jì)商標(biāo)數(shù)結(jié)束輸出商標(biāo)數(shù)輸出“時(shí)間到!”“幸運(yùn)52”的傳統(tǒng)流程圖否是是是否否否是時(shí)間到?輸出產(chǎn)品特點(diǎn)傳統(tǒng)流程圖的優(yōu)缺點(diǎn)優(yōu)點(diǎn):形象直觀,各種操作一目了然,不會產(chǎn)生“歧義性”,便于理解,算法出錯(cuò)時(shí)容易發(fā)現(xiàn),并可直接轉(zhuǎn)化為程序。缺點(diǎn):所占篇幅較大,由于使用流程線,過于靈活,不受約束,使用者可使流程線任意轉(zhuǎn)移,從而造成程序閱讀和修改的困難,不利于結(jié)構(gòu)化程序的設(shè)計(jì)?!?-1結(jié)構(gòu)化程序設(shè)計(jì)傳統(tǒng)流程圖的優(yōu)缺點(diǎn)§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖N/S方框圖是由美國學(xué)者I·Nassi和B·Schneiderman于1973年提出的。N/S方框圖的重要特點(diǎn)就是完全取消了流程線,這樣,算法被迫只能順序執(zhí)行,從而避免了流程的任意轉(zhuǎn)向,保證了程序的質(zhì)量。尤其適合結(jié)構(gòu)化程序的設(shè)計(jì)。N/S方框圖的另一個(gè)優(yōu)點(diǎn)是既形象直觀,又節(jié)省篇幅?!?-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖§4-1結(jié)構(gòu)化程序設(shè)計(jì)§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖順序結(jié)構(gòu)(Composition)AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖AB§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖選擇結(jié)構(gòu)(Alternation)AB條件P成立不成立§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖AB條件P§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖循環(huán)結(jié)構(gòu)(Iteration)A當(dāng)P成立A直到P成立(1)當(dāng)型(2)直到型§4-1結(jié)構(gòu)化程序設(shè)計(jì)4.1.4N/S方框圖A當(dāng)P成立實(shí)例1的N/S方框圖累加器s置0循環(huán)變量i置1i=i+1s=s+ii<=100?輸出s§4-1結(jié)構(gòu)化程序設(shè)計(jì)實(shí)例1的N/S方框圖累加器s置0循環(huán)變量i置1i=i+表達(dá)式語句表達(dá)式;賦值語句i=10;函數(shù)調(diào)用語句printf("Hello!\n");流程控制語句
選擇if~else,else~if,switch~case循環(huán)for,while,do~while輔助控制break,continue,goto,return空語句;什么也不干
for(i=1;i<5000;i++);延時(shí)for(i=0;i<100;a[i++]=0);語法要求復(fù)合語句{多個(gè)簡單句}語法上等同于一個(gè)簡單語句可以嵌套使用
分程序,數(shù)據(jù)說明一定要在所有執(zhí)行語句之前。§4-2C語句概述表達(dá)式語句表達(dá)式;賦值語句i=10;§4-2§4-3選擇語句輸入三個(gè)數(shù),按從小到大輸出main(){floata,b,c,t;scanf("%f%f%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f<=%5.2f<=%5.2f\n",a,b,c);}
4.3.1if語句格式:if(表達(dá)式)語句;說明:一般語言,if后是關(guān)系或邏輯表達(dá)式,而C無要求if只是測試表達(dá)式的值,當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行語句if(表達(dá)式)if(表達(dá)式!=0)if(!表達(dá)式)if(表達(dá)式==0)“語句”為一條語句或復(fù)合語句§4-3選擇語句輸入三個(gè)數(shù),按從小到大輸出4.3.1§4-3選擇語句4.3.2if~else語句格式:if(表達(dá)式)語句1;else語句2;說明:
表達(dá)式仍為一般表達(dá)式,當(dāng)表達(dá)式非0時(shí),執(zhí)行語句1,否則,執(zhí)行語句2“語句1”、“語句2”均為一條語句或復(fù)合語句§4-3選擇語句4.3.2if~else語句§4-3選擇語句根據(jù)需要交換兩個(gè)變量的值#include<stdio.h>main(){inta,b,x,ch;printf("Entertwointegers:");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);}elseprintf("Noswap!\n");}§4-3選擇語句根據(jù)需要交換兩個(gè)變量的值加上{}就行了!if(n>0){if(a>b)z=a;}elsez=b;§4-3選擇語句要想在n<=0時(shí)執(zhí)行z=b;怎么辦呢?給你出個(gè)難題?現(xiàn)有程序段if(n>0)if(a>b)z=a;elsez=b;什么時(shí)候執(zhí)行z=b;?太簡單了!else總是與其上最近的且未與其他else配對的if配對,因此n>0并且a<=b時(shí)執(zhí)行z=b;4.3.3分支嵌套else總與其上最近的且未與其他else配對的if配對要想與其他if匹配加{}書寫形式不能代替邏輯關(guān)系加上{}就行了!§4-3選擇語句要想在n<=0時(shí)執(zhí)行z=§4-3選擇語句4.3.4else-if語句格式:if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;.....elseif(表達(dá)式n)語句n;else語句n+1;功能:逐個(gè)判斷表達(dá)式的值,對首次為真者執(zhí)行其后的語句,然后繼續(xù)執(zhí)行n+1條語句后的語句,全不為真時(shí)執(zhí)行else后的語句?!?-3選擇語句4.3.4else-if語句main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf("%d",&guess);if(guess==magic)printf(“Right!\n”);else{printf(“Wrong!”);if(guess>magic)printf(“Toohigh!\n”);elseprintf("Toolow!\n”);}}§4-3選擇語句main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf("%d",&guess);if(guess==magic)printf(“Right!\n”);elseif(guess>magic)printf(“Wrong!Toobig!\n”);elseprintf("Wrong!Toosmall!\n”);}猜數(shù)數(shù)游戲:由計(jì)算機(jī)“想”一個(gè)數(shù)請人猜,若猜對了則給出提示“Right”,否則提示“Wrong”,并告訴人是大還是小了?main()§4-3選擇語句main()猜數(shù)數(shù)游戲:由計(jì)§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級main(){intscore,snum;chargrade;scanf("%d%d",&snum,&score);if(snum>0&&snum<35&&score>=0&&score<=100){if(score>=90)grade='A';elseif(score>=80)grade='B';elseif(score>=70)grade='C';elseif(score>=60)grade='D';elsegrade='E';printf("number:%disgrade%c\n",snum,grade);}elseprintf("TheNo.isinvalid!\n);}§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級§4-3選擇語句4.3.5開關(guān)分支switch~case格式:switch(表達(dá)式){case值1:語句組1;[break;]case值2:語句組2;[break;]......case值n:語句組n;[break;][default:語句組n+1;[break;]]}功能:根據(jù)表達(dá)式的值與各個(gè)case判斷值的比較情況決定執(zhí)行哪個(gè)語句組?!?-3選擇語句4.3.5開關(guān)分支switch~ca§4-3選擇語句4.3.5開關(guān)分支switch~case注意:表達(dá)式的值可為任意類型,但一般為整型或字符型數(shù)據(jù),判斷值的類型與其要一致case判斷值必須為常量或常量表達(dá)式,且判斷值必須互不相同default缺省時(shí),當(dāng)所有case判斷不符時(shí),則直接自動退出switch當(dāng)break語句不缺省時(shí),case和default的順序可以任意break語句缺省時(shí),系統(tǒng)將繼續(xù)執(zhí)行下一條case語句組,可以使用case重疊共用一個(gè)語句組§4-3選擇語句4.3.5開關(guān)分支switch~cas§4-3選擇語句運(yùn)輸公司計(jì)算運(yùn)費(fèi)的原則是距離越遠(yuǎn),每公里收費(fèi)越低s<250無折扣;250<=s<5002%折扣;500<=s<10005%;1000<=s<20008%;2000<=s<300010%;s>=300015%p-單價(jià)w-重量d-折扣f運(yùn)費(fèi)p*W*S*(1-d)main(){ints;floatp,w,d,f;scanf("%f%f%d",&p,&w,&s);switch(s/250){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;break;}f=p*w*s*(1-d);printf("freight=%.2f\n",f);}§4-3選擇語句運(yùn)輸公司計(jì)算運(yùn)費(fèi)的原則是距離越遠(yuǎn),每公里§4-3選擇語句統(tǒng)計(jì)輸入的一行字符中的英文各元音字母的個(gè)數(shù)(不區(qū)分大小寫)#include<stdio.h>main(){intna,ne,ni,no,nu;charc;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=%d\n",na,ne,ni,no,nu);}§4-3選擇語句統(tǒng)計(jì)輸入的一行字符中的英文各元音字母的個(gè)§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級main(){intscore,snum;chargrade;scanf("%d%d",&snum,&score);if(snum>0&&snum<35&&score>=0&&score<=100){switch(score/10){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;default:grade='E';break;}printf("number:%disgrade%c\n",snum,grade);}elseprintf("TheNo.orScoreisinvalid!\n);}§4-3選擇語句輸入學(xué)號及成績,并根據(jù)成績定等級§4-4循環(huán)語句循環(huán)就是反復(fù)執(zhí)行一段程序,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。循環(huán)必須能結(jié)束,通常需要循環(huán)變量來控制循環(huán)?!?-4循環(huán)語句循環(huán)就是反復(fù)執(zhí)行一段程序,被反復(fù)執(zhí)行的4.4.1while語句當(dāng)型格式:
while(表達(dá)式)循環(huán)體語句;說明:進(jìn)入循環(huán)前要作初始化工作循環(huán)體中應(yīng)有使條件向假方向變化的語句表達(dá)式為常數(shù)(非O)是無限循環(huán),需配合其他語句加以控制循環(huán)體可以是空語句§4-4循環(huán)語句0非0表達(dá)式?循環(huán)體4.4.1while語句當(dāng)型§4-4循環(huán)語句0非§4-4循環(huán)語句計(jì)算1+2+3+……+100的值main(){intsum=0,i=1;while(i<=100)sum+=i++;/*{sum+=i;i++;}*/printf(“sumof1-100is:%d\n”,sum);}求個(gè)位數(shù)為6且能被3整除的5位數(shù)共有多少個(gè)?main(){inti=0;longm=10006;while(m<=99996l){if(m%3==0)/*if((m/3)*3==m)*/i++;m+=10;}printf(“Itis%d\n”,i);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值§4-4循環(huán)語句求出200~800之間所有既能被7又能被11整除的整數(shù)main(){inti=0,m=200;while(m<=800){if(m%7==0&&m%11==0){printf(“%5d”,m);i++;if(i%10==0)printf(“\n”);}m++;}}§4-4循環(huán)語句求出200~800之間所有既能被7又能被4.4.2dowhile語句格式: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.2dowhile語句§4-4循環(huán)語句0非0表§4-4循環(huán)語句計(jì)算1+2+3+……+100的值main(){intsum=0,i=1;do{sum+=i;i++;}while(i<=100);printf(“sumof1-100is:%d\n”,sum);}某數(shù)用3除余2,用5余3,用7余2)main(){inti=0;do{i++;}while(!(i%3==2&&i%5==3&&i%7==2));/*}while(i%3!=2||i%5!=3||i%7!=2));*/printf(“%d\n”,i);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值
4.4.3for語句
格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體;執(zhí)行順序:(1)執(zhí)行表達(dá)式1(2)判斷表達(dá)式2,如果表達(dá)式2成立,則執(zhí)行循環(huán)體,如果表達(dá)式2不成立,則執(zhí)行(4)(3)再執(zhí)行表達(dá)式3,然后回到(2)(4)………說明:表達(dá)式均可省略,分號不能省略for(;;)表達(dá)式1和3可為逗號表達(dá)式for(i=0,j=100;i<j;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.3for語句§4-4循環(huán)語句0非0表達(dá)式1§4-4循環(huán)語句計(jì)算1+2+3+……+100的值eg.main(){intsum=0,i;for(i=1;i<=100;i++)sum+=i;printf(“sumof1-100is:%d\n”,sum);}§4-4循環(huán)語句計(jì)算1+2+3+……+100的值§4-4循環(huán)語句4.4.4循環(huán)的嵌套多重循環(huán)在C語言中,當(dāng)一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)有另一個(gè)循環(huán)結(jié)構(gòu)時(shí),稱為多重循環(huán)或循環(huán)嵌套,前面介紹的三種循環(huán)結(jié)構(gòu)可以相互嵌套。當(dāng)一個(gè)循環(huán)的循環(huán)體僅是另一個(gè)單一的循環(huán)結(jié)構(gòu)時(shí),外層循環(huán)不需要使用大括號包圍它的循環(huán)體。打印乘法口訣表for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf(“%5d”,i*j);printf(“\n”);}12345678924681012141618369121518212427481216202428323651015202530354045612182430364248547142128354249566381624324048566472918273645546372811243694812165101520256121824303671421283542498162432404856649182736455463728112345678946810121416189121518212427162024283236253035404536424854495663647281§4-4循環(huán)語句4.4.4循環(huán)的嵌套多重循環(huán)打印乘§4-5輔助控制語句4.5.1break語句功能:中斷循環(huán)過程,退出循環(huán)體從包含它的switch退出說明:強(qiáng)行退出僅退出一層循環(huán)或一層switch4.5.2continue語句功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一次循環(huán)§4-5輔助控制語句4.5.1break語句§4-5輔助控制語句跳過負(fù)元素,求為正元素之和main(){intn,sum=0;while(1){scanf(“%d”,&n);if(n==0)break;if(n<0)continue;sum+=n;}printf("sum=%d\n",sum)}§4-5輔助控制語句跳過負(fù)元素,求為正元素之和§4-5輔助控制語句4.5.3轉(zhuǎn)向語句goto格式:goto標(biāo)號;error:......for(){if()gotoerror;}.......goto破壞結(jié)構(gòu)化,不用!4.5.4返回語句return格式:return值;return(值);§4-5輔助控制語句4.5.3轉(zhuǎn)向語句goto§4-6習(xí)題簡單應(yīng)用見書(譚)例題枚舉法求最小公倍數(shù)找出100~999之間的所有水仙花數(shù),各位立方和=本身(153等)百錢買百雞、百馬運(yùn)百貨
求素?cái)?shù)
編程序找出1000之內(nèi)的所有完數(shù),一個(gè)數(shù)恰好等于其因子之和如6=1+2+3§4-6習(xí)題簡單應(yīng)用見書(譚)例題§4-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+……+aa……aaa=2,n=72+22+222+2222+22222+222222+2222222其它猴子吃桃珠穆朗瑪峰皮球落地§4-6習(xí)題遞推法最小公倍、最大公約main(){inta,b,bei;printf("Pleaseentertwointegers:");scanf("%d%d",&a,&b);if(a<b){bei=a;a=b;b=bei;}bei=a;while(bei%b!=0)bei+=a;printf(“\n最小公倍數(shù)為:%d\n",bei);}main(){inta,b,bei,chu,yu;printf("Pleaseentertwointegers:");scanf("%d%d",&a,&b);if(a>b){bei=a;chu=b;}else{bei=b;chu=a;}while((yu=b
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB51T 1526-2012 茶葉加工機(jī)械使用安全通 用要求
- 輪邊減速器生產(chǎn)加工項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國銀光境項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國液化石油氣鋼瓶項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國超市管理系統(tǒng)行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國污泥處理處置項(xiàng)目風(fēng)險(xiǎn)評估報(bào)告
- 2024-2030年撰寫:中國托尼達(dá)唑行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國大型封頭項(xiàng)目風(fēng)險(xiǎn)評估報(bào)告
- 2024-2030年異色瞞搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年威太公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 教你成為歌唱高手智慧樹知到期末考試答案2024年
- 新產(chǎn)品導(dǎo)入量產(chǎn)作業(yè)流程(NPI)
- 土壤分析技術(shù)規(guī)范(第二版)
- 大學(xué)生個(gè)人求職簡歷封面 (82)應(yīng)聘投稿找工作履歷表封面
- 《鐵匠波爾卡》——編創(chuàng)與活動
- T∕CAME 1-2019 家庭式產(chǎn)房建設(shè)標(biāo)準(zhǔn)
- 江淮4DC1發(fā)動機(jī)檢測報(bào)告
- 傷情評估和戰(zhàn)場傷員分類(江)
- ABC法則新培訓(xùn)課件PPT課件
- 老年人心力衰竭的管理
- 醫(yī)療環(huán)境表面清潔與消毒PPT課件
評論
0/150
提交評論