C語(yǔ)言循環(huán)控制_第1頁(yè)
C語(yǔ)言循環(huán)控制_第2頁(yè)
C語(yǔ)言循環(huán)控制_第3頁(yè)
C語(yǔ)言循環(huán)控制_第4頁(yè)
C語(yǔ)言循環(huán)控制_第5頁(yè)
已閱讀5頁(yè),還剩77頁(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)介

程序的結(jié)構(gòu):

順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)第6章循環(huán)結(jié)構(gòu)OUTLINE

C語(yǔ)言的三種循環(huán)語(yǔ)句

while語(yǔ)句

do…while語(yǔ)句

for語(yǔ)句

與循環(huán)語(yǔ)句相關(guān)的程序控制語(yǔ)句即:

break、continue、goto語(yǔ)句本章學(xué)習(xí)注意事項(xiàng)

各循環(huán)語(yǔ)句的執(zhí)行過(guò)程循環(huán)的初始條件循環(huán)何時(shí)終止,如何控制?if與goto構(gòu)成的循環(huán)請(qǐng)先看下面一段程序:main(){ints=0,i=1;

loop:if(i<100){s=s+i;i=i+1;

goto

loop;}

printf(“s=%d\n”,s);}loop:語(yǔ)句標(biāo)號(hào)goto

loop:無(wú)條件轉(zhuǎn)向語(yǔ)句if與goto構(gòu)成了循環(huán)

格式:

goto

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

功能:將程序控制轉(zhuǎn)移到“語(yǔ)句標(biāo)號(hào)”標(biāo)識(shí)的語(yǔ)句執(zhí)行。

無(wú)條件轉(zhuǎn)向語(yǔ)句:goto語(yǔ)句標(biāo)號(hào):

用標(biāo)識(shí)符表示

用來(lái)標(biāo)識(shí)語(yǔ)句,它出現(xiàn)在語(yǔ)句的前面,用冒號(hào)(:)與語(yǔ)句分開(kāi),使用格式為:

語(yǔ)句標(biāo)號(hào):語(yǔ)句;p1:printf(“hello!”);

printf(“world!”);

….

gotop1;2a:printf(“thisisabook!”);

goto2a;

×

語(yǔ)句標(biāo)號(hào)僅對(duì)goto語(yǔ)句有意義,通常只給goto語(yǔ)句要轉(zhuǎn)去的語(yǔ)句加標(biāo)號(hào)。

格式:

語(yǔ)句標(biāo)號(hào):if(表達(dá)式)

{語(yǔ)句;

goto

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

執(zhí)行過(guò)程:當(dāng)if中的表達(dá)式為真時(shí),執(zhí)行循環(huán)體,為假時(shí)跳出循環(huán),執(zhí)行循環(huán)體下面的語(yǔ)句。

用if和goto語(yǔ)句構(gòu)成循環(huán)循環(huán)體說(shuō)明:goto語(yǔ)句容易造成程序不清晰,不利于實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì),因此,最好不用在程序中使用它。while語(yǔ)句實(shí)現(xiàn)當(dāng)型循環(huán)

格式:

while(表達(dá)式)

{循環(huán)體;}

執(zhí)行過(guò)程:先求解表達(dá)式的值。判斷表達(dá)式的值,為真則執(zhí)行循環(huán)體。再判斷表達(dá)式的值,重復(fù)上述工作。當(dāng)表達(dá)式的

值為假時(shí)退出循環(huán)。

執(zhí)行過(guò)程用流程圖表示為:循環(huán)體表達(dá)式flasetrue

