C語(yǔ)言-6循環(huán)控制_第1頁(yè)
C語(yǔ)言-6循環(huán)控制_第2頁(yè)
C語(yǔ)言-6循環(huán)控制_第3頁(yè)
C語(yǔ)言-6循環(huán)控制_第4頁(yè)
C語(yǔ)言-6循環(huán)控制_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第六章循環(huán)控制6.1 概述6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)6.3 while語(yǔ)句和do-while語(yǔ)句6.4 for語(yǔ)句6.5 循環(huán)的嵌套6.6 break和continue語(yǔ)句C語(yǔ)言-6循環(huán)控制6.1

循環(huán)控制概述

循環(huán)結(jié)構(gòu)的特點(diǎn):在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。C語(yǔ)言提供的循環(huán)結(jié)構(gòu)類型如下:1)用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán);2)用while語(yǔ)句;3)用do-while語(yǔ)句;4)用for語(yǔ)句;循環(huán)條件循環(huán)體C語(yǔ)言-6循環(huán)控制6.2goto

語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)6.2.1形式:

goto語(yǔ)句標(biāo)號(hào);

6.2.2功能:一進(jìn)入執(zhí)行g(shù)oto語(yǔ)句、立即轉(zhuǎn)向去執(zhí)行其后面標(biāo)號(hào)所指示的語(yǔ)句

……gotojump;loop:

語(yǔ)句1語(yǔ)句1語(yǔ)句2語(yǔ)句2………語(yǔ)句n語(yǔ)句njump:

語(yǔ)句n+1gotoloop;

……

用標(biāo)識(shí)符表示分號(hào)冒號(hào)冒號(hào)C語(yǔ)言-6循環(huán)控制6.2.3注意:結(jié)構(gòu)化程序設(shè)計(jì)方法主張限制使用goto語(yǔ)句,一般只在下面兩種結(jié)構(gòu)中表示循環(huán)一、loop:if(表達(dá)式){語(yǔ)句

gotoloop;

}表達(dá)式值為零時(shí),立即停止循環(huán)二、loop:語(yǔ)句if(!表達(dá)式)gotoloop;表達(dá)式值非零時(shí),立即停止循環(huán)

語(yǔ)句當(dāng)表達(dá)式值非零語(yǔ)句直到表達(dá)式值為零C語(yǔ)言-6循環(huán)控制例:用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán)。例用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán)。voidmain(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf("%d\n",sum);}運(yùn)行結(jié)果:5050i=101C語(yǔ)言-6循環(huán)控制形式:while(表達(dá)式)

語(yǔ)句

表達(dá)式值為零時(shí),立即停止循環(huán)

形式:do語(yǔ)句

while(表達(dá)式);表達(dá)式值為零時(shí),立即停止循環(huán),至少執(zhí)行一次循環(huán)語(yǔ)句語(yǔ)句當(dāng)表達(dá)式值非零語(yǔ)句直到表達(dá)式值為零6.3

while和dowhile語(yǔ)句分號(hào)C語(yǔ)言-6循環(huán)控制while(表達(dá)式)do語(yǔ)句while(表達(dá)式)

;C語(yǔ)言-6循環(huán)控制例1.寫出下面程序的運(yùn)行結(jié)果

(1)voidmain(){inti=1;while(i<=3)

{printf(”%d\n”,i);i++;}

}(2)voidmain(){inti=1;while(i<=3);

{printf(”%d\n”,i);i++;}}結(jié)果123

結(jié)果死循環(huán)循環(huán)體空語(yǔ)句注意:若把上面{

、}

去掉也死循環(huán)復(fù)合語(yǔ)句作為循環(huán)體語(yǔ)句C語(yǔ)言-6循環(huán)控制(3)voidmain(){intk=1,n=1,sum=0;do{

sum+=n;n++;if(sum>=10)k=0;

}

while(k==1);printf(”sum=%d\n”,sum);}改為while(k=1)死循環(huán)sumn0112336410結(jié)果:sum=10C語(yǔ)言-6循環(huán)控制例2用while語(yǔ)句和do-while語(yǔ)句求

