C語言程序設(shè)計(jì)教程 第5章課件_第1頁
C語言程序設(shè)計(jì)教程 第5章課件_第2頁
C語言程序設(shè)計(jì)教程 第5章課件_第3頁
C語言程序設(shè)計(jì)教程 第5章課件_第4頁
C語言程序設(shè)計(jì)教程 第5章課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章循環(huán)結(jié)構(gòu)5.1while語句5.2do-while語句5.3for語句5.4break、continue和goto語句5.5循環(huán)的嵌套5.6復(fù)合結(jié)構(gòu)程序舉例C語言程序設(shè)計(jì)教程12/17/20221循環(huán)指一組語句的重復(fù)執(zhí)行,直到滿足一定件為止.如:1、輸入全班學(xué)生成績-----若干次輸入2、若干個(gè)數(shù)之和-----若干次求和3、若干個(gè)數(shù)排序-----若干次比較大小

……循環(huán)體:程序中需要具有重復(fù)執(zhí)行的一組語句;循環(huán)條件:循環(huán)體每重復(fù)一次就要做出是否繼續(xù)重復(fù)還是停止重復(fù)的決定,這個(gè)決定所依據(jù)的條件.12/17/20222C語言有while、do-while、和for語句三種循環(huán)結(jié)構(gòu)語句。前兩個(gè)稱為條件循環(huán),即根據(jù)條件來決定是否繼續(xù)循環(huán);后一個(gè)稱為計(jì)數(shù)循環(huán),即根據(jù)設(shè)定的執(zhí)行次數(shù)來執(zhí)行循環(huán)。12/17/20223while語句執(zhí)行流程表達(dá)式語句真假表達(dá)式首先計(jì)算表達(dá)式語句如果表達(dá)式的值為非零,執(zhí)行語句表達(dá)式重新計(jì)算表達(dá)式如果表達(dá)式的值為0,則跳出循環(huán)如果表達(dá)式的值一開始就為0,則語句一次也會被不執(zhí)行。12/17/20225while語句舉例問題:求n個(gè)學(xué)生的平均成績5_1算法:1輸入n;i=1,average=0;2輸入第i個(gè)學(xué)生的score;3average+=score;i++;4當(dāng)i<=n重復(fù)做2;5average/=n;12/17/20226main(){intn,score,i=1;floataverage=0;printf(“\nEntern:”);scanf(“%d”,&n);while(i<=n){printf(“\nEnterscore:”);scanf(“%d”,&score);average+=score;i++;}average/=n;printf(“\naverage=%f”,average);}12/17/20227while循環(huán)實(shí)例(2)main(){inti,s=0;i=1;while(i<=100){s=s+i; i++;}printf("\ns=%d\n",s);}S6_3_1.c求和:1+2+3+4+…+99+1005_2繼續(xù)12/17/20228do—while語句執(zhí)行流程首先計(jì)算語句,再計(jì)算表達(dá)式。如果表達(dá)式的值為非零,繼續(xù)下一次循環(huán)如果表達(dá)式的值為0,則跳出循環(huán)如果表達(dá)式的值一開始就為0,也會執(zhí)行一次語句。語句表達(dá)式12/17/2022105_4main(){inti=1,s=0;do{s=s+i;i++;}while(i<=100);printf("\n%d,%d\n",i,s);}求和:1+2+3+4+…+99+10012/17/202212 5.3for循環(huán)語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語句這是C語言最有特點(diǎn)的循環(huán)語句。使用最為靈活方便一般形式:12/17/202214先計(jì)算初值表達(dá)式,用于循環(huán)開始前設(shè)置變量初值。接著計(jì)算循環(huán)控制邏輯表達(dá)式,控制循環(huán)條件,決定循環(huán)次數(shù)。執(zhí)行循環(huán)體語句,這個(gè)語句也可以是其它循環(huán)。循環(huán)控制變量,修改表達(dá)式。表達(dá)式1表達(dá)式2循環(huán)體表達(dá)式3執(zhí)行流程12/17/202215例5_6:求1+2+…+99+100#include<stdio.h>main(){inti,s=0;for(i=1;i<=100;i++)s=s+i;printf("s=%d\n",s);}i=0i<100s=s+ii++12/17/202216 循環(huán)語句的多種表示for(i=0;i<=100;i++)s=s+i;5_6_1main(){inti=1,s=0;do{s=s+i;}while(++i<=100);printf("s=%d,i=%d\n",s,i);}i=0i<100s=s+ii++5_6_2main(){inti,s=0;i=0;while(i<=100){s=s+i;i++;}printf("s=%d,i=%d\n",s,i);}12/17/202217求n的階乘5_7main(){inti,n;longfac;scanf("%d",&n);fac=1;for(i=1;i<=n;i++)fac=fac*i;printf("%d!=%ld",n,fac);}12/17/202218(1)s=0;i=1;for(;i<=100;i++)s=s+i;(2)s=0;for(

