版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024戶外廣告牌制作安裝合同
- 2024年合作投資協(xié)議書模板
- 2024苗木購銷合同范本簡單版
- 2024股東合作經(jīng)營合同協(xié)議書
- 城市街道廣告位租賃合同
- 插畫約稿合同樣本
- 二房東租房合同租房合同協(xié)議范本
- 2024股份制工程合作協(xié)議書
- 貨物運(yùn)輸合同簽訂技巧
- 4.1 夯實(shí)法治基礎(chǔ)(導(dǎo)學(xué)案) 2024-2025學(xué)年統(tǒng)編版道德與法治九年級上冊
- (培訓(xùn)體系)2020年普通話測試培訓(xùn)材料
- 3-4單元測試-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 北師版數(shù)學(xué)八年級上冊 5.8三元一次方程組課件
- 2024混合動力汽車賽道專題報(bào)告-2024-10-市場解讀
- DB34T 4338-2022 行政規(guī)范性文件合法性審核規(guī)范
- 企業(yè)單位消防安全規(guī)范化管理指導(dǎo)手冊
- 廢舊物資回收投標(biāo)方案(技術(shù)方案)
- 宣傳視頻拍攝服務(wù)投標(biāo)方案(技術(shù)方案)
- 森林防火課件下載
- 3《歡歡喜喜慶國慶》(教學(xué)設(shè)計(jì))2024-2025學(xué)年統(tǒng)編版道德與法治二年級上冊
- 2024糧改飼工作總結(jié)五篇
評論
0/150
提交評論