傳統(tǒng)流程圖表示算法

不成立成立成立不成立C語(yǔ)言-6循環(huán)控制N-S圖表示算法

>100>100C語(yǔ)言-6循環(huán)控制voidmain(){inti,sum=0;i=1;運(yùn)行結(jié)果:5050while(i<=100){sum+=i;i++;}printf("%d\n",sum);}void

main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("%d\n",sum);}注意:i和sum的初值i的終值C語(yǔ)言-6循環(huán)控制例3統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(shù)。#include<stdio.h>voidmain(){intn=0;printf("inputastring:\n");while(getchar()!='\n')n++;printf("%d",n);}只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)。輸入:ascdf↙輸出:5C語(yǔ)言-6循環(huán)控制例4.計(jì)算p=1×2×3×······×nvoidmain(){inti,n;longp;scanf(”%d”,&n);

i=1;p=1;while(i<=n){p*=i;i++;}printf(”p=%ld\n”,p);}

不用long會(huì)溢出重復(fù)到n次,也可以寫成i<n+1C語(yǔ)言-6循環(huán)控制例5.計(jì)算s=1!+2!+3!+······+n!(n>0)voidmain(){inti,n;longs,t;scanf(”%d”,&n);

i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i<=n);printf(”s=%ld\n”,s);}

保證達(dá)到計(jì)算n次

t=1×1×2×3×…S=1+1×2+1×2×3+…C語(yǔ)言-6循環(huán)控制例6.計(jì)算下面二十個(gè)數(shù)的和:13.8、-65、68.9、······、342.987voidmain(){int

i=1;floatx,sum=0;while(i<=20){scanf(”%f”,&x);sum+=x;i++;}printf(”sum=%f\n”,sum);}注:執(zhí)行程序時(shí)輸入

13.8–6568.9······342.987↙

i<=40i+=2C語(yǔ)言-6循環(huán)控制while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,也可以是其它表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。例7.voidmain(){inta=0,n;printf(“\ninputn:”);scanf("%d",&n);while(n--)printf("%d",a++*2);}執(zhí)行n次,每執(zhí)行1次,n減1。(a*2;a++)等價(jià)于輸入:8輸出:02468101214C語(yǔ)言-6循環(huán)控制例8.while和do-while循環(huán)比較。voidmain(){intsum=0,i;scanf(“%d”,&i);while(i<=10){sum=sum+i;i++;}printf(“sum=%d”,sum);}do{sum=sum+i;i++;}while(i<=10);輸入:8sumi088917102711輸入:11sum=0sum=11C語(yǔ)言-6循環(huán)控制6.4

for語(yǔ)句——代替while語(yǔ)句6.4.1形式:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句要正確表達(dá)循環(huán)結(jié)構(gòu)應(yīng)注意三方面要求:1、循環(huán)控制變量的初始化。2、循環(huán)的條件。3、循環(huán)控制變量的值的更新for語(yǔ)句在書(shū)寫形式上集中體現(xiàn)了這三方面要求C語(yǔ)言-6循環(huán)控制6.4.2功能for語(yǔ)句完全可以取代while語(yǔ)句。

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句它的執(zhí)行過(guò)程如下:1)先求解表達(dá)式1。2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行第3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。3)求解表達(dá)式3。4)轉(zhuǎn)回第2)步繼續(xù)執(zhí)行。5)循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。C語(yǔ)言-6循環(huán)控制(用for語(yǔ)句改寫前面的例2、例4、例5、例7)計(jì)算表達(dá)式3語(yǔ)句當(dāng)表達(dá)式2值非零計(jì)算表達(dá)式1C語(yǔ)言-6循環(huán)控制例2′、求voidmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("%d\n",sum);}voidmain(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d\n",sum);}C語(yǔ)言-6循環(huán)控制例4′.計(jì)算p=1×2×3×······×nvoidmain(){inti,n;longp;scanf(”%d”,&n);

i=1;p=1;while(i<=n){p*=i;i++;}printf(”p=%ld\n”,p);}

