C語(yǔ)言程序設(shè)計(jì) 課件 第4章-循環(huán)結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 第4章-循環(huán)結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 第4章-循環(huán)結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 第4章-循環(huán)結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 第4章-循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(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)介

第4章循環(huán)結(jié)構(gòu)掌握while、do-while和for三種循環(huán)結(jié)構(gòu)掌握break與continue在循環(huán)結(jié)構(gòu)中的用法掌握循環(huán)嵌套的用法具備使用三種循環(huán)結(jié)構(gòu)來(lái)解決常見(jiàn)的重復(fù)操作問(wèn)題的能力本章目標(biāo)例子1:向國(guó)旗敬個(gè)禮4.1理解循環(huán)結(jié)構(gòu)程序代碼:#include"stdio.h"intmain(){

printf("1.向國(guó)旗敬禮,禮畢\n");

printf("2.向國(guó)旗敬禮,禮畢\n");

printf("3.向國(guó)旗敬禮,禮畢\n");

printf("4.向國(guó)旗敬禮,禮畢\n");

printf("5.向國(guó)旗敬禮,禮畢\n");

return0;}

思考:這個(gè)程序?qū)懙暮貌缓??如果?0個(gè)同學(xué)參加升旗儀式,需要顯示每一個(gè)向國(guó)旗敬禮的同學(xué),如何編寫(xiě)代碼?例子2:向國(guó)旗敬個(gè)禮4.1理解循環(huán)結(jié)構(gòu)程序代碼:#include"stdio.h"main(){ inti; i=1; while(i<=5){ printf("%d.向國(guó)旗敬禮,禮畢\n",i); i++; }}

思考:采用循環(huán)結(jié)構(gòu)設(shè)計(jì)程序,如何控制重復(fù)執(zhí)行的次數(shù)?4.1理解循環(huán)結(jié)構(gòu)什么是“循環(huán)”?簡(jiǎn)單而言:循環(huán)就是不斷反復(fù)地執(zhí)行同一段程序。

(1)循環(huán)變量:第一次循環(huán)條件判斷之前初始化,設(shè)定循環(huán)操作的起點(diǎn)。(2)循環(huán)條件:用來(lái)判斷是否進(jìn)入循環(huán)體執(zhí)行重復(fù)的操作,隨著循環(huán)的進(jìn)行,循環(huán)條件通常逐漸趨于不成立。(3)循環(huán)體:需要重復(fù)執(zhí)行的語(yǔ)句塊,通常包含循環(huán)變量改變的語(yǔ)句,使得循環(huán)逐步趨于結(jié)束。4.1理解循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的要素4.2while循環(huán)while語(yǔ)句語(yǔ)句的格式:while(表達(dá)式)

循環(huán)體語(yǔ)句說(shuō)明:(1)表達(dá)式可以是任意類型,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,其值為循環(huán)條件。如果表達(dá)式的值為0表示條件不滿足,否則表示條件滿足。(2)循環(huán)體可以是任何單個(gè)語(yǔ)句,也可以是一組語(yǔ)句,當(dāng)是一組語(yǔ)句時(shí),需要用大括號(hào)將語(yǔ)句組擴(kuò)起來(lái)。4.2while循環(huán)while執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)當(dāng)表達(dá)式的值為真(非0)時(shí),執(zhí)行其中的內(nèi)嵌語(yǔ)句(循環(huán)體),(2)回過(guò)頭來(lái)再判斷表達(dá)式的值,如此重復(fù);(3)當(dāng)表達(dá)式為假(0)時(shí)結(jié)束循環(huán)。4.2while循環(huán)例4.4:用while循環(huán)求“1+2+3+…100”的和。程序代碼:#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}運(yùn)行結(jié)果:5050分析:累加求和的問(wèn)題

