計(jì)算機(jī)應(yīng)用技術(shù)c程序設(shè)計(jì)語(yǔ)言課件5loop_第1頁(yè)
計(jì)算機(jī)應(yīng)用技術(shù)c程序設(shè)計(jì)語(yǔ)言課件5loop_第2頁(yè)
計(jì)算機(jī)應(yīng)用技術(shù)c程序設(shè)計(jì)語(yǔ)言課件5loop_第3頁(yè)
計(jì)算機(jī)應(yīng)用技術(shù)c程序設(shè)計(jì)語(yǔ)言課件5loop_第4頁(yè)
計(jì)算機(jī)應(yīng)用技術(shù)c程序設(shè)計(jì)語(yǔ)言課件5loop_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán):同一程序段重復(fù)執(zhí)行若干次實(shí)現(xiàn)循環(huán)的語(yǔ)句:goto,if,while,do~while,for

5.0goto語(yǔ)句及其構(gòu)成的循環(huán)一般形式:goto語(yǔ)句標(biāo)號(hào)

說(shuō)明:(1)goto語(yǔ)句使控制無(wú)條件轉(zhuǎn)移到標(biāo)號(hào)所指定的語(yǔ)句處開(kāi)始往下執(zhí)行;(2)語(yǔ)句標(biāo)號(hào)必須是標(biāo)識(shí)符而不是常量。如:gotoabc合法,而goto35則非法;(3)與循環(huán)語(yǔ)句配合使用時(shí),可從循環(huán)體內(nèi)跳到循環(huán)體外,而不能從循環(huán)體外跳到循環(huán)體內(nèi);(4)goto語(yǔ)句轉(zhuǎn)移的方向可前可后;(5)與if語(yǔ)句配合使用時(shí)可構(gòu)成循環(huán)例:輸出0,1,2#include<stdio.h>voidmain(){ inti; i=0;LP: printf("i=%d\n",i); i++; if(i<3)gotoLP;}i=0;i++;i<3輸出iNoYes例:輸出0,1,2#include<stdio.h>voidmain(){ inti; i=0;LP:if(i<3){ printf("i=%d\n",i); i++; gotoLP; }}i=0;i++;i<3輸出iYesNo例求#include<stdio.h>voidmain(){ inti=1,sum=0;loop:if(i<=100){ sum=sum+i; i++;gotoloop; } printf("sum=%d\n",sum);}運(yùn)行結(jié)果:sum=5050i=1;sum=0i++;i<=100輸出sumYesNosum=sum+i5.1C語(yǔ)言的循環(huán)語(yǔ)句5.1.1for語(yǔ)句for語(yǔ)句是使用最為靈活的一種循環(huán)語(yǔ)句形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句

表達(dá)式1:循環(huán)變量賦初值(只執(zhí)行一次)

表達(dá)式2:循環(huán)判斷條件,為真時(shí)繼續(xù)

循環(huán),為假時(shí),結(jié)束循環(huán);表達(dá)式3:循環(huán)變量的增量。執(zhí)行過(guò)程,請(qǐng)見(jiàn)右圖:計(jì)算表達(dá)式1表達(dá)式2語(yǔ)句計(jì)算表達(dá)式3for語(yǔ)句的下一語(yǔ)句假真

例:輸出0,1,2#include<stdio.h>voidmain(){ inti; for(i=0;i<3;i++) printf("i=%d\n",i);}i=0;i++;i<3輸出iYesNo例求#include<stdio.h>main(){ inti,sum=0; for(i=1;i<=100;i++) sum=sum+i; printf("sum=%d\n",sum);}運(yùn)行結(jié)果:sum=5050i=1;i++;i<=100輸出sumYesNosum=sum+isum=0幾點(diǎn)說(shuō)明:1.省表達(dá)式1,此前要對(duì)循環(huán)變量置初值,但“;”不能省

如:i=1;s=0;for(;i<=100;i++)s=s+i;2.省表達(dá)式2,被作為真處理,循環(huán)無(wú)終止如:for(i=1;;i++)s=s+i;3.省表達(dá)式3,要在循環(huán)體內(nèi)有使循環(huán)變量增量的語(yǔ)句如:for(i=1;i<=100;){s=s+i;i++;}4.省表達(dá)式1

和3

,使循環(huán)變量有初值,能使循環(huán)變量增量如:i=1;s=0;for(;i<=100;){s=s+i;i++;}5.省表達(dá)式1,2,3,如:for(;;)則相當(dāng)于:while(1)循環(huán)無(wú)終止。6.各表達(dá)式可與循環(huán)變量聯(lián)系起來(lái),也可無(wú)關(guān);7.各表達(dá)式可以是逗號(hào)表達(dá)式