for(i=1,p=1;i<=n;i++)P*=i;中間用逗號(hào)for(i=1,p=1;i<=n;P*=i,i++)

C語(yǔ)言-6循環(huán)控制例5′

.計(jì)算s=1!+2!+3!+······+n!(n>0)voidmain(){inti,n;longs,t;scanf(”%d”,&n);

i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i<=n);printf(”s=%ld\n”,s);}

for(i=1,

t=1,

s=0;i<=n;i++){t*=i;s+=t;}C語(yǔ)言-6循環(huán)控制例7′.計(jì)算下面二十個(gè)數(shù)的和:13.8、-65、68.9、······、342.987voidmain(){int

i=1;floatx,sum=0;while(i<=20){

scanf(”%f”,&x);sum+=x;

i++;}printf(”sum=%f\n”,sum);}for(i=1;i<=20;i++)

{scanf(”%f”,&x);sum+=x;}C語(yǔ)言-6循環(huán)控制

for語(yǔ)句形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)語(yǔ)句

總是一個(gè)賦值語(yǔ)句,

它用來(lái)給循環(huán)控制變量賦初值總是一個(gè)表達(dá)式,它用來(lái)判別循環(huán)是否終止定義循環(huán)控制變量每循環(huán)一次后按什么方式變化這三個(gè)部分之間用“;”分開(kāi)C語(yǔ)言-6循環(huán)控制對(duì)于for循環(huán)中語(yǔ)句的一般形式,

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句就是如下的while循環(huán)形式:

表達(dá)式1;

while(表達(dá)式2)

{語(yǔ)句表達(dá)式3;}C語(yǔ)言-6循環(huán)控制例1.寫出下面程序的輸出結(jié)果#include<stdio.h>voidmain(){charc;for(;(c=getchar())-’#’;)putchar(c);}c為’#’,值為0,結(jié)束可以是任意表達(dá)式輸入:

a56*3h#hj$↙輸出:

a56*3hC語(yǔ)言-6循環(huán)控制例2.下面程序的輸出結(jié)果是[]voidmain(){intx=10,y=10,i;

for(i=0;x>8;y=++i)printf(”%3d%3d”,x--,y);}A.10192B.9876C.101091D.10990表達(dá)式1只做一次xy1010918C2C語(yǔ)言-6循環(huán)控制注意:1)for循環(huán)中的“表達(dá)式1”、“表達(dá)式2(循環(huán)條件)”和“表達(dá)式3”

可以缺省,但“;”不能缺省。2)省略了“表達(dá)式1”,表示不對(duì)循環(huán)控制變量賦初值,可在for循環(huán)里面或外面對(duì)其賦初值。例如:i=1;

for(;i=20;i++)

{scanf(”%f”,&x);sum+=x;}3)省略“表達(dá)式2”,則不做其它處理時(shí)成為死循環(huán)。例如:for(i=1;;i++)sum=sum+i;相當(dāng)于:i=1; while(1) {sum=sum+i; i++;}C語(yǔ)言-6循環(huán)控制4)省略了“表達(dá)式3(循環(huán)變量增量)”,則不對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語(yǔ)句體中加入修改循環(huán)控制變量的語(yǔ)句。例如:

for(i=1;i<=100;){sum=sum+i;i++;}C語(yǔ)言-6循環(huán)控制5)省略了“表達(dá)式1”和“表達(dá)式3”。例如:for(;i<=100;){sum=sum+i;i++;}相當(dāng)于:

while(i<=100) {sum=sum+i; i++;}C語(yǔ)言-6循環(huán)控制6)3個(gè)表達(dá)式都可以省略。例如:for(;;)語(yǔ)句相當(dāng)于:while(1)語(yǔ)句7)表達(dá)式1可以是設(shè)置循環(huán)變量的初值的賦值表達(dá)式,也可以是其他表達(dá)式。例如:for(sum=0;i<=100;i++)sum=sum+i;C語(yǔ)言-6循環(huán)控制8)表達(dá)式1和表達(dá)式3可以是一個(gè)簡(jiǎn)單表達(dá)式也可以是逗號(hào)表達(dá)式。

