C語言程序設(shè)計(jì) 課件 第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第1頁
C語言程序設(shè)計(jì) 課件 第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第2頁
C語言程序設(shè)計(jì) 課件 第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第3頁
C語言程序設(shè)計(jì) 課件 第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第4頁
C語言程序設(shè)計(jì) 課件 第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)第4章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)脈絡(luò)導(dǎo)圖C語言程序設(shè)計(jì)技能目標(biāo)C語言程序設(shè)計(jì)(1)能熟練運(yùn)用三種循環(huán)語句編寫程序。(2)能學(xué)會解決具體問題,編寫簡單的C語言程序。(3)能解決初學(xué)者編寫程序易犯的錯誤。素質(zhì)目標(biāo)C語言程序設(shè)計(jì)(1)通過編寫程序培養(yǎng)學(xué)生耐心、細(xì)致、有條理的工作作風(fēng),通過調(diào)試程序培養(yǎng)學(xué)生面對問題時具有自信和冷靜的心理素質(zhì)。(2)通過循環(huán)語句的學(xué)習(xí),增強(qiáng)對學(xué)習(xí)知識的自信心,日積月累,必有收獲。(3)通過編程案例,培養(yǎng)由淺入深的思維方式和反復(fù)推敲的習(xí)慣。4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)循環(huán)是指使用一定條件對同一個程序段重復(fù)執(zhí)行若干次。循環(huán)體是指被重復(fù)執(zhí)行的部分(可能由若干語句組成)。while語句一般格式如下:while(表達(dá)式)語句其中,“表達(dá)式”是循環(huán)條件,“語句”是循環(huán)體,既可以是一個簡單語句,也可以是復(fù)合語句。while語句是“先判斷,后執(zhí)行”。即首先計(jì)算條件表達(dá)式的值,如果表達(dá)式的值為非0(真),則執(zhí)行循環(huán)體語句;重復(fù)上述操作,直到表達(dá)式的值為0(假)時才結(jié)束循環(huán)。如果剛進(jìn)入循環(huán)時條件就不滿足,則循環(huán)體一次也不執(zhí)行。while循環(huán)C語言程序設(shè)計(jì)【例4-1】用C語言循環(huán)控制語句如何實(shí)現(xiàn)1+2+3+…+100的值?運(yùn)行結(jié)果語句編寫sum=5050

4.1循環(huán)程序結(jié)構(gòu)intmain() { inti=1,sum=0; while(i<=100) { sum=sum+i; i++; } printf("sum=%d",sum); return0; } 程序說明:定義變量sum和變量i,分別存放累加的和及循環(huán)次數(shù),累加和變量sum賦初值0,循環(huán)次數(shù)i賦初值1。while循環(huán)求和,先將i加到sum中,再將i自增1.反復(fù)執(zhí)行循環(huán)體,直到i大于100跳出循環(huán)。C語言程序設(shè)計(jì)【例4-2】統(tǒng)計(jì)從鍵盤輸入一行字符的個數(shù),輸入回車符結(jié)束。運(yùn)行結(jié)果語句編寫inputastring:IloveChina!13

4.1循環(huán)程序結(jié)構(gòu)intmain() { intn=0; printf("inputastring:\n"); while(getchar()!='\n’) /*循環(huán)條件是當(dāng)輸入的字符不是回車符時執(zhí)行循環(huán)體語句*/ n++; printf("%d",n); return0; }

程序說明:程序中的循環(huán)條件為getchar()!='\n',其意義是,只要從鍵盤輸入的字符不是回車符就繼續(xù)循環(huán)。循環(huán)體“n++”完成對輸入字符個數(shù)進(jìn)行計(jì)數(shù),從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個數(shù)計(jì)數(shù)。4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)名師點(diǎn)睛(1)while語句中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。(2)循環(huán)體如果包括一條以上的語句,則必須用{}括起來,組成復(fù)合語句。(3)一定要有語句修改表達(dá)式的值,使其有結(jié)果為0的時候,否則將出現(xiàn)“死循環(huán)”。4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)do-while語句一般格式如下:do循環(huán)體語句while(表達(dá)式);首先執(zhí)行循環(huán)體中的語句一次,然后計(jì)算表達(dá)式的值,若為真(非0)則繼續(xù)執(zhí)行循環(huán)體,再計(jì)算表達(dá)式的值,當(dāng)表達(dá)式的值為假(0)時,終止循環(huán),執(zhí)行do…while語句后的下一條語句。do-while循環(huán)4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)名師點(diǎn)睛do-while語句與while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體,而while是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行。C語言程序設(shè)計(jì)【例4-3】用do-while循環(huán)求1+2+3+···+100的值。運(yùn)行結(jié)果語句編寫sum=5050