sum=1+2+3+…+100sum=0sum=sum+1sum=sum+2sum=sum+3……sum=sum+i和的新值和的當(dāng)前值求和項(xiàng)當(dāng)前值4.2while循環(huán)注意:(1)循環(huán)體有可能一次也不執(zhí)行。(2)循環(huán)前,必須給循環(huán)控制變量賦初值。(3)若循環(huán)體包含一條以上的語(yǔ)句,應(yīng)以復(fù)合語(yǔ)句形式出現(xiàn)。(4)循環(huán)體中,必須有改變循環(huán)控制變量值的語(yǔ)句(使循環(huán)趨向結(jié)束的語(yǔ)句)。

(5)無(wú)限循環(huán):while(1)循環(huán)體;(6)循環(huán)體為空如:

while((c=getchar())!='A');從鍵盤(pán)輸入字符直到輸入A為止

等價(jià)于:c=getchar();while(c!='A')c=getchar();4.3do-while循環(huán)do-while語(yǔ)句語(yǔ)句的格式:說(shuō)明(與while相同):(1)表達(dá)式可以是任意類型,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,其值為循環(huán)條件。如果表達(dá)式的值為0表示條件不滿足,否則表示條件滿足。(2)循環(huán)體可以是任何單個(gè)語(yǔ)句,也可以是一組語(yǔ)句,當(dāng)是一組語(yǔ)句時(shí),需要用大括號(hào)將語(yǔ)句組擴(kuò)起來(lái)。do

循環(huán)體語(yǔ)句while(表達(dá)式);4.3do-while循環(huán)do-while執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)

執(zhí)行循環(huán)體,當(dāng)表達(dá)式的值為真(非0)時(shí);(2)再次執(zhí)行循環(huán)體,如此重復(fù);(3)當(dāng)表達(dá)式為假(0)時(shí)結(jié)束循環(huán)。4.3do-while循環(huán)例4.7:用do-while循環(huán)求“1+2+3+…100”的和。程序代碼:#include"stdio.h"main(){ inti=1,sum=0; do{ sum=sum+i; }while(i<=100); printf("%d",sum);}運(yùn)行結(jié)果:5050#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}while循環(huán):先做后判先判后做4.3do-while循環(huán)注意:(1)do~while循環(huán)的特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式,實(shí)現(xiàn)“直到”型循環(huán),所以循環(huán)體至少會(huì)執(zhí)行一次。(2)循環(huán)體中要有使循環(huán)趨于結(jié)束的語(yǔ)句;do~while循環(huán)最后的分號(hào)“;”不可少,否則將出現(xiàn)語(yǔ)法錯(cuò)誤4.4for循環(huán)for語(yǔ)句語(yǔ)句的格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語(yǔ)句;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語(yǔ)句;表達(dá)式運(yùn)用4.4for循環(huán)for語(yǔ)句說(shuō)明:(1)循環(huán)體語(yǔ)句可以是任意語(yǔ)句;(2)三個(gè)表達(dá)式可以是任意類型;(3)表達(dá)式1用于給某些變量賦初值,多數(shù)情況下,在此處給循環(huán)控制變量賦初值;(4)表達(dá)式2用來(lái)說(shuō)明循環(huán)終止條件,多數(shù)情況下,是根據(jù)循環(huán)控制變量的值確定循環(huán)是否結(jié)束;(5)表達(dá)式3用來(lái)改變某些變量的值,多數(shù)情況下,使循環(huán)控制變量的值增加或減少,使循環(huán)控制變量的值向著使循環(huán)終止的方向改變。4.4for循環(huán)for執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)計(jì)算表達(dá)式1的值,然后轉(zhuǎn)(2);(2)計(jì)算表達(dá)式2的值,若其值為非0,轉(zhuǎn)(3);否則轉(zhuǎn)(5);(3)執(zhí)行循環(huán)體,轉(zhuǎn)(4);(4)計(jì)算表達(dá)式3,轉(zhuǎn)(2);(5)退出循環(huán),執(zhí)行循環(huán)體下面的語(yǔ)句。4.4for循環(huán)例4.10:用for循環(huán)求“1+2+3+…100”的和。程序代碼:#include<stdio.h>main(){ inti,sum=0; for(i=1;i<=100;i++)/*循環(huán)要素*/ sum=sum+i; printf("%d",sum);}運(yùn)行結(jié)果:5050表達(dá)式1為變量賦初值表達(dá)式2說(shuō)明循環(huán)終止條件表達(dá)式3改變變量的值4.4for循環(huán)注意:for循環(huán)結(jié)構(gòu)的變化(1)

