c語言第五章 循環(huán)結(jié)構(gòu)一課件_第1頁
c語言第五章 循環(huán)結(jié)構(gòu)一課件_第2頁
c語言第五章 循環(huán)結(jié)構(gòu)一課件_第3頁
c語言第五章 循環(huán)結(jié)構(gòu)一課件_第4頁
c語言第五章 循環(huán)結(jié)構(gòu)一課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

全國計算機(jī)等級考試二級教程

——C語言程序設(shè)計計算中心-NEUComputingCenter第五章循環(huán)結(jié)構(gòu)控制結(jié)構(gòu)循環(huán)結(jié)構(gòu)兩種循環(huán)形式當(dāng)型循環(huán)(“前判斷”結(jié)構(gòu))直到型循環(huán)(“后判斷”結(jié)構(gòu))三種語句格式whiledo…whilefor()中斷語句在循環(huán)中的作用嵌套循環(huán)結(jié)構(gòu)5.1循環(huán)的基本概念什么是循環(huán)重復(fù)做某件事的現(xiàn)象稱為“循環(huán)”C程序的循環(huán)結(jié)構(gòu)就是在滿足循環(huán)條件時,重復(fù)執(zhí)行某程序段,直到循環(huán)條件不滿足為止重復(fù)執(zhí)行的程序段稱為循環(huán)體循環(huán)進(jìn)行的條件循環(huán)控制變量循環(huán)控制變量初始值每次循環(huán)過程中用以改變循環(huán)控制變量的遞增/遞減值用來判定循環(huán)是否結(jié)束的最終條件值5.1循環(huán)的基本概念循環(huán)結(jié)構(gòu)兩種形式當(dāng)型循環(huán)首先判斷循環(huán)控制表達(dá)式是否為“真”若為“真”,則反復(fù)執(zhí)行循環(huán)體若為“假”,則結(jié)束循環(huán)while語句、for語句直到型循環(huán)首先執(zhí)行循環(huán)體,然后才判斷循環(huán)控制表達(dá)式若為“假”,則反復(fù)執(zhí)行循環(huán)體直到循環(huán)控制表達(dá)式為“真”時結(jié)束循環(huán)do_while語句5.2當(dāng)型循環(huán)while語句語句格式說明表達(dá)式是控制循環(huán)的條件,它可以是任何類型的表達(dá)式循環(huán)體語句語法上定義為一條語句,若循環(huán)體含有多條語句,則必須用大括號把它們括起來,成為復(fù)合語句while語句的特點(diǎn)先判斷,后執(zhí)行若表達(dá)式一開始就為“假”,則循環(huán)一次也不執(zhí)行提示分號“;”的位置是在語句之后而不是表達(dá)式的后面while(條件表達(dá)式){語句S;}5.2當(dāng)型循環(huán)while語句執(zhí)行過程當(dāng)表達(dá)式的值為“真(非0值)”時,循環(huán)重復(fù)進(jìn)行當(dāng)其值為“假(0值)時,循環(huán)結(jié)束,程序跳轉(zhuǎn)到循環(huán)后面的第一條語句開始執(zhí)行執(zhí)行循環(huán)體語句表達(dá)式?計算表達(dá)式初值退出循環(huán)體為真為假while(條件表達(dá)式){語句S;}例:求1—100的和#include<stdio.h>voidmain(){inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i++;}

printf(“sum=%d\n”,sum);}分析:輸入,輸出分別是什么?需要幾個變量?程序大體可分為幾個步驟?sum=0i=1i<=100?sum=sum+ii=i+1輸出sum的值5.2當(dāng)型循環(huán)while語句例:編程求π的近似值,公式π/4≈1-1/3+1/5-1/7+1/9-…分析:題目仍可以看成是累加求和不同的是,相加的每一項正負(fù)相間,公式是無窮的,所以我們規(guī)定當(dāng)相加項的絕對值小于0.000001(即10–6)時停止計算#include<stdio.h>#include<math.h>voidmain(){ints;floatn,t,pi;

s=1;n=1;t=1;pi=0;while(fabs(t)>1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}

pi=4*pi;printf(“pi=%10.6f\n”,pi);}tpins11-13-1/31010.671/5515.2當(dāng)型循環(huán)while語句例3:計算s=1+1/2+1/3+……+1/100。

#include“stdio.h”

main()

{inti;floats;

s=0;

i=1;

while(i<=100)

{s+=1.0/i;/*如果s為int,s+=1/i是否會有問題*/

i++;

}

printf("s=%f\n",s);

}

運(yùn)行程序,輸出結(jié)果是:s=5.187378

