




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)教學(xué)目標(biāo)掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì)方法;熟練使用while語句、do-while語句和for語句實(shí)現(xiàn)程序的循環(huán)控制;理解循環(huán)的嵌套與特殊命令break和continue的使用;掌握用循環(huán)結(jié)構(gòu)程序解決實(shí)際問題的方法。教學(xué)重點(diǎn)使用while語句、do-while語句和for語句實(shí)現(xiàn)程序的循環(huán)控制;用循環(huán)結(jié)構(gòu)程序解決實(shí)際問題的方法。教學(xué)難點(diǎn)循環(huán)的嵌套;用循環(huán)結(jié)構(gòu)程序解決實(shí)際問題的方法。14.1引例——統(tǒng)計(jì)某課程的平均成績(jī)1.問題描述每學(xué)期末期教學(xué)活動(dòng)結(jié)束后,通常需要對(duì)各門課程的教學(xué)情況進(jìn)行總結(jié)。其中,統(tǒng)計(jì)課程的平均成績(jī)是考察教學(xué)效果的重要評(píng)定參數(shù)。假設(shè)某班40名同學(xué)選修了C語言程序設(shè)計(jì),要求統(tǒng)計(jì)該門課程的平均成績(jī)。
22.引例分析具體步驟如下:(1)主要變量的定義。①設(shè)定變量sum表示總成績(jī),令其初值為零,即sum=0;②設(shè)定變量score表示某位同學(xué)的成績(jī)。(2)運(yùn)算處理。①首先輸入第1位同學(xué)的成績(jī),在總成績(jī)中計(jì)入其成績(jī),即執(zhí)行語句:scanf("%d",&score);sum=sum+score;②接著,輸入第2位同學(xué)的成績(jī),在已得到的總成績(jī)基礎(chǔ)上累加,即繼續(xù)執(zhí)行語句:scanf("%d",&score);sum=sum+score;3③再輸入第3位同學(xué)的成績(jī),然后計(jì)入總成績(jī)。④繼續(xù)輸入第i位同學(xué)的成績(jī),計(jì)算總成績(jī)。即語句:scanf(“%d”,&score);sum=sum+score;重復(fù)執(zhí)行40次,得到40位同學(xué)的總成績(jī),其值存在sum中。⑤計(jì)算平均成績(jī)。用變量avg表示該門課程的平均值,則有avg=sum/n。(3)輸出結(jié)果。使用printf()函數(shù)輸出平均成績(jī)。44.2.1使用while語句實(shí)現(xiàn)引例
用while語句編寫引例的程序代碼,算法用流程圖描述如圖4-1所示:4.2
循環(huán)控制語句之一
——while
語
句圖4-1求課程平均成績(jī)的流程圖5程序代碼:#defineN40#include<stdio.h>main(){inti=1,sum=0;
/*初始化循環(huán)控制變量i和累加器sum*/
intscore;/*定義存放成績(jī)的變量score*/floatavg;/*定義存放平均成績(jī)的變量avg*/
while(i<=N){scanf("%d",&score);/*輸入第i位同學(xué)的成績(jī)*/sum+=score;
/*實(shí)現(xiàn)累加*/i++;
/*循環(huán)控制變量i增1*/}
avg=(float)sum/N;/*計(jì)算平均值*/
printf("avg=%.2f\n",avg);}6一般形式:
while(表達(dá)式)語句說明: “表達(dá)式”為循環(huán)條件;“語句”為循環(huán)體。特點(diǎn): 先判斷表達(dá)式,后執(zhí)行語句圖4-2while循環(huán)執(zhí)行流程循環(huán)控制語句之一——while
語
句7
通過引例的學(xué)習(xí),可見要構(gòu)造一個(gè)循環(huán)結(jié)構(gòu)的程序,必須明確以下三方面的要素:如何描述循環(huán)控制條件;控制條件的初始狀態(tài)的設(shè)置;循環(huán)體內(nèi)部對(duì)控制條件的影響。8【例4-1】求。9main(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf(“Thesumis%d\n",sum);}編程求解:1+2+3+……+100=?(1)若將第3行的語句“i=1;”改為“i=101;”,那么程序的運(yùn)行結(jié)果是什么?(2)若去掉第6行“i++;”,會(huì)出現(xiàn)什么結(jié)果?請(qǐng)改寫例4-1,求1—100之間所有偶數(shù)的和。10注意:while語句中的“表達(dá)式”(即判斷條件)可以是任意的表達(dá)式,但一般為關(guān)系表達(dá)式或邏輯表達(dá)式。循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句,以免形成死循環(huán)。允許循環(huán)體以空語句形式出現(xiàn)。11【例4-3】數(shù)字猜謎游戲。程序代碼:#include<stdio.h>main(){intcount=5;
intguess=8;
int
willguess;
printf("Thisisaguessinggame\n");/*重復(fù)猜數(shù)*/while(count>0){printf("Pleaseenteranumberbetween1and10whichyoumustguess:");
scanf("%d",&willguess);12if(willguess==guess){printf("Congratilations!Youguessedit.\n");return0;/*結(jié)束程序*/}elseprintf("Sorry%diswrong,pleasetryagain!\n",willguess);count--;}/*提示猜數(shù)結(jié)束信息,并給出謎底*/
printf("Youhavehadfivetriesandfailed.Thenumberis%d\n",guess);}運(yùn)行結(jié)果:13【例4-4】將輸入的一串字符顯示在屏幕上,遇到字符“$”結(jié)束。程序代碼:#include<stdio.h>main(){charc;
printf("\npleaseinputastring:");c=getchar();while(c!='$'){putchar(c);c=getchar();}}請(qǐng)思考:若第一次輸入字符時(shí)鍵入“$”,程序的運(yùn)行結(jié)果如何?144.3.1使用dowhile
語句實(shí)現(xiàn)引例
使用dowhile語句實(shí)現(xiàn)引例,算法用流程圖描述如圖4-3:圖4-3求課程平均成績(jī)的流程圖4.3
循環(huán)控制語句之二——dowhile語句15程序代碼:#defineN5#include<stdio.h>main(){inti=1,sum=0;
intscore;floatavg;do{scanf("%d",&score);sum+=score;i++;}while(i<=N);
avg=(float)sum/N;
printf("avg=%.2f\n",avg);}16一般形式:
do語句
while(表達(dá)式);特點(diǎn): 先執(zhí)行一次指定的循環(huán)內(nèi)嵌語句,然后判斷條件表達(dá)式。圖4-4dowhile循環(huán)執(zhí)行流程循環(huán)控制語句之二——dowhile語句17【例4-5】求1—100之間所有數(shù)的和,用dowhile語句編寫程序。程序代碼:#include<stdio.h>main(){inti=1,sum=0;/*
定義并初始化循環(huán)控制變量i以及
累加器sum
*/do{sum+=i;/*累加*/i++;}while(i<=100);/*循環(huán)繼續(xù)條件:i<=100*/
printf("sum=%d\n",sum);}18【例4-6】用dowhile語句改寫例4-4。源代碼見程序文件4-6.C【例4-7】輸入一個(gè)整數(shù),將其各位數(shù)字逆序輸出。源代碼見程序文件4-7.C194.4.1使用for語句實(shí)現(xiàn)引例
4.4
循環(huán)控制語句之三——for語句程序代碼:#include"stdio.h"#defineN40main(){int
i,sum=0,score;floatavg;for(i=1;i<=N;i++){scanf("%d",&score);/*輸入第i位同學(xué)的成績(jī)*/sum+=score;
/*實(shí)現(xiàn)累加*/}
printf("Thesumis%d\n",sum);
avg=(float)sum/N;
/*計(jì)算平均值*/
printf("avg=%.2f\n",avg);}20循環(huán)控制語句之三——for語句一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句說明:表達(dá)式1:循環(huán)變量賦初始值表達(dá)式2:循環(huán)條件表達(dá)式3:循環(huán)變量增值語句:循環(huán)體圖4-5for循環(huán)的執(zhí)行流程21【例4-8】求,用for語句編寫程序。#include"stdio.h"main(){int
i,sum=0;for(i=1;i<=100;i++)sum+=i;
printf("Thesumis%d\n",sum);}22【例4-9】求n!。
源代碼見程序文件4-9.C【例4-10】編寫程序,求Fibonacci數(shù)列前20個(gè)數(shù),每輸出4個(gè)數(shù)換行。源代碼見程序文件4-10.C23三種循環(huán)的比較:三種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。用while和do…while循環(huán)時(shí),循環(huán)變量初始化的操作在while和do…while語句前完成;for語句可以在表達(dá)式1中完成。24while和do…while循環(huán)只在while后面指定循環(huán)條件,且在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語句;for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中,功能更強(qiáng)。while和for循環(huán)是先判斷表達(dá)式,后執(zhí)行語句;do…while循環(huán)是先執(zhí)行語句后判斷表達(dá)式。25循環(huán)的嵌套定義: 一個(gè)循環(huán)體中又包含一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。說明:
while循環(huán)、do…while循環(huán)和for循環(huán)都可以進(jìn)行嵌套,而且可以相互嵌套。4.5應(yīng)用循環(huán)解決實(shí)際問題264.5.1使用循環(huán)嵌套統(tǒng)計(jì)學(xué)生的平均成績(jī)1.問題描述某班40名同學(xué)選修了C語言程序設(shè)計(jì)、英語、離散數(shù)學(xué)、電子技術(shù)、數(shù)據(jù)結(jié)構(gòu)等5門課程,編寫程序統(tǒng)計(jì)該班各位同學(xué)的平均成績(jī)。2.問題分析具體步驟:for(i=1;i<=40;i++)細(xì)化
{計(jì)算平均成績(jī)}for(j=1;j<=5;j++){輸入每科成績(jī);累加求總成績(jī);
}
平均成績(jī)=總成績(jī)/5;細(xì)化273.程序代碼main(){int
i,j;/*定義外循環(huán)變量i,內(nèi)循環(huán)變量j*/
int
score,sum=0;/*定義變量score存放錄入的分?jǐn)?shù),sum存放總成績(jī)*/floatavg;/*avg存放平均成績(jī)*/
for(i=1;i<=40;i++)/*外循環(huán)變量i控制人數(shù)*/{sum=0;for(j=1;j<=5;j++)/*內(nèi)循環(huán)變量j控制課程門數(shù),計(jì)算5門課的總成績(jī)*/{scanf("%d",&score);sum=sum+score;}
avg=sum*1.0/5;/*平均成績(jī)=總成績(jī)/5*/
printf("No%d\t%.2f\n",i,avg);/*顯示第i位同學(xué)的平均成績(jī)*/}}
28幾種合法的嵌套結(jié)構(gòu):while(){…while(){…}}do{…do{…}while();}while();for(;;){…for(;;){…}}while(){…do{…}while();
…}for(;;){…while(){…}
…}do{…for(;;){…}
…}while();29使用循環(huán)嵌套時(shí)注意:要保證嵌套的每一層循環(huán)在邏輯上都是完整的,避免嵌套交叉使用。要保證循環(huán)到最后有一個(gè)跳出循環(huán)的條件,否則會(huì)產(chǎn)生死循環(huán)(嵌套循環(huán)中檢查死循環(huán)錯(cuò)誤,相對(duì)來說比較困難)。在編程時(shí),注意循環(huán)嵌套的書寫最好用階梯縮進(jìn)的形式,可使程序?qū)哟畏置鳌?0【例4-11】在屏幕上輸出如圖4-7所示的下三角九九乘法表。
源代碼見程序文件4-11.C【例4-12】打印圖4-8所示的圖案。源代碼見程序文件4-12.C圖4-8*組成的圖形31break語句---無條件轉(zhuǎn)移語句一般形式:
break;功能:用在switch語句中使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句后面的語句。用在循環(huán)體內(nèi),迫使所在循環(huán)立即終止(跳出當(dāng)前循環(huán)體),繼續(xù)執(zhí)行循環(huán)體后面的第一條語句。說明:break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。32【例4-13】輸出100~200中所有的素?cái)?shù)。圖4-9判斷素?cái)?shù)的N-S流程圖程序代碼:main(){int
j,m;
intk=0;/*定義變量k統(tǒng)計(jì)素?cái)?shù)的個(gè)數(shù)*/for(m=100;m<=200;m++){if(k%10==0)
printf("\n");/*每行打印10個(gè)數(shù)*/for(j=2;j<=m-1;j++)if(m%j==0)break;if(j>=m){printf("%5d",m);k++;}}}33continue語句---無條件轉(zhuǎn)移語句一般形式:
continue;功能: 結(jié)束本次循環(huán)(跳過循環(huán)體中尚未執(zhí)行的語句),接著進(jìn)行是否執(zhí)行下一次循環(huán)的判定。continue和break的區(qū)別:continue只結(jié)束本次循環(huán),而非終止整個(gè)循環(huán)。break則是結(jié)束所在循環(huán),不再進(jìn)行條件判斷。實(shí)例參考閱讀材料三34【例4-14】編寫程序解決下列問題:將1元錢兌換成1分、2分和5分的硬幣,請(qǐng)問需要幾個(gè)1分硬幣、幾個(gè)2分硬幣以及幾個(gè)5分硬幣,列出所有的組合情況。源代碼見程序文件4-14.C354.5.2使用循環(huán)完善學(xué)生成績(jī)管理系統(tǒng)菜單1.問題描述在第3章的3.4.2節(jié)中,制作了一個(gè)學(xué)生成績(jī)管理系統(tǒng)菜單,它的使用特點(diǎn)是當(dāng)用戶從菜單中選擇某項(xiàng)操作后,程序相應(yīng)結(jié)束?,F(xiàn)將它完善為一個(gè)切實(shí)可用的菜單,可實(shí)現(xiàn)重復(fù)從菜單中選擇功能,直到用戶自愿終止系統(tǒng)運(yùn)行。36程序代碼:main(){int
sel;/*定義選擇菜單項(xiàng)的變量*/while(1)/*用1構(gòu)造一個(gè)死循環(huán)*/{
printf("\n");
printf("*****************\n");
printf("*========*\n");
printf("*1.inputgrade*\n");
printf("*2.calaveragegrade*\n");
printf("*3.sortbygrade*\n");
printf("*4.exit*\n");
printf("*========*\n");
printf("*****************\n");
37printf("pleaseselect1-4:");
scanf("%d",&sel);
switch(sel){case1:printf("run
comman:input
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商平臺(tái)與金融機(jī)構(gòu)聯(lián)合貸款服務(wù)合同
- 2025年文化旅游小鎮(zhèn)開發(fā)社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估與旅游可持續(xù)發(fā)展指標(biāo)體系構(gòu)建報(bào)告
- 2025汽車銷售合作協(xié)議合同書范本
- 現(xiàn)代化建設(shè)中的歷史文化傳承試題及答案
- 勞動(dòng)合同外派協(xié)議書
- 工程法規(guī)復(fù)習(xí)過程中常見問題的解決策略試題及答案
- 2025年金融行業(yè)移動(dòng)支付解決方案研究報(bào)告
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)在2025年異構(gòu)數(shù)據(jù)庫(kù)融合技術(shù)下的工業(yè)互聯(lián)網(wǎng)安全防護(hù)國(guó)際合作與交流報(bào)告
- 2025年工程法規(guī)考點(diǎn)集錦試題
- 精準(zhǔn)掌握的公共關(guān)系學(xué)試題及答案
- 2025年小升初語文第一次全真模擬試卷(1)(統(tǒng)編版+含答案解析)
- 廠區(qū)保安培訓(xùn)試題及答案
- 2025年消防設(shè)施操作員(中級(jí))職業(yè)技能鑒定參考試題庫(kù)(500題含答案)
- 購(gòu)銷庫(kù)爾勒香梨合同協(xié)議
- 2025年山東交通技師學(xué)院招聘筆試試題(附答案)
- (三模)豫西北教研聯(lián)盟 (平許洛濟(jì))2024-2025學(xué)年高三第三次質(zhì)量檢測(cè)英語試卷(含答案)
- 2025年海淀高三二模語文試題及答案
- 2025年智能型低壓電器、智能型低壓開關(guān)柜項(xiàng)目可行性研究方案
- 《緊急多發(fā)傷的臨床救治》課件
- 2025年危險(xiǎn)品水路運(yùn)輸從業(yè)資格考試復(fù)習(xí)題庫(kù)-上(單選題)
- 機(jī)械代理合同協(xié)議
評(píng)論
0/150
提交評(píng)論