4.1循環(huán)程序結(jié)構(gòu)intmain() { inti=1,sum=0; do { sum=sum+i; i++; }while(i<=100);/*當(dāng)i小于或等于100時執(zhí)行循環(huán)體*/ printf("sum=%d",sum); return0; } 程序說明:定義變量sum和變量i,累加和變量sum賦初值0,循環(huán)次數(shù)i賦初值1。do-while循環(huán)求和,先將i加到sum中,再將i自增1。反復(fù)執(zhí)行循環(huán)體,直到i大于100跳出循環(huán)。C語言程序設(shè)計(jì)【例4-4】統(tǒng)計(jì)輸入的整數(shù)的個數(shù)(輸入-1時結(jié)束,并且-1不再統(tǒng)計(jì)在內(nèi))。運(yùn)行結(jié)果語句編寫188-1輸入整數(shù)的個數(shù)是2

4.1循環(huán)程序結(jié)構(gòu)intmain() { inti=0,num; do { scanf("%d",&num); i++; }while(num!=-1);/*當(dāng)輸入的num不等于-1時,執(zhí)行循環(huán)體*/ printf("輸入整數(shù)的個數(shù)是%d\n",i-1); return0; }

程序說明:程序中的循環(huán)條件為while(num!=-1);其意義是,只要從鍵盤輸入的整數(shù)不是-1就繼續(xù)循環(huán)。循環(huán)體“i++”完成對輸入整數(shù)個數(shù)進(jìn)行計(jì)數(shù),輸出i-1,是因?yàn)楦鶕?jù)題目要求-1不能統(tǒng)計(jì)在內(nèi)。4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)for語句一般格式如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句其中,表達(dá)式1稱為初始化表達(dá)式,用于給出循環(huán)初值;表達(dá)式2稱為條件表達(dá)式,用于給出循環(huán)條件;表達(dá)式3稱為修正表達(dá)式,用來控制變量的變化,多數(shù)情況下為自增或自減表達(dá)式,實(shí)現(xiàn)對循環(huán)變量值的修正。它是在執(zhí)行完循環(huán)體后才執(zhí)行的。for循環(huán)4.1循環(huán)程序結(jié)構(gòu)C語言程序設(shè)計(jì)名師點(diǎn)睛(1)for語句可以轉(zhuǎn)換成while結(jié)構(gòu):(2)for語句中的各個表達(dá)式都可以省略,但分號間隔符不能少。例如,for(;表達(dá)式;表達(dá)式)省去了表達(dá)式1;for(表達(dá)式;;表達(dá)式)省去了表達(dá)式2;for(表達(dá)式;表達(dá)式;)省去了表達(dá)式3;for(;;)省去了全部表達(dá)式。(3)表達(dá)式1賦初值只執(zhí)行一次。C語言程序設(shè)計(jì)【例4-5】用for循環(huán)求1+2+3+···+100的值。運(yùn)行結(jié)果語句編寫sum=5050

4.1循環(huán)程序結(jié)構(gòu)intmain() { inti,sum=0; for(i=1;i<=100;i++) /*當(dāng)i小于等于100時執(zhí)行循環(huán)體*/ sum=sum+i; /*循環(huán)體語句*/ printf("sum=%d",sum); return0; }