5.3直到型循環(huán)do…while語句語句格式說明do_while語句的表達(dá)式是任意表達(dá)式,是控制循環(huán)的條件do_while語句的特點(diǎn)先執(zhí)行后判斷循環(huán)體至少執(zhí)行一次do_while語句實現(xiàn)的循環(huán)重復(fù)執(zhí)行循環(huán)體,直到表達(dá)式為"假"才退出循環(huán)。do{語句s;}while(表達(dá)式);;不能省略5.3直到型循環(huán)do…while語句執(zhí)行過程首先執(zhí)行循環(huán)體語句計算表達(dá)式的值當(dāng)表達(dá)式值為“真”時,返回循環(huán)體開始處繼續(xù)執(zhí)行循環(huán)體語句當(dāng)表達(dá)式的值為“假”,結(jié)束循環(huán),執(zhí)行下面的語句提示在do…while結(jié)構(gòu)中,即使循環(huán)體為一條語句,也用花括號{}括了起來執(zhí)行循環(huán)體語句表達(dá)式?計算表達(dá)式初值退出循環(huán)體為真為假例:求1—100的和#include<stdio.h>voidmain(){inti,sum;sum=0;i=1;do{sum=sum+i;

i++;}while(i<=100);printf(“sum=%d\n”,sum);}sum=0i=1i<=100?sum=sum+ii=i+1輸出sum的值5.3直到型循環(huán)do…while語句例:統(tǒng)計在1~100之間的整數(shù)中,有多少個數(shù)是3的倍數(shù)或5的倍數(shù)

main(){inti=0,n=1;do{if(n%3==0||n%5==0)i++;n++;}while(n<=100);printf(“Thetotalnumberis:%d”,i);}5.4forfor語句是C語言中最常用、最靈活、最基本的循環(huán)控制語句特別適合已知循環(huán)次數(shù)的情況計數(shù)式循環(huán)語句格式說明e1(表達(dá)式1)通常為賦值表達(dá)式用來實現(xiàn)循環(huán)結(jié)構(gòu)變量的初始值e2(表達(dá)式2)通常為關(guān)系表達(dá)式或邏輯表達(dá)式將循環(huán)控制變量與某一值進(jìn)行比較,以決定是否退出循環(huán)(循環(huán)進(jìn)行的條件)e3(表達(dá)式3)通常采用自增或自減表達(dá)式描述循環(huán)控制變量的變化for(e1;e2;e3){S;}5.4forfor語句例:打印1~10之間的所有整數(shù)#include<stdio.h>main(){intcounter;for(counter=1;counter<=10;counter++)printf(“%d\n”,counter);printf(“*******\n”);}演示53.C5.4forfor語句“while”和“for”語句的相似性#include<stdio.h>main(){intcounter;

counter=1;while(counter<=10){printf(“%d\n”,counter);

counter=counter+1;}printf(“*******\n”);}#include<stdio.h>main(){intcounter;for(counter=1;counter<=10;counter++)printf(“%d\n”,counter);printf(“*******\n”);}5.4forfor語句例:計算自然數(shù)1到n的平方和開始類型說明:n;i;s;輸入n賦初值:s=0.0;i=1;i<=n?計算平方數(shù):i*i;s=s+(float)(i)*(float)(i);?i=i+1;輸出計算結(jié)果:s結(jié)束#include<stdio.h>#include<math.h>main(){inti,n;floats;

printf(“pleaseinputn:\”);scanf(“%d”,&n);s=0.0for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf(“1*1+2*2+…+%d*%d=%f\n”,n,n,s);}

演示54.cRUN<ch>pleaseinputn:5<ch>1*1+2*2+…+5*5=55.0000005.4for5.4forfor語句for語句的幾種特殊格式for(;表達(dá)式2;表達(dá)式3)語句s;省略表達(dá)式1i的初值放在循環(huán)執(zhí)行前確定通常是循環(huán)控制變量的初值不是已知常量,是在循環(huán)前通過計算得到for(表達(dá)式1;;表達(dá)式3)語句s;省略表達(dá)式2循環(huán)無法終止循環(huán)體的第一條語句處安排一條循環(huán)出口語句(因為表達(dá)式2在循環(huán)體之前被執(zhí)行)以便適時退出循環(huán)i=2;/*循環(huán)變量賦初值*/

for(;i<10;i++)

printf("%5d",i);for(i=2;;i++)