循環(huán)控制的實(shí)現(xiàn)。考察下列各例,總結(jié)控制循環(huán)執(zhí)行的方式。例6-1`、main(){

inti=1,sum=0;

while(i<=100){sum+=i;i++;}}i不僅參與運(yùn)算,還要控制循環(huán)。注意:循環(huán)體用{}括起來(lái);

初始值:i=1,sum=0;

循環(huán)條件:i<=100

循環(huán)控制:i++;循環(huán)控制方式之一:計(jì)數(shù)法這后面沒(méi)有分號(hào)將內(nèi)嵌語(yǔ)句用大括號(hào)括起來(lái)形成復(fù)合語(yǔ)句。#include<stdio.h>main(){charc;

c=getchar();

while(c!=‘\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}

c=getchar();}}例2while((c=getchar())!=‘\n’)表達(dá)更為簡(jiǎn)潔。循環(huán)控制方式之二:標(biāo)志法

只要滿(mǎn)足一定條件,需要多少次就運(yùn)行多少次。

初始值:無(wú);

循環(huán)條件:(c=getchar())!=‘\n’

循環(huán)控制:輸入的字符while((c=getchar())!=‘\n’)while(c=getchar()!=‘\n’)×#include<stdio.h>main(){charc;

while((c=getchar())!=‘\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}}Example6.1-Programmain()/*計(jì)算y=xn*/{

intcount,n; floatx,y;

printf("Enterthevaluesofxandn:");

scanf("%f%d",&x,&n); y=1.0; count=1; /*Initialization*/ /*LoopBegins*/ while(count<=n) /*Testing*/ { y=y*x; count++; /*Incrementing*/ } /*EndofLoop*/

printf("\nx=%f;n=%d;xtopowern=%f\n",x,n,y);}while循環(huán)控制語(yǔ)句:例例:編程計(jì)算1+2+22+23+...+264voidmain(){doublesum=0,p=1;

inti=1;

while(i<=64){sum+=p;p*=2;i++;}printf(“%.7le\n”,sum);

getch();}◆

1.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=0;while(n=0)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1課堂練習(xí):while語(yǔ)句答案:(A)◆

2.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=0;while(n==0)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1課堂練習(xí):while語(yǔ)句答案:(D)課堂練習(xí):while語(yǔ)句◆

3.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=1;while(n=1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(B)課堂練習(xí):while語(yǔ)句◆

4.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=1;while(n=n-1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(A)課堂練習(xí):while語(yǔ)句◆5.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=2;while(n=n-1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(B)◆6.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){

intnum=18,bin=0;

while(num){bin=num%2;num=num/2;

printf(“%d”,bin);}}課堂練習(xí):while語(yǔ)句答案:01001◆7.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){

intnum=123,sum=0;

while(num){sum=sum+num%10;num=num/10;}

printf(“sum=%d”,sum);}課堂練習(xí):while語(yǔ)句答案:sum=6dowhile循環(huán)直到型循環(huán)

格式:

do{循環(huán)體;}while(表達(dá)式);

執(zhí)行過(guò)程:先執(zhí)行循環(huán)體。再求解表達(dá)式的值,判斷,為真則執(zhí)行循環(huán)體,否則退出循環(huán)。

執(zhí)行過(guò)程用流程圖表示為:循環(huán)體語(yǔ)句表達(dá)式flasetrue例1_2main(){

inti=1,sum=0;do{sum+=i;i++;}while(i<=100);}采用的是什么循環(huán)結(jié)束控制方法?計(jì)數(shù)法

應(yīng)用例:main(){int

i,flag;i=0;flag=0;do{i++;if(i%3==2&&i%5==3&&i%7==2)flag=1;}while(flag!=1);

printf(“i=%d\n”,i);}

采用的是什么循環(huán)結(jié)束控制方法?標(biāo)志法調(diào)試下列程序,并指出是實(shí)現(xiàn)的什么功能。main(){intk,num;k=1;num=26;do{k*=num%10;num/=10;}while(num);printf("k=%d\n",k);}

while與do..while:

while:先判定表達(dá)式,后執(zhí)行循環(huán);

do…while:先執(zhí)行循環(huán),再判斷表達(dá)式;

即:do…while語(yǔ)句的循環(huán)體至少會(huì)被執(zhí)行一次。inti=0;while(i){…}inti=0;do{…}while(i);執(zhí)行0次執(zhí)行1次除循環(huán)體一次都不執(zhí)行的情況外,while與

do…while可以互相轉(zhuǎn)換。for語(yǔ)句步長(zhǎng)型循環(huán)

格式:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{循環(huán)體;}

執(zhí)行過(guò)程:執(zhí)行表達(dá)式1(初始化表達(dá)式);判斷表達(dá)式2,為真則執(zhí)行循環(huán)體,否則退出循環(huán);執(zhí)行表達(dá)式3(修正表達(dá)式);再判斷表達(dá)式2,…

重復(fù)上述過(guò)程,直到表達(dá)式2值為假。

執(zhí)行過(guò)程用流程圖表示為:求解表達(dá)式1表達(dá)式2flasetrue循環(huán)體語(yǔ)句求解表達(dá)式3for語(yǔ)句的下一語(yǔ)句for語(yǔ)句一般說(shuō)來(lái),for語(yǔ)句的格式可以理解為如下形式:for(初始化表達(dá)式;條件表達(dá)式;修正表達(dá)式)

{循環(huán)體語(yǔ)句}例如:求1——100的和

inti,sum=0;

for(i=1;i<=100;i++){sum=sum+i;}sum=sum+iTFi<=100i=1i++由for語(yǔ)句流程圖可以看出,可以有以下幾種省略形式:

表達(dá)式1省略,但不能省略分號(hào)。但給循環(huán)變量賦初值應(yīng)在for語(yǔ)句前完成。例如:

i=1;for(;i<=100;i++){…}

表達(dá)式3省略,但不能省略分號(hào)。但要將表達(dá)式3包含到循環(huán)體中。例如:

…for(i=1;i<=100;){…

i++;}

表達(dá)式1、3省略,但不能省略分號(hào)。但要將在for語(yǔ)句前賦初值,并將表達(dá)式3包含到循環(huán)體中。此時(shí)相當(dāng)于while循環(huán)。例如:

i=1;for(;i<=100;){…

i++;}

表達(dá)式2省略,但不能省略分號(hào)。但要在循環(huán)體中控制循環(huán)的結(jié)束。例如:

for(i=1;;i++){…

if(i>100)break;

…}

表達(dá)式1、2、3省略,但不能省略分號(hào)。但要在循環(huán)體中控制循環(huán)的結(jié)束。此時(shí),相當(dāng)于while(1)語(yǔ)句。例如:

i=1;for(;;){…

if(i>100)break;

i++;

…}

表達(dá)式1、3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式。如:

sum=0;for(i=1;i<100;i++)可以寫(xiě)為:

for(sum=0,i=1;i<100;i++)◆1.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){charch;

for(ch=‘A’;ch<‘G’;ch=ch+1){

printf(“%c”,ch);}}課堂練習(xí):for語(yǔ)句答案:ABCDEF◆2.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){charch=‘a(chǎn)’;intn;

for(n=1;n<=5;n=n+1){if(n%2==0)ch=ch+33;elsech=ch–32;

printf(“%c”,ch);}}課堂練習(xí):for語(yǔ)句答案:AbBcC◆3.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){

inta=2,i,sum=0,temp=0;for(i=1;i<=4;i=i+1){temp=temp*10+a;sum=sum+temp;}

printf(“sum=%d”,sum);}課堂練習(xí):for語(yǔ)句答案:sum=2468◆4.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){

inti,f1=1,f2=1,f3,sum=0;for(i=1;i<=4;i=i+1){f3=f1+f2;sum=sum+f3;f1=f2;f2=f3;}

printf(“sum=%d”,sum);}課堂練習(xí):for語(yǔ)句答案:sum=18◆5.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){

inti,f1=1,f2=1,sum=0;for(i=1;i<=3;i=i+1){sum=sum+f1+f2;f1=f1+f2;f2=f2+f1;}

printf(“sum=%d”,sum);}課堂練習(xí):for語(yǔ)句答案:sum=20break語(yǔ)句跳出循環(huán)體或switch結(jié)構(gòu)注意:只跳出本層次循環(huán)Example6.5Theprogramreadsalistofpositivevaluesandcalculatestheiraverage.main(){

intm; floatx,sum,average;

printf("Thisprogramcomputestheaverageofasetof numbers\n");

printf("Entervaluesoneafteranother\n");

printf("EnteraNEGATIVEnumberattheend.\n\n"); sum=0;

for(m=1;m<=1000;++m) {

scanf("%f",&x);

if(x<0)

break; sum+=x; } average=sum/(float)(m-1);

printf("\n");

printf("Numberofvalues=%d\n",m-1);

printf("Sum =%f\n",sum);

printf("Average =%f\n",average);}continue語(yǔ)句

格式:

continue;

功能:結(jié)束本次循環(huán),接著進(jìn)行下一次循環(huán)。Example6.7Theprogramevaluatesthesquarerootofaseriesofnumberandprintstheresults.Theprocessstopswhenthenumber9999istypedin.#include<math.h>main(){

intcount,negative; doublenumber,sqroot;

printf("Enter9999toSTOP\n"); count=0; negative=0;

while(count<=100) {

printf("Enteranumber:");

scanf("%lf",&number);

if(number==9999)

break; /*EXITFROMTHELOOP*/

if(number<0) {

printf("Numberisnegative\n\n"); negative++;

continue; /*SKIPRESTOFTHELOOP*/ }

sqroot=sqrt(number);

printf("Number=%lf\nSquareroot=%lf\n\n",number,sqroot); count++; }

printf("Numberofitemsdone=%d\n",count);

printf("\n\nNegativeitems=%d\n",negative);

printf("ENDOFDATA\n");}break、continue例1main(){

inti;

for(i=1;;i++){if(i==5)break;

printf(“%d”,i*i);}

printf(“*”);}結(jié)果:14916*break、continue例2main(){

intn;

for(n=100;n<=200;n++){if(n%3==0)continue;

printf(“%d”,n);}}輸出100—200間所有不能被3整除的數(shù)break、continue例3#include<stdio.h>main(){int

a,b;

for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}

printf(“%d\n”,a);}A)7B)8C)9D)10答案:Bbreak、continue例4main(){intk=0;charc=‘A’;do{switch(c++){case‘A’:k++;break;case‘B’:k--;case‘C’:k+=2;break;case‘D’:k=k%2;continue;case‘E’:k=k*10;break;default:k=k/3;}k++;}while(c<‘G’);

printf(“k=%d\n”,k);}k=3B)k=4C)k=2D)k=0答案:Bbreak、continue例5main(){int

i,j,x=0;for(i=0;i<2;i++){x++;

for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf(“x=%d\n”,x);}x=4B)x=8C)x=6D)x=12答案:B

#include<math.h>

#include<stdio.h>

main(){intm,k,i;

scanf(“%d”,&m);k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)

break;

if(i>=k+1)

printf("%disaprimenumber!\n",m);

else

printf("%disnotaprimenumber!\n",m);

}例:判斷m是否為素?cái)?shù)讀入mk=sqrt(m)I=2當(dāng)I<=km被I整除真假用break結(jié)束循環(huán)I=I+1I>=k+1真假輸出是素?cái)?shù)輸出不是素?cái)?shù)

和break語(yǔ)句對(duì)比:

breakcontinue環(huán)境可用在循環(huán)語(yǔ)句與switch語(yǔ)句只能用在循環(huán)語(yǔ)句功能跳出當(dāng)前整個(gè)循環(huán)語(yǔ)句與switch語(yǔ)句跳出本次循環(huán),繼續(xù)下一次循環(huán)均不能控制if…goto構(gòu)成的循環(huán)在多重循環(huán)中,break用于跳出本層循環(huán)。循環(huán)語(yǔ)句嵌套及應(yīng)用循環(huán)嵌套:例1#include<stdio.h>main(){int

i,j,x=0,y=0;

for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)x=x+2;y++;}x++;}

printf(“x=%d,y=%d”,x,y);}外層循環(huán)內(nèi)層循環(huán)結(jié)果:x=12,y=8Program6_2Aprogramtoprintthemultiplicationtablefrom1×1to12×10asshownbelowisgiven:

12345678910246810121416182036912151821242730481216202428323640510152025303540455061218243036424854607142128354249566370816243240485664728091827364554637281901020304050607080901001122334455667788991101224364860728496108120#defineCOLMAX10#defineROWMAX12main(){

introw,column,y; row=1;

printf("MULTIPLICATIONTABLE\n");

printf("------------------------------------------\n"); do /*........OUTERLOOPBEGINGS..........*/ { column=1; do /*..........INNERLOOPBEGINS..........*/ { y=row*column; printf("%4d",y); column=column+1; }

while(column<=COLMAX);/*INNERLOOPENDS*/

printf("\n"); row=row+1; }

while(row<=ROWMAX);/*...OUTERLOOPSENDS...*/

printf("------------------------------------------\n");}6_2B#defineCOLMAX10#defineROWMAX12main(){

introw,column,y;row=1;

printf("MULTIPLICATIONTABLE\n");

printf("------------------------------------------\n");

while(row<=ROWMAX)/*........OUTERLOOPBEGINGS..........*/{column=1;

while(column<=COLMAX){y=row*column;printf("%4d",y);column=column+1;}/*INNERLOOPENDS*/

printf("\n");row=row+1;}printf("------------------------------------------\n");}用for來(lái)實(shí)現(xiàn)呢?

例:請(qǐng)看下面一段程序。(循環(huán)的嵌套)main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

printf(“*”);

printf(“\n”);}}main(){int

i,j;

for(i=5;i;i--){for(j=0;j<i;j++)

printf(“*”);

printf(“\n”);}}****

****

****

****

*********

****

***

**

*思考:main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

{if(j%2==0)break;

printf(“*”);}

printf(“\n”);}}無(wú)輸出main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

{if(j%2==0)continue;

printf(“*”);}

printf(“\n”);}}**

**

**

**

*******************************************例.

輸出下列圖形#include<stdio.h>voidmain(){inti,j,k;

for(i=1;i<=5;i++)/*菱形圖的第一至第五行*/{ for(j=1;j<=5-i;j++)/*空格數(shù)5-i個(gè)*/

printf("");

for(k=1;k<=2*i-1;

溫馨提示

  • 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)論