i=1;;i++)s=s+i;(3)s=0;for(

i=1;i<=100;){s=s+i;i++;}無條件表達(dá)式此處為死循環(huán)for循環(huán)語句(2)無初始化表達(dá)式無修正表達(dá)式(4)s=0;i=1;for(

;i<=100;){s=s+i;i++;}無初始化表達(dá)式和修正表達(dá)式繼續(xù)12/17/202220逗號表達(dá)式逗號運(yùn)算符的主要應(yīng)用就在for語句中。for語句中的表達(dá)式1和表達(dá)式3可以是逗號表達(dá)式,特別是有兩個(gè)循環(huán)變量參與對循環(huán)的控制時(shí)。表達(dá)式1和表達(dá)式3為逗號表達(dá)式,將使程序顯得非常清晰。例:for(i=1,j=10;i<=j;i++,j--)12/17/202221for(i=a,j=b;i<=j;i++,j--)舉例5_8問題:求1/100+2/99+…+1floats=0.0;for(i=1,j=100;i<=j;i++,j--)s=s+i/j;12/17/202223 循環(huán)語句流程圖表達(dá)式語句真假語句表達(dá)式表達(dá)式1表達(dá)式2循環(huán)體表達(dá)式3while循環(huán)do—while循環(huán)for循環(huán)真假12/17/202224 循環(huán)語句流程圖的統(tǒng)一格式。循環(huán)上限循環(huán)下限循環(huán)體12/17/2022265.4break、continue、goto語句

這一類語句的功能是改變程序的結(jié)構(gòu),使程序從其所在的位置轉(zhuǎn)向另一處。這類語句是非結(jié)構(gòu)化語句12/17/202227非結(jié)構(gòu)化語句之break

它的作用是把流程轉(zhuǎn)向所在結(jié)構(gòu)之后。在switch分支結(jié)構(gòu)中,使用break語句可以使流程跳出switch分支結(jié)構(gòu)。同樣的,在循環(huán)結(jié)構(gòu)中,使用break語句使流程跳出當(dāng)前的循環(huán)層,轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語句。

簡單的說就是跳出當(dāng)前所在的結(jié)構(gòu)main()

{

ints=0,i=1:

for(;;)

{s=s+i;i++;

if(i>100)break;/*如果i>100,則退出循環(huán)*/

}

printf(“s=%d”,s);

}

本程序中,當(dāng)i>100時(shí),強(qiáng)行終止for循環(huán),繼續(xù)執(zhí)行for語句下一條語句12/17/202228 非結(jié)構(gòu)化語句之continuecontinue語句被稱為繼續(xù)語句。執(zhí)行continue語句,使本次循環(huán)提前結(jié)束,即跳過循環(huán)體中continrue語句下面的尚未執(zhí)行的循環(huán)體語句,但不結(jié)束整個(gè)循環(huán),繼續(xù)進(jìn)行下一次循環(huán)的條件判別,條件為真,繼續(xù)進(jìn)行執(zhí)行循環(huán)語句。該語句形式為:continue;12/17/202230例5.11顯示輸入的字符,如果按的是Esc鍵,則退出循環(huán);如果按的是Enter鍵,則不做任何處理,繼續(xù)輸入下一個(gè)字符。#include“conio.h”main(){charch;for(;;){ch=getch();/*字符輸入函數(shù)*/if(ch==27)/*Esc鍵的ACSII碼為27*/

break;/*退出循環(huán)*/if(ch==13)