{if(i>=10)break;/*循環(huán)出口*/

printf("%5d",i);

}5.4forfor語句for語句的幾種特殊格式for(表達(dá)式1;表達(dá)式2;)語句s;省略表達(dá)式3循環(huán)無法終止一般當(dāng)循環(huán)控制變量呈非規(guī)則性變化,而且在循環(huán)體中存在更新循環(huán)控制變量的語句在使用for(逗號表達(dá)式1;表達(dá)式2;逗號表達(dá)式3)語句s;表達(dá)式1和表達(dá)式3可以是一項或多項可以與循環(huán)有關(guān),也可無關(guān)當(dāng)有多于一項時,各項用逗號“,”分隔for(表達(dá)式1;表達(dá)式2;表達(dá)式3);用空語句作為循環(huán)體語句產(chǎn)生一段延時什么也不做,目的就是耗時間

for(i=2;i<10;)

{printf("%5d",i);

i++;/*修改循環(huán)變量的值*/

}

for(i=2,j=1;i>j;i++,j++)

{…….

}5.4循環(huán)的本質(zhì)循環(huán)是指在循環(huán)條件為真時反復(fù)執(zhí)行執(zhí)行的一組指令兩種循環(huán)方式計數(shù)式循環(huán)控制變量用來計算循環(huán)的次數(shù)控制變量的值在每次執(zhí)行完一組循環(huán)指令后遞增當(dāng)控制變量的值表明達(dá)到了預(yù)定的循環(huán)次數(shù)時循環(huán)終止并繼續(xù)執(zhí)行循環(huán)結(jié)構(gòu)后的語句。標(biāo)記式循環(huán)當(dāng)事先不知道準(zhǔn)確的循環(huán)次數(shù)循環(huán)體中包含每次循環(huán)都要獲取數(shù)據(jù)的語句標(biāo)記值是在所有合法的數(shù)據(jù)項都提供給程序后鍵入的值標(biāo)記值必須不同于正常的數(shù)據(jù)項5.4循環(huán)的本質(zhì)循環(huán)語句的比較三種循環(huán)語句可處理同一個問題例:求10個數(shù)中的最大值#include“stdio.h”

main()

{inti,k,max;

scanf(“%d”,&max);

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

{scanf("%d",&k);

if(max<k)max=k;

}

printf("max=%d\n",max);

}main()

{inti,k,max;

scanf(“%d”,&max);

i=2;while(i<11){scanf(“%d”,&k);

if(max<k)max=k;

i++;/*for語句中的i++*/

}

printf("max=%d\n",max);

}main()

{inti,k,max;

scanf(“%d”,&max);

i=2;do

{scanf(“%d”,&k);

if(max<k)max=k;

i++;

}while(i<11);printf("max=%d\n",max);

}main(){intnum;do{scanf(“%d”,&num);printf(“%d\n”,num);}while(num>=100);}main(){intnum;for(scanf(“%d”,&num),printf(“%d\n”,num);num>=100;){scanf(“%d”,&num);printf(“%d\n”,num);}}循環(huán)語句的比較三種循環(huán)語句可處理同一個問題編寫程序,從鍵盤輸入數(shù)字,并輸出該數(shù)字,直到所輸出的數(shù)字小于1005.4循環(huán)的本質(zhì)main(){intnum;scanf(“%d”,&num);printf(“%d\n”,num);while(num>=100){scanf(“%d”,&num);printf(“%d\n”,num);}}5.4循環(huán)的本質(zhì)循環(huán)語句的比較循環(huán)方式while語句和do_while語句多采用標(biāo)記式循環(huán)用于循環(huán)次數(shù)不定的情況for語句更方便對于循環(huán)次數(shù)確定的情況循環(huán)結(jié)構(gòu)for語句和while語句先判斷循環(huán)控制條件,后執(zhí)行循環(huán)體可能一次也不執(zhí)行循環(huán)體do_while語句是先執(zhí)行循環(huán)體,后進(jìn)行循環(huán)控制條件的判斷do_while語句至少執(zhí)行一次循環(huán)體do_while語句更適合于第一次循環(huán)肯定執(zhí)行的場合5.4循環(huán)的本質(zhì)循環(huán)語句的比較實現(xiàn)功能do_while語句和while語句只有一個表達(dá)式用于控制循環(huán)是否進(jìn)行for語句有三個表達(dá)式可以控制循環(huán)是否進(jìn)行,并能為循環(huán)變量賦初值及不斷修改循環(huán)變量的值for語句比while和do_while語句功能更強(qiáng),更靈活語句形式初始值while、do…while循環(huán)時,循環(huán)變量的初始值操作應(yīng)放在while和do…while語句之前完成for語句通常在表達(dá)式1中實現(xiàn)循環(huán)控制變量的初始化while和for表達(dá)式的括號后面沒有“;”do…while表達(dá)式的括號后面有“;”5.4循環(huán)的本質(zhì)循環(huán)語句的選用原則循環(huán)次數(shù)是否確定循環(huán)次數(shù)已知,一般用for語句循環(huán)次數(shù)由循環(huán)體的執(zhí)行情況來確定,一般采用while語句或do…while語句循環(huán)體是否一定執(zhí)行循環(huán)體至少要執(zhí)行一次時,采用do…while語句循環(huán)體可能一次也不執(zhí)行,則選用while語句或for語句【例】:下列程序的運(yùn)行結(jié)果是:#include<stdio.h>main(){inta=10,b=5,c=5,d=5;inti=0,j=0,k=0;for(;a>b;++b)i++;while(a>++c)j++;do{k++;while(a>d++);printf(“%d,%d,%d\n”,i,j,k);}}i:a)0b)4c)5d)6j:a)0b)4c)5d)6k:a)0b)4c)5d)65.4循環(huán)的本質(zhì)5.5循環(huán)嵌套循環(huán)嵌套若一個循環(huán)結(jié)構(gòu)的循環(huán)體中包含了另一循環(huán)語句,則構(gòu)成了循環(huán)的嵌套,稱為多重循環(huán)三種循環(huán)語句while、do…while、for可以互相嵌套,自由組合執(zhí)行過程應(yīng)先執(zhí)行內(nèi)層的循環(huán)體操作,然后是外層循環(huán)。內(nèi)層循環(huán)被執(zhí)行的次數(shù)應(yīng)為:內(nèi)層次數(shù)×外層次數(shù)對外層循環(huán)變量的每一個值,內(nèi)層循環(huán)的循環(huán)變量從初值變化到終值對外層循環(huán)的每一次循環(huán),內(nèi)層循環(huán)要執(zhí)行完整的循環(huán)語句提示各循環(huán)語句所描述的循環(huán)結(jié)構(gòu)必須完整,相互之間絕對不允許交叉5.5循環(huán)嵌套循環(huán)嵌套例:求1~1000之間的所有完數(shù)。所謂“完數(shù)”是指一個數(shù)恰好等于它的因子之和(除自身外)main(){inta,j,m;