表達(dá)式1省略時(shí),應(yīng)在for前給循環(huán)變量賦初值。如:k=1;

for(;k<=3;k++)s=s+k;(2)

表達(dá)式2省略時(shí),不判斷循環(huán)條件,將成為“死循環(huán)”,需要在

循環(huán)體中引入break語(yǔ)句以退出循環(huán);(3)表達(dá)式3省略時(shí),循環(huán)體內(nèi)應(yīng)有使循環(huán)條件改變的語(yǔ)句。

如:for(k=1;k<=3;)

{s=s+k;

k++;}

4.4for循環(huán)注意:for循環(huán)結(jié)構(gòu)的變化(4)

同時(shí)省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,此時(shí)相當(dāng)于while

語(yǔ)句。如

k=1;while(k<=100){s=s+k;k++;}(5)表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值表達(dá)

式或字符表達(dá)式,只要其值不等于0就執(zhí)行循環(huán)體。

如:for(k=1;k-4;k++)s=s+k;

僅當(dāng)k的值等于4時(shí)終止循環(huán)。k-4是數(shù)值表達(dá)式。k=1;for(

;k<=100;){s=s+k;k++;}4.5循環(huán)結(jié)構(gòu)間的比較和總結(jié)while(表達(dá)式)

循環(huán)體語(yǔ)句do

循環(huán)體語(yǔ)句while(表達(dá)式);for(表達(dá)式1;表達(dá)式2;表達(dá)式3;)

循環(huán)體語(yǔ)句循環(huán)控制條件也可在循環(huán)體內(nèi)改變循環(huán)控制變量值(1)關(guān)于循環(huán)的控制:

循環(huán)控制變量

初始化也可在for前4.5循環(huán)結(jié)構(gòu)間的比較和總結(jié)(2)一種循環(huán)可以解決的問(wèn)題,使用另外兩種同樣可行,只

是方便程度不同。(3)while循環(huán)一般用于循環(huán)次數(shù)不定的情況,for循環(huán)一般用于循環(huán)次數(shù)確定的情況(也可以用于循環(huán)次數(shù)不定的情況),do-while循環(huán)一般用于至少需要執(zhí)行一次的情況。(4)for循環(huán)和while循環(huán)是先判斷條件是否為真,再執(zhí)行循

環(huán)體,因此可出現(xiàn)循環(huán)一次也不執(zhí)行的情況;do-while

循環(huán)是先執(zhí)行循環(huán)體,再判斷條件是否為真,因此循環(huán)

體至少執(zhí)行一次。(5)while循環(huán)、do-while循環(huán)、for循環(huán),可以用break語(yǔ)

句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)。4.6break語(yǔ)句和continue語(yǔ)句break語(yǔ)句語(yǔ)句的格式:

break;

功能:

是終止并退出當(dāng)前的循環(huán)語(yǔ)句,也就是跳出循環(huán)體語(yǔ)句,執(zhí)行循環(huán)體語(yǔ)句后面的語(yǔ)句,再也不會(huì)進(jìn)入循環(huán)體,如圖所示。4.6break語(yǔ)句和continue語(yǔ)句例4.12:判斷輸入的正整數(shù)是否為素?cái)?shù),如果是素?cái)?shù),輸出Yes,否則輸出No。程序代碼:#include"stdio.h"main(){ intm,i; scanf("%d",&m); for(i=2;i<=m-1;i++) if(m%i==0)break; if(i>=m)printf("Yes"); elseprintf("No");}

運(yùn)行結(jié)果:m=13Yes終止循環(huán)并跳出循環(huán)體4.6break語(yǔ)句和continue語(yǔ)句continue語(yǔ)句語(yǔ)句的格式:

continue;

功能:

結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的部分,進(jìn)行下一次是否執(zhí)行循環(huán)的判斷,即往上跳,還有可能再次進(jìn)入循環(huán)體,如圖所示。4.6break語(yǔ)句和continue語(yǔ)句例4.13:輸出100-200中不能被7整除的數(shù)。程序代碼:#include"stdio.h"main(){intn,count=0;for(n=100;n<=200;n++) { if(n%7==0)continue;printf("%d",n);count++;if(count%10==0) printf("\n");}}運(yùn)行結(jié)果:100101102103104106107108109110111113114115116117118120121122123124125127128129130131132134135136137138139141142143144145146148149150151152153155156157158159160162163164165166167169170171172173174176177178179180181183184185186187188190191192193194195197198199200跳出循環(huán)進(jìn)行下一次循環(huán)4.7循環(huán)的應(yīng)用例4.14:從鍵盤(pán)輸入一個(gè)正整數(shù)N,編寫(xiě)一個(gè)C語(yǔ)言程序計(jì)算N的階乘N!。示例輸入:5示例輸出:5!=120分析:首先需要定義一個(gè)初始變量來(lái)存儲(chǔ)階乘結(jié)果。然后將循環(huán)變量用N來(lái)初始化。循環(huán)結(jié)束后,輸出該變量的值。其次,這是將相鄰多個(gè)整數(shù)相乘,因而可以使用for循環(huán)或while循環(huán)來(lái)實(shí)現(xiàn)。while(i>=1){result=result*i;--i;}具體如下:for(i=N;i>=1;--i){

result=result*i;

}4.7循環(huán)的應(yīng)用程序代碼:#include<stdio.h>#include<stdlib.h>intmain(){inti,N;unsignedintresult=1;printf("請(qǐng)輸入計(jì)算其階乘的正整數(shù):\n");scanf("%d",&N);for(i=N;i>=1;--i){result=result*i;}printf("%d!=%d\n",N,result);return0;}運(yùn)行結(jié)果:請(qǐng)輸入計(jì)算其階乘的正整數(shù):55!=120存儲(chǔ)階乘結(jié)果循環(huán)變量4.7循環(huán)的應(yīng)用例4.15:期末考試結(jié)束后,老師想知道最高分是多少,請(qǐng)用C語(yǔ)言編程實(shí)現(xiàn):從鍵盤(pán)輸入10名同學(xué)的成績(jī),輸出其中的最高分。分析:首先可以使用變量max來(lái)記錄最大值。然后,在循環(huán)體里,每次輸入一個(gè)數(shù)時(shí)(使用scanf函數(shù)),和max比較,如果大于max,則將該數(shù)賦值給max。在此題中需要逐個(gè)比較不同學(xué)生的分?jǐn)?shù),要比較10次,需要使用循環(huán)結(jié)構(gòu)來(lái)輸入并進(jìn)行比較才能確定出最大值。

具體如下:for(k=1;k<=10;k++){

scanf("%d",&x);

if(x>=max)

max=x;

}將大數(shù)賦值給maxif循環(huán)比較最大值for循環(huán)比較10次4.7循環(huán)的應(yīng)用程序代碼:#include<stdio.h>intmain(){intk,x,max;max=-999999;for(k=1;k<=10;k++){scanf("%d",&x);if(x>=max)max=x;}printf("Max=%d\n",max);return0;}運(yùn)行結(jié)果:151235678279948758854Max=94輸入數(shù)據(jù)記錄最大值if循環(huán)比較最大值4.7循環(huán)的應(yīng)用例4.16:輸入若干名學(xué)生的某門(mén)課程成績(jī),具體學(xué)生人數(shù)不確定,請(qǐng)編寫(xiě)程序求總成績(jī)和平均成績(jī)。分析:利用循環(huán)將逐個(gè)學(xué)生的成績(jī)累加得到總成績(jī),但由于學(xué)生人數(shù)不確定,又不能用人數(shù)來(lái)構(gòu)造循環(huán)條件。對(duì)于這種情況,一般需要人為約定何種條件停止循環(huán),本例采用輸入負(fù)數(shù)成績(jī)作為停止循環(huán)的條件。

具體如下:

scanf("%d",&s);