程序說明:程序第1次執(zhí)行到for語句時,先執(zhí)行表達(dá)式i=1;,然后執(zhí)行表達(dá)式n<=100;,由于條件為真,故執(zhí)行循環(huán)體sum=sum+i;,最后回到for處執(zhí)行循環(huán)變量增值i++,接著又執(zhí)行n<=100;,條件為真,接著執(zhí)行sum=sum+i;,如此反復(fù),直到條件不為真為止。C語言程序設(shè)計(jì)【例4-6】韓信點(diǎn)兵與中國剩余原理。運(yùn)行結(jié)果語句編寫韓信統(tǒng)御的士兵最少有425002名。

4.1循環(huán)程序結(jié)構(gòu)intmain(){ inti; longx=1; for(i=1;;i++) /*省略表達(dá)式2循環(huán)條件判斷*/ if(x%3==1&&x%5==2&&x%7==4&&x%13==6&&x%17==2&&x%19==10) break; else x++; printf("韓信統(tǒng)御的士兵最少有%ld名。\n",x); return0;} 程序說明:設(shè)一個正整數(shù),被3除余數(shù)為1,被5除余數(shù)為2,被7除余數(shù)為4,被13除余數(shù)為6,被17除余數(shù)為2,被19除余數(shù)為10,求出這類數(shù)中的最小值。因此,我們可以從最小的自然數(shù)開始,一個一個地累加,如果它滿足條件,就結(jié)束循環(huán)。這樣的問題,也叫“中國剩余定理”。C語言程序設(shè)計(jì)【例4-7】編寫程序計(jì)算0.99和1.01的365次方。運(yùn)行結(jié)果語句編寫每天進(jìn)步一點(diǎn)點(diǎn),一年后為37.783434每天懶惰一點(diǎn)點(diǎn),一年后為0.025518

4.1循環(huán)程序結(jié)構(gòu)intmain(){ intday; doubleactive=1.01,slack=0.99; doubley1=1,y2=1; for(day=1;day<=365;day++) { y1=y1*active; y2=y2*slack; } printf("每天進(jìn)步一點(diǎn)點(diǎn),一年后為%f\n",y1); printf("每天懶惰一點(diǎn)點(diǎn),一年后為%f\n",y2); return0;}