for(sum=0,i=1;i<=100;i++)sum=sum+i;

或:

for(i=0,j=100;i<=100;i++,j--)k=i+j;9)表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可是數(shù)值表達(dá)式或字符表達(dá)式,只要其值非零,就執(zhí)行循環(huán)體。例如:

for(i=0;(c=getchar())!=’\n’;i+=c);又如:

for(;(c=getchar())!=’\n’;) printf(“%c”,c);C語(yǔ)言-6循環(huán)控制6.5循環(huán)的嵌套1、各種循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含任一種完整的循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu),2、選擇結(jié)構(gòu)的任一分支中也可以包含任一種完整的循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu),3、且它們可多層嵌套。

C語(yǔ)言-6循環(huán)控制例1.while(x>y+z){…for(k=1;k<2;k++){

if

(a<5)w=1;

elseif(a==5)

{…switch結(jié)構(gòu)

…}

else

{for(s=0,n=0;n<3;n++)s+=n;}…

}…}

C語(yǔ)言-6循環(huán)控制6.6

break語(yǔ)句和continue語(yǔ)句switch結(jié)構(gòu)中的break:提前結(jié)束該結(jié)構(gòu)循環(huán)結(jié)構(gòu)中的break:提前結(jié)束該結(jié)構(gòu)(while循環(huán)、do-while循環(huán)、for循環(huán))循環(huán)結(jié)構(gòu)中的continue:提前結(jié)束本次循環(huán)

若在多層嵌套中使用break或continue,它只影響包含它的最內(nèi)層結(jié)構(gòu)C語(yǔ)言-6循環(huán)控制C語(yǔ)言-6循環(huán)控制例1.寫出以下程序的運(yùn)行結(jié)果:voidmain(){intn;for(n=1;n<=10;n++){if(n%3==0)break;printf(“%4d”,n);}printf(“!!!!!\n”);}voidmain(){intn;for(n=1;n<=10;n++){if(n%3==0)cotinue;printf(“%4d”,n);}printf(“!!!!!\n”);}結(jié)果:12!!!!!

結(jié)果:12457810!!!!!C語(yǔ)言-6循環(huán)控制例2.把100~200之間的不能被3整除的數(shù)輸出。#include<math.h>voidmain(){int

n;for(n=100;n<=200;n++)

{if(n%3==0)

continue;printf(”%d”,n);

}

printf(”\n”);}能被3整除,則進(jìn)行下一次循環(huán)C語(yǔ)言-6循環(huán)控制例3.計(jì)算下面若干個(gè)數(shù)的和:13.8、-65、68.9、······、342.987,并統(tǒng)計(jì)個(gè)數(shù)(個(gè)數(shù)≤100)#include<math.h>voidmain(){int

i=1;floatx,sum=0;while(i<=100){scanf(”%f”,&x);

if(fabs(x-1e36)<0.0001)break;sum+=x;i++;}printf(”sum=%f,count=%d\n”,sum,

);}注:執(zhí)行程序時(shí)輸入

13.8–6568.9·····342.987

1e36

求絕對(duì)值,理論上相等,實(shí)際上有誤差位置不能錯(cuò)i-1C語(yǔ)言-6循環(huán)控制例4.voidmain(){intk,j,x=0;

for(k=1;k<=4;k++){x++;

if(k%3==0)break;

for(j=k;j<=5;j++)x++;

x++;

}

printf(”%d\n”,x);}

結(jié)果?14kjx1112233445567282931041151213314

C語(yǔ)言-6循環(huán)控制程序舉例C語(yǔ)言-6循環(huán)控制例1:輸出10——1000中所有十位數(shù)為3的數(shù)

void

main(){inti;for(i=10;i<=1000;i++)if(i/10%10==3)printf(“%5d”,i);}如:i=1234i/10=123整數(shù)123%10=3{if(i/10%10<>3)continue;printf(“%5d”,i);}C語(yǔ)言-6循環(huán)控制例2:voidmain(){intk;for(k=2;k<=10;k+=3)printf(”%4d”,k);printf(”%4d”,k);}運(yùn)行結(jié)果:25811