如:for(s=0,i=1;i<=100;i++)s=s+i;for(i=0,j=100;i<j;i++,j--)k=k+i+j;8.表達(dá)式2可以是關(guān)系、邏輯、算術(shù)、字符表達(dá)式,非0時(shí),執(zhí)行循環(huán)體,為0時(shí)退出循環(huán)。例#include<stdio.h>main(){ inti;charc; for(i=0;(c=getchar())!='\n';i+=c) printf("i=%d\n",i);}輸入:abcd

注:從終端鍵盤(pán)向計(jì)算機(jī)輸入字符時(shí),在輸入回車(chē)后才把輸入的一串字符送到內(nèi)存緩沖區(qū)中的,此例中,表達(dá)式3的增量與表達(dá)式2的結(jié)束條件無(wú)關(guān).

ci=i+c輸出970+97=97i=09897+98=195i=9799195+99=294i=195100294+100=394i=294

輸出:i=0i=97i=195i=2945.1.2while語(yǔ)句形式:while(表達(dá)式)語(yǔ)句

真: 執(zhí)行語(yǔ)句(一個(gè)語(yǔ)句,需要多句時(shí)用復(fù)合語(yǔ)句)計(jì)算表達(dá)式

假: 退出循環(huán)sum=sum+ii=i+1i=1;sum=0i≤100假真i=1;sum=0當(dāng)i≤100

sum=sum+ii=i+1例:求傳統(tǒng)流程圖和N-S結(jié)構(gòu)流程圖如下:例求

main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf(“sum=%d\n”,sum);}問(wèn)題的提出:(1)什么情況下循環(huán)體一句也不執(zhí)行?(2)什么情況下出現(xiàn)死循環(huán)(3)哪一句使循環(huán)趨于結(jié)束運(yùn)行結(jié)果:sum=50505.1.3do~while語(yǔ)句形式:do語(yǔ)句

while(表達(dá)式);

操作:先執(zhí)行語(yǔ)句,再計(jì)算表達(dá)式,為真時(shí),繼續(xù)執(zhí)行語(yǔ)句,為假時(shí),退出循環(huán)。例:求傳統(tǒng)流程圖和N-S結(jié)構(gòu)流程圖如下:i=1,sum=0sum=sum+ii=i+1i≤100真假i=1,sum=0sum=sum+ii=i+1

直到i>100例求

main(){ inti=1;sum=0; do{ sum=sum+i; i++; } while(i<=100); printf(“sum=%d\n”,sum);}運(yùn)行結(jié)果:sum=5050例while和do~while兩種循環(huán)的比較main(){ intsum=0,i; scanf(“%d”,&i); while(i<=10){ sum=sum+i; i++; } printf(“sum=%d\n”,sum);}結(jié)論:(1)當(dāng)條件表達(dá)式第一次為真時(shí),兩種循環(huán)得到的結(jié)果相同.(2)當(dāng)條件表達(dá)式一開(kāi)始為假時(shí),兩種循環(huán)結(jié)果是不同的.輸入:11011

輸出:sum=55sum=10sum=0例while和do~while兩種循環(huán)的比較(續(xù))main(){ intsum=0,i; scanf(“%d”,&i); do{ sum=sum+i; i++; } while(i<=10); printf(“sum=%d\n”,sum);}輸入:11011輸出:sum=55sum=10sum=11說(shuō)明:(1)while后的表達(dá)式第一次為真時(shí),兩種循環(huán)結(jié)果相同(2)while后的表達(dá)式第一次為假時(shí),兩種循環(huán)結(jié)果不相同(3)死循環(huán):while(表達(dá)式)當(dāng)表達(dá)式的值恒為非0值,如:0.2-5.5-100345.67(4)do后面若干語(yǔ)句是整體,必須用{}括起5.1.4循環(huán)語(yǔ)句的使用例計(jì)算1+3+5+…,其20項(xiàng)之和。例輸出x和n,計(jì)算xn。例計(jì)算Fibonacci序列:1,1,2,3,8,…的前20項(xiàng)

fn+1=fn+fn-1例利用格里高利公式pi/4=1-1/3+1/5-1/7…,計(jì)算pi。例輸入一行字符(getchar),輸出其中的英文字母,并統(tǒng)計(jì)大寫(xiě)與小寫(xiě)字母的個(gè)數(shù)例求Finonacci數(shù)列:1,1,2,3,5,8,13,的前20個(gè)數(shù),即main(){ longf1,f2;inti; f1=1; f2=1; for(i=1;i<=10;i++){ printf("%12ld%12ld",f1,f2); if(i%2==0)printf(“\n”); f1=f1+f2;f2=f2+f1; }}if1=f1+f2f2=f2+f11f1=1+1=2f2=1+2=32f1=2+3=5f2=3+5=83f1=5+8=13f2=8+13=214f1=13+21=34f2=21+34=555f1=34+55=89f2=55+89=1446f1=89+144=233f2=144+233=377初值:f1=1f2=1