4.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)循環(huán)的嵌套是指一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),也稱多重循環(huán)。循環(huán)的嵌套(1)for(){ …while(){…}…}(2)do{ … for() {…}…}while();(3)while(){ … for() {…} …}(4)for(){ … for(){…} }4.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)(1)while語句和for語句都是先判斷后循環(huán),而do-while語句是線循環(huán)后判斷。do-while語句循環(huán)要執(zhí)行一次循環(huán)體,而while語句和for語句在循環(huán)條件不成立時,循環(huán)體一次也不執(zhí)行。(2)while語句和do-while語句的表達(dá)式只有一個,控制循環(huán)結(jié)束的作用,循環(huán)變量的初值等都用其他語句完成;for語句可有三個表達(dá)式,不僅有控制循環(huán)結(jié)束的作用,還可給循環(huán)變量賦初值。(3)三種循環(huán)都能嵌套,而且它們之間還能混合嵌套。(4)三種循環(huán)都能用break結(jié)束循環(huán),用continue開始下一次循環(huán)。(5)對于同一問題,三種語句均可解決,但方便程度視具體情況而異。三種循環(huán)語句的比較C語言程序設(shè)計(jì)【例4-8】編寫程序在屏幕上輸出下三角九九乘法表。運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句intmain(){ inti,j; /*i為行,j為列*/ for(i=1;i<=9;i++) /*i控制乘法表的行數(shù)*/ { for(j=1;j<=i;j++) /*j控制乘法表的列數(shù)*/ printf("%d*%d=%-5d",i,j,i*j); printf("\n"); /*換行*/ } return0;} 程序說明:可以設(shè)置兩個整型變量i和變量j,i為外層循環(huán)體變量,j為內(nèi)層循環(huán)體變量,讓i從1循環(huán)到9,而j從1循環(huán)到i,這樣在內(nèi)層循環(huán)內(nèi)輸出i、j和i*j的值即可。C語言程序設(shè)計(jì)【例4-9】編寫程序首先輸入正確的密碼進(jìn)入游戲,密碼輸入三次錯誤退出程序。運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句程序說明:先使用while循環(huán)語句控制輸入密碼的過程,如果密碼3次輸入錯誤,則給出提示信息并退出程序。密碼通過后,使用while語句控制程序流程,如果輸入的數(shù)值不等于程序給定的值,則程序一致循環(huán)運(yùn)行下去,直到猜中給定的值。在這層while內(nèi)部又用do…while語句控制輸入值的范圍,如果輸入值不在1和100之間,就要求重新輸入。通過if…else語句判斷輸入值的范圍,并給出相應(yīng)的提示信息,直到猜中給定值,程序結(jié)束。源代碼見教材C語言程序設(shè)計(jì)【例4-10】百錢百雞問題。運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句intmain(){ inti,j,k; for(i=0;i<=20;i++) for(j=0;j<=33;j++) for(k=0;k<=100;k++) if(i+j+k==100&&5*i+3*j+k/3==100&&k%3==0) printf("公雞數(shù)為:%d,母雞數(shù)為:%d,小雞數(shù)為:%d\n",i,j,k); return0;} 程序說明:一共要買100只雞,假設(shè)公雞、母雞和小雞的數(shù)量為i、j和k,i+j+k==100成立。每種雞的數(shù)量乘以其花的錢數(shù)之和為100文錢,5*i+3*j+k/3==100成立。而3只小雞賣1文錢,所以小雞的數(shù)量k應(yīng)該是3的倍數(shù),k%3==0成立。4.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)break語句只能用在循環(huán)語句和多分支選擇結(jié)構(gòu)switch語句中,當(dāng)break語句用于switch語句中時,可使程序跳出switch語句而繼續(xù)執(zhí)行switch語句下面的一個語句;當(dāng)break語句用于while語句、do…while語句和for循環(huán)語句中時,可用于從循環(huán)體內(nèi)跳出,即使程序提前結(jié)束當(dāng)前循環(huán),轉(zhuǎn)而執(zhí)行該循環(huán)語句的下一個語句。break語句一般格式如下:break;break語句對于減少循環(huán)次數(shù),加快程序執(zhí)行起著重要的作用。break語句C語言程序設(shè)計(jì)【例4-11】計(jì)算滿足條件的最大整數(shù)i,使得1+2+3+···+i<=10000。運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句intmain(){ inti,sum=0; for(i=1;;i++) { sum=sum+i; if(sum>10000) break; } printf("最大整數(shù)i為%d,使得1+2+3+...+i<=10000\n",i-1); return0;} 程序說明:由于for語句省略了表達(dá)式2,因此,如果沒有break語句,程序?qū)o限循環(huán)下去,稱為死循環(huán)。當(dāng)i為141時,sum的值為10011,if語句中的關(guān)系表達(dá)式sum>10000為“真”,于是執(zhí)行break語句,跳出for循環(huán),執(zhí)行輸出i-1的值。最大整數(shù)i為140,使得1+2+3+···+i<=100004.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)名師點(diǎn)睛(1)break語句需要一個特殊的條件來終止循環(huán)。在多層循環(huán)中,一個break語句只能向外跳一層。(2)break語句不能用于除循環(huán)語句和switch語句之外的任何其他語句中。4.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)continue語句的作用為結(jié)束本次循環(huán),即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行循環(huán)條件的判定。continue語句的一般格式如下:continue;continue語句C語言程序設(shè)計(jì)【例4-12】輸入1~50能被6整除的數(shù)。運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句intmain(){ intn; for(n=1;n<=50;n++) { if(n%6!=0) continue; printf("%3d",n); } return0;} 程序說明:已知循環(huán)次數(shù)的情況下,可以設(shè)循環(huán)變量n從1到50進(jìn)行循環(huán),然后判斷每個自然數(shù)n是否能被6整除,將滿足條件“n%6==0”的數(shù)進(jìn)行輸出。6121824303642484.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)名師點(diǎn)睛continue語句和break語句的區(qū)別如下:(1)continue語句只能用于while語句、do…while語句和for循環(huán)語句中,用來加速循環(huán)。而break語句既可以用于while語句、do…while語句和for循環(huán)語句中,又可以用于多分支選擇結(jié)構(gòu)switch語句中。(2)continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行,而break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行條件是否成立。4.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)goto語句是無條件轉(zhuǎn)移語句,使程序跳轉(zhuǎn)到函數(shù)中任何有標(biāo)號的語句處。goto語句一般格式如下:goto<語句標(biāo)號>;goto語句通常與if語句連用,在滿足某一條件時,程序跳轉(zhuǎn)到標(biāo)號處執(zhí)行。goto語句C語言程序設(shè)計(jì)【例4-13】goto語句用法運(yùn)行結(jié)果語句編寫