while(s>=0){

sum=sum+s;

n++;

scanf("%d",&s);

}先獲取成績(jī)儲(chǔ)存到s中,判斷其是否符合正數(shù)的條件進(jìn)入while循環(huán)累加總成績(jī)獲取新成績(jī)4.7循環(huán)的應(yīng)用程序代碼:#include"stdio.h"main(){ ints,sum,n; floataverage; n=0; sum=0; scanf("%d",&s); while(s>=0){ sum=sum+s; n++; scanf("%d",&s); } average=sum/(float)n; printf("sum=%d,average=%f\n",sum,average);}運(yùn)行結(jié)果:95786354-1sum=290,average=72.500000負(fù)數(shù)終止循環(huán)4.7循環(huán)的應(yīng)用例4.17:輸出1000以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù)。分析:利用循環(huán)從0開(kāi)始逐個(gè)遍歷一遍1000以內(nèi)的整數(shù)進(jìn)行判斷。每次遍歷都判斷該整數(shù)是否能被3整除同時(shí)個(gè)位數(shù)為6,如果是,則輸出。

具體如下:

for(i=0;i<1000;i++){

if(i%3==0&&i%10==6){

printf("%d",i);

}

}for循環(huán)從0開(kāi)始到1000for循環(huán)判斷其被3整除且個(gè)位數(shù)為6

,若是則輸出

輸出當(dāng)前數(shù)和一個(gè)空格

4.7循環(huán)的應(yīng)用程序代碼:#include<stdio.h>intmain(){inti;for(i=0;i<1000;i++){if(i%3==0&&i%10==6){printf("%d",i);}}return0;}運(yùn)行結(jié)果:6366696126156186216246276306336366396

4264564865165465766066366666967267567868168468769069369669964.8循環(huán)結(jié)構(gòu)的嵌套(1)一個(gè)循環(huán)體內(nèi)包含著另一個(gè)完整的循環(huán)結(jié)構(gòu),就稱為嵌套循環(huán)。(2)內(nèi)嵌的循環(huán)中又可以嵌套循環(huán),從而構(gòu)成多重循環(huán)。(3)三種循環(huán)可以相互嵌套。下面幾種都是合法的嵌套形式:(1)while(){……

while(){……}…...}(4)while(){……

do{……}while();…….}(5)for(;;){……

while(){……}…...}(3)for(){……

for(;;){……}…….}(6)do{……

for(;;){……}…...}while();(2)do{……

do{……}while();…...}while();4.8循環(huán)結(jié)構(gòu)的嵌套作用:可以使復(fù)雜的問(wèn)題結(jié)構(gòu)化,把一個(gè)功能的實(shí)現(xiàn)拆分成一個(gè)一個(gè)更小的功能,然后再實(shí)現(xiàn)。在實(shí)現(xiàn)過(guò)程中要注意結(jié)構(gòu)上的邏輯性和正確性,要保證每一個(gè)小功能能夠完全正確,最終實(shí)現(xiàn)一個(gè)完整的功能。執(zhí)行順序是:外層循環(huán)體每執(zhí)行一次,內(nèi)層循環(huán)都要整體執(zhí)行一遍。當(dāng)內(nèi)層循環(huán)結(jié)束后,外層循環(huán)再進(jìn)行下一次迭代。這樣重復(fù)進(jìn)行直到外層循環(huán)結(jié)束為止。4.8循環(huán)結(jié)構(gòu)的嵌套(1)嵌套的循環(huán)控制變量不應(yīng)同名,以免造成混亂。(2)內(nèi)循環(huán)變化快,外循環(huán)變化慢。例如:for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%1d*%1d=%2d",i,j,i*j);

printf("\n");}(3)正確確定循環(huán)體。(4)循環(huán)控制變量與求解的問(wèn)題掛鉤。循環(huán)嵌套的說(shuō)明:4.8循環(huán)結(jié)構(gòu)的嵌套例4.20:使用C語(yǔ)言的printf()打印長(zhǎng)方形圖案,輸入圖案的長(zhǎng)和寬。

例如:*

*

*

*

*

*

*

*

*

**

*

*

*

*

分析:(1)定義兩個(gè)整型變量,分別表

溫馨提示

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