for(a=1;a=1000;a++){for(m=0,j=1;j<=a/2;j++)if(!(a%j))m=m+j;if(m==a)printf(“%4d”,a);}}演示58。C

5.5循環(huán)嵌套循環(huán)嵌套例:求出用數(shù)字0~9可以組成多少個沒有重復(fù)的三位偶數(shù)main(){intn,i,j,k;n=0;for(i=1;i<=9;i++)/*百位數(shù)的處理*/for(k=0;k<=8;k=k+2)/*個位數(shù)的處理,k=k+2為偶數(shù)*/if(k!=i)for(j=0;j<=9;j++)/*十位數(shù)的處理*/if(j!=i&&j!=k)n++;printf(“%d\n”,n);}

演示59。C5.5循環(huán)的中斷與繼續(xù)break語句功能用于終止(某層)循環(huán)的執(zhí)行在switch語句中終止某個case的執(zhí)行格式:break;

作用在循環(huán)體內(nèi),使用break語句可退出循環(huán)體而執(zhí)行該循環(huán)語句后面的語句如果執(zhí)行到程序的某一點(diǎn)后需要退出循環(huán)體(不等循環(huán)的正常結(jié)束),可用break語句實現(xiàn)范圍switch語句、while語句、do…while語句、for語句5.5循環(huán)的中斷與繼續(xù)break語句例:從鍵盤上輸入字符和數(shù)字,邊輸入邊在屏幕上顯示出來,當(dāng)輸入“*”星號時輸入結(jié)束#include<stdio.h>main(){inti;charnumb;

for(i=1;;i++){scanf(“%c”,&numb);if(numb==‘*’)break;elseprintf(“%c”,numb);}printf(“循環(huán)結(jié)束”);}演示5.c