例計(jì)算pi#include“math.h”main(){ ints; floatn,t,pi; t=1;pi=0;n=1.0;s=1; while((fabs(t))>=1e-6) { pi=pi+t; n=n+2; s=-s; t=s/n; } pi=pi*4;printf(“pi=%10.6f\n”,pi);}運(yùn)行結(jié)果:pi=3.141397pi

0

1

1-1/3

1-1/3+1/5

1-1/3+1/5-1/7

1-1/3+1/5-1/7

+1/91-1/3+1/5-1/7

+1/9-1/11nst1113-1-1/3511/57-1-1/7911/911-1-1/111311/135.1.5for語(yǔ)句的形式變化(以計(jì)算為例)標(biāo)準(zhǔn)形式:sum=0;for(i=1;i<=100;i++) sum=sum+i;變化1(式1使用逗號(hào)):for(i=1,sum=0;i<=100;i++)

sum=sum+i;變化2(省略式1):i=1;sum=0;for(;i<=100;i++) sum=sum+i;變化5:for(i=1,sum=0;i<=100;(省略循環(huán)體)變化3(省略式3):i=1;sum=0;for(;i<=100;){ sum=sum+i; i++;}變化4(省略式2):i=1;sum=0;for(;;){ if(i>100)break; sum=sum+i; i++;}sum=sum+i,i++)

5.2break和continue語(yǔ)句5.2.1break語(yǔ)句一般形式:break;功能:結(jié)束循環(huán)語(yǔ)句,轉(zhuǎn)向循環(huán)語(yǔ)句的下一語(yǔ)句在多層循環(huán)結(jié)構(gòu)中,只跳出它所在循環(huán)層(跳出一層)本語(yǔ)句屬控制語(yǔ)句類(lèi),僅限用于while,do~while,for,switch

語(yǔ)句例:輸出0,1,2,...#include<stdio.h>voidmain(){ inti; for(i=0;i<10;i++){ printf("i=%d\n",i);if(i>=5)break;}}i=0;i++;i<10輸出iYesNoi5YesNo例已知半徑r,計(jì)算圓面積area

當(dāng)area>100時(shí)結(jié)束程序的運(yùn)行。#include<stdio.h>voidmain(){ intr; floatpi=3.14159,area; for(r=1;r<=10;r++){ area=pi*r*r; if(area>100)break; printf("r=%d,area=%5.2f\n",r,area); }}輸出:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.27r=5,area=78.85/*當(dāng)r=6時(shí),area=113.10故此值沒(méi)有被輸出*/5.2.2continue語(yǔ)句一般形式:continue;功能:提前結(jié)束循環(huán)體的本次執(zhí)行(跳過(guò)余下語(yǔ)句),

開(kāi)始循環(huán)體的下次執(zhí)行在while

和do~while中立即轉(zhuǎn)到表達(dá)式判斷。在for語(yǔ)句中,轉(zhuǎn)到表達(dá)式3進(jìn)行增量,再表達(dá)式2進(jìn)行判斷continue

也屬控制類(lèi)語(yǔ)句,只能出現(xiàn)在while,do~while,for循環(huán)語(yǔ)句中。例:輸出0,...#include<stdio.h>voidmain(){ inti; for(i=0;i<10;i++){if(i>=5)continue; printf("i=%d\n",i);}}i=0;i++;i<10輸出iYesNoi5YesNo例把100-120之間不能被3整除的數(shù)輸出。#include<stdio.h>voidmain(){ intn; for(n=100;n<=120;n++){ if(n%3==0){ printf(“\n”);continue; } printf(“%d,”,n); }}運(yùn)行結(jié)果:100,101,103,104,106,107,109,110,112,113,115,116,118,119,5.3循環(huán)的嵌套在C語(yǔ)言中,三種循環(huán)可以相互嵌套(1)while()(2)do(3)for(;;){┆{┆{┆while()dofor(;;){…}{...}while();{...}┆┆┆}}while();}(4)while()(5)for(;;)(6)do{┆{┆{┆dowhile()for(;;){...}while();{...}{...}┆┆┆}}}while();例:輸出4X3乘法表#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)for(j=1;j<=3;j++)printf("%d*%d=%d",i,j,i*j);}j=1;j++;j<=3輸出i*jYesNoi=1;i++;i<=4YesNo例計(jì)算3組1~4累加求和。main(){ inti,j,s=0; for(i=1;i<=3;i++) for(j=1;j<=4;j++) s=s+j; printf(“s=%d”,s);}123ijs=0111136211122132420312132233326343023161410結(jié)果:s=30經(jīng)典示例計(jì)算s=1!+2!+3!+…+n!思路1:二重循環(huán)思路2:?jiǎn)窝h(huán)5.4程序舉例例判m是否是素?cái)?shù)#include<math.h>main(){ intm,i,k; scanf(“%d”,&m); k=sqrt(m)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論