continue;/*按的是Enter:鍵,跳過字符輸出語句*/putch(ch);/*顯示輸入的字符*/}getch();/*讓程序停一下,拍任意鍵繼續(xù)*/}12/17/202231continue語句返回作用:結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否循環(huán)的判定。main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%d”,n);}}S5_12.c輸出100~200之間不能被3整除的數(shù)12/17/202232非結(jié)構(gòu)化語句之gotogoto被稱為無條件轉(zhuǎn)移語句。由兩部分組成goto標(biāo)號;和標(biāo)號:語句它最大的好處就是可以一下子跳出多重循環(huán),而break卻不能做到這點(diǎn)。12/17/202233#include<stdio.h>main(){floatscore,average=0;intn=0;scanf(“%f”,&score);/*輸入第一個(gè)學(xué)生的分?jǐn)?shù)*/if(score<0)gotoend;/*表達(dá)式為非0,轉(zhuǎn)移到end標(biāo)號處*/loop:average+=score;n++;scanf(“%f”,&score);if(score>=0)/*表達(dá)式為非0,轉(zhuǎn)移到loop標(biāo)號處*/gotoloop;average=average/n;/*求平均成績average*/end:printf(“%6.2f”,average);/*輸出平均成績,保留兩位小數(shù)*/}5_1312/17/202234goto語句及其循環(huán)返回goto語句標(biāo)號;語句標(biāo)號用標(biāo)識符表示main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf(“%d”,sum);}5_14當(dāng)i<=100時(shí)執(zhí)行if語句(含有多個(gè)內(nèi)嵌語句),實(shí)質(zhì)就是循環(huán)執(zhí)行if的內(nèi)嵌語句sum=sum+1;i++;12/17/202235 5.5循環(huán)的嵌套在循環(huán)體語句中又有另一個(gè)完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。嵌套在循環(huán)體內(nèi)的循環(huán)稱語句稱為內(nèi)循環(huán),外面的循環(huán)語句稱為外循環(huán)。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語句,稱為多層循環(huán)。While、do-while、for三種循環(huán)都可以互相嵌套。循環(huán)嵌套的程序中,要求內(nèi)循環(huán)必須被包含在外層循環(huán)的循環(huán)體中,不允許出現(xiàn)內(nèi)外層循環(huán)體交叉的情況。12/17/202236循環(huán)的嵌套1定義:一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)結(jié)構(gòu);內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),即多層循環(huán)三種循環(huán)可以進(jìn)行本類循環(huán)的嵌套,也可以相互嵌套。如:(1)(2)while(~){…while(~){…}…}do{…do{…}while(~);…}while(~);繼續(xù)12/17/202237(5)(4)(6)嵌套2(3)for(~;~;~){…for(~;~;~){…}…}while(~){…do{…}while(~);…}for(~;~;~){…while(~){…}…}do{…for(;;){…}}while(~);繼續(xù)12/17/202238000102030405101112131415202122232425303132333435404142434445505152535455輸出結(jié)果:執(zhí)行語句段:for(i=0;i<6;i++)

{

for(j=0;j<6;j++)printf(“%3d%3d”,i,j);

putchar(‘\n’);

}12/17/202239循環(huán)嵌套舉例問題:輸出圖形5_15*********************12/17/202240分析:一共6行,每行的‘*’數(shù)目與行號相同算法:行用i表示,當(dāng)i<=6do{輸出i個(gè)‘*’換行}inti,j;for(i=1;i<7;i++){printf("\n");for(j=1;j<=i;j++)

putchar('*');}12/17/202241main(){inti,j;for(i=1;i<7;i++){printf("\n");for(j=1;j<=i;j++)putchar('*');}}12/17/202242

循環(huán)嵌套舉例問題:輸出圖形****************

12/17/202243main(){inti,j;for(i=1;i<=4;i++){printf("\n");for(j=1;j<=4-i;j++)printf("");for(j=1;j<=2*i-1;j++) printf("*");}}12/17/202244復(fù)合程序結(jié)構(gòu)C語言允許循環(huán)語句與分支結(jié)構(gòu)語句聯(lián)用,即在循環(huán)體包含一個(gè)完整的分支結(jié)構(gòu),這樣的程序結(jié)構(gòu)被稱為復(fù)合程序結(jié)構(gòu)。復(fù)合程序結(jié)構(gòu)同樣必須做到嵌套層次清楚,決不允許出現(xiàn)嵌套層次之間相互交叉的情況。12/17/202245例:給多個(gè)學(xué)生的成績評級。#include<stdio.h>

#include<conio.h>

main()

{inti,score;

scanf("%d",&score);

while(score>=0)

{switch(score/10)

{case10:

case9:printf("%d:A\n",score);break;

case8:

case7:printf("%d:B\n",score);break;

case6:printf("%d:C\n",score);break;

defa

溫馨提示

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

評論

0/150

提交評論