4.2循環(huán)的嵌套和特殊控制語句intmain(){ inti=1,n,sum=0; printf("請輸入n的值"); scanf("%d",&n);loop:if(i<=n) { sum+=i; i++; gotoloop; } printf("s=%d\n",sum); return0;}程序說明:此處循環(huán)用goto語句實(shí)現(xiàn),首先判斷i是否小于n,如果小于則累加,繼而i自身加1,然后再轉(zhuǎn)去判斷i小于n是否成立,如此循環(huán),直到i大于n后結(jié)束循環(huán)。請輸入n的值:100s=50504.2循環(huán)的嵌套和特殊控制語句C語言程序設(shè)計(jì)名師點(diǎn)睛(1)使用goto語句易打亂控制語句,造成程序結(jié)構(gòu)不清晰,初學(xué)者應(yīng)盡量限制使用。(2)goto語句的跳轉(zhuǎn)只能在函數(shù)內(nèi)部,不能在不同的函數(shù)之間進(jìn)行。(3)goto語句可以用其他語句替代。因此僅在可以簡化控制流且提高程序執(zhí)行效率的情況下使用。4.3結(jié)構(gòu)化程序設(shè)計(jì)思想C語言程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個復(fù)雜問題的求解過程分階段進(jìn)行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。具體來說就是采取自頂向下、逐步細(xì)化、模塊化設(shè)計(jì)和結(jié)構(gòu)化編碼來保證得到結(jié)構(gòu)化的程序。結(jié)構(gòu)化程序設(shè)計(jì)方法(1)結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測試性和可維護(hù)性。(2)使用少數(shù)基本結(jié)構(gòu),使程序結(jié)構(gòu)清晰,易讀易懂。(3)容易驗(yàn)證程序的正確性。結(jié)構(gòu)化程序設(shè)計(jì)優(yōu)點(diǎn)4.4常見錯誤分析C語言程序設(shè)計(jì)忘記給變量賦初值intmain(){ inti,s; /*變量s未賦初值*/ for(i=1;i<=10;i++) { s=s*i; printf("s=%d\n",s); } return0;}4.4常見錯誤分析C語言程序設(shè)計(jì)大括號不匹配intmain(){ inti,s; for(i=1;i<=10;i++) { s=s*i; printf("s=%d\n",s); /*右大括號丟失*/ return0;}4.4常見錯誤分析C語言程序設(shè)計(jì)while語句后面多加分號intmain(){ inti=1,s=1; while(i<=10); /*while語句后多加分號*/ { s=s*i; i++; printf("s=%d\n",s); } return0;}4.4常見錯誤分析C語言程序設(shè)計(jì)for語句表達(dá)式之間使用逗號intmain(){ inti,s=1; for(i=1,i<=10,i++) /*表達(dá)

溫馨提示

  • 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

提交評論