5.5循環(huán)的中斷與繼續(xù)break語句例:編程求100個數(shù)的累加和,如果在某次計算后結(jié)果值(累加和)超過1000,則結(jié)束處理main(){intx,sum=0,i;for(i=1;i<=100;i++){scanf(“%d”,&x);sum=sum+x;if(sum>1000)break;}printf(“thesumis%d”,sum);}演示5B。C5.5循環(huán)的中斷與繼續(xù)continue功能結(jié)束本次循環(huán)(不是終止整個循環(huán))跳過循環(huán)體中continue語句后面的語句,開始下一次循環(huán)格式:continue;處理過程終止循環(huán)體的本次執(zhí)行,返回循環(huán)語句的首部,檢查循環(huán)條件是否滿足以決定是否進(jìn)行下一次的循環(huán)體的處理范圍while語句、do…while語句、for語句5.5循環(huán)的中斷與繼續(xù)continue說明continue語句只能出現(xiàn)在循環(huán)語句的循環(huán)體中若continue語句出現(xiàn)在while或do_while語句中,則跳過循環(huán)體中continue語句后面的語句,直接轉(zhuǎn)去判別下次循環(huán)控制條件若continue語句出現(xiàn)在for語句中,則跳過循環(huán)體中continue語句后面的語句,轉(zhuǎn)而執(zhí)行for語句的表達(dá)式35.5循環(huán)的中斷與繼續(xù)continue例:輸出3位數(shù)中所有能同時被3和5整除的數(shù)分析同時被3和5整除的數(shù)n滿足條件:n%3==0&&n%5==0不能同時被3和5整除的數(shù)n滿足條件:n%3!=0||n%5!=0對3位數(shù)循環(huán),即n=100,11,……,999若不滿足要求,應(yīng)跳過輸出語句轉(zhuǎn)而考察下一個n所以用continue語句結(jié)束本次循環(huán)若n滿足要求,則輸出n5.5循環(huán)的中斷與繼續(xù)continue例:輸出3位數(shù)中所有能同時被3和5整除的數(shù)#include<stdio.h>main()

{intn;

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

{if(n%3!=0||n%5!=0)continue;

printf("%5d",n);}

}#include<stdio.h>main(){intcount=0,n;charch;for(n=1;n<=20;n++){ch=getchar();if(ch=='K'||ch=='f')count++; elsecontinue;}printf("%d\n",count);}演示5C。Ccontinue例:隨機(jī)輸入20個字符,統(tǒng)計鍵入‘f’和‘K’字符的次數(shù)5.5循環(huán)的中斷與繼續(xù)5.5循環(huán)的中斷與繼續(xù)goto語句功能在函數(shù)體內(nèi)進(jìn)行無條件跳轉(zhuǎn)格式:goto

語句標(biāo)號;例:if(a>2)gotolabel1;說明多層循環(huán)嵌套(三層以上),采用goto語句直接從內(nèi)循環(huán)跳轉(zhuǎn)到循環(huán)外不允許使用goto語句從循環(huán)體外跳轉(zhuǎn)到循環(huán)體內(nèi)5.5循環(huán)的中斷與繼續(xù)goto、break、continue語句的區(qū)別continue語句只能出現(xiàn)在循環(huán)結(jié)構(gòu)中只結(jié)束本次循環(huán)體的執(zhí)行并開始下一次循環(huán)通常與if語句結(jié)合使用僅僅影響該語句本身所處的循環(huán)break語句可出現(xiàn)在循環(huán)結(jié)構(gòu)和多分支結(jié)構(gòu)中break語句終止它所在的循環(huán)語句的執(zhí)行退出循環(huán)結(jié)構(gòu)和多分支結(jié)構(gòu)break語句處于嵌套結(jié)構(gòu)中時,將只能跳出break語句所在的循環(huán)體而對其它循環(huán)結(jié)構(gòu)層沒有影響goto語句可以出現(xiàn)在任意結(jié)構(gòu)之中可直接退出循環(huán)結(jié)構(gòu)和多分支結(jié)構(gòu)5.6應(yīng)用例1:求S=1!+2!+3!+…+20!main(){floatn,sum=0.0,t=1.0,for(n=1;n<=20;n++){t=t*n;sum=sum+t;}printf(“sum=%.2f”,sum);}演示5D。C5.6應(yīng)用例2:現(xiàn)有一個等差數(shù)列,已知第一項a=1,公差b=4,輸出滿足前n項之和小于100的n的最大值#include<stdio.h>main(){inta=1,b=4,sum=1,n=1;while(sum<100){a=a+b;sum=sum+a;n++;}printf(“%d”,n-1);}如果令初始值sum=0,n=0,程序如何修改?

5.6應(yīng)用例3:求100到200之間的全部素數(shù)#include<math.h>main(){intm,k,i,n=0;for(m=101;m<200;m=m+2){if(n%10==0)printf(“\n”);k=qurt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){pritnf(“%5d”,m);n=n+1;}}}演示5F。C5.6應(yīng)用例4:計算100~1000之間有多少個各位數(shù)字之和為5的數(shù)main(){inti,s,k,count=0;

for(i=100;i<=1000;i++){s=0;k=i;while(k){s=s+k%10;k=k/10;}if(s!=5)continue;

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論