C語(yǔ)言-6循環(huán)控制例3:voidmain(){intk,j=99;for(k=1;k<=2;k++){printf(”(1)%d,5d\n”,k,j);for(j=5;j<=7;j++)printf(”(2)%d,5d\n”,k,j);printf(”(3)%d,5d\n”,k,j);}

printf(”(4)%d,5d\n”,k,j);}

第一遍kj(1)199(2)15(2)16(2)17(3)18第二遍kj(1)28(2)25(2)26(2)27(3)28(4)38C語(yǔ)言-6循環(huán)控制例4:voidmain(){inti,j,k;printf("ijk\n");

for(i=0;i<2;i++)

for(j=0;j<2;j++)for(k=0;k<2;k++)printf(“%d%d%d\n",i,j,k);}ijk000001010011100101110111121212C語(yǔ)言-6循環(huán)控制例5:輸出100——200中所有素?cái)?shù)m是素?cái)?shù):m不被2、3、4、······、m-1中任一個(gè)整除結(jié)果:101103107109113127131137139149151157163173173179181191193197199

C語(yǔ)言-6循環(huán)控制執(zhí)行m=11;m=15;k=m-1;k=m-1;for(i=2;i<=k;i++)for(i=2;i<=k;i++)if(m%i==0)break;if(m%i==0)break;后i與k的大小關(guān)系i>ki<=kk=10,i=11k=3i=3kim%i321………1011i>k結(jié)束for循環(huán)kim%i32130m%i==0breakC語(yǔ)言-6循環(huán)控制voidmain(){intm,i,k;for(m=100;m<=200;m++){k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i<=k)printf(“%disnotaprimenumber\n”,m);elseprintf(“%disaprimenumber\n”,m);}}

只要有一個(gè)整除,后面無(wú)需判斷,強(qiáng)迫循環(huán)結(jié)束此時(shí)i<=k循環(huán)正常結(jié)束,i>k說(shuō)明都不能整除C語(yǔ)言-6循環(huán)控制改為輸入一個(gè)數(shù),判斷是否為素?cái)?shù).m-1C語(yǔ)言-6循環(huán)控制#include<math.h>voidmain(){intm,i,k;scanf(“%d”,&m);k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k)printf(“%disaprimenumber\n”,m);elseprintf(“%disnotaprimenumber\n”,m);}輸入:3輸入:6C語(yǔ)言-6循環(huán)控制例6:輸出所有由1、2、3組成的三位數(shù)111211311112212312113213313121221321122222322123223323131231331132231332133233333C語(yǔ)言-6循環(huán)控制voidmain(){inti,j,k;for(i=1;i<=3;i++)for(j=1;j<=3;j++)for(k=1;k<=3;k++)printf(“%d%d%d,”,i,j,k);}%d%d%d沒(méi)有空格和逗號(hào)起分隔符作用ijk11111211312112212313113213321112…C語(yǔ)言-6循環(huán)控制上面改為不出現(xiàn)重復(fù)數(shù)字的三位數(shù)

voidmain(){inti,j,k;for(i=1;i<=3;i++)for(j=1;j<=3;j++)for(k=1;k<=3;k++)

if(i!=j&&j!=k&&k!=i)print(“%d%d%d”,i,j,k);}C語(yǔ)言-6循環(huán)控制上面改為不出現(xiàn)重復(fù)字母的由X、Y、Z組成的三個(gè)子符的字符串

voidmain(){inti,j,k;for(i=‘X’;i<=‘Z’;i++)for(j=‘X’;j<=‘Z’;j++)for(k=‘X’;k<=‘Z’;k++)if(i!=j&&j!=k&&k!=i)print(“%c%c%c”,i,j,k);}與int一樣C語(yǔ)言-6循環(huán)控制例7:P1216.15voidmain()甲隊(duì)乙隊(duì){inti,j,k;X

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論