版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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語(yǔ)句、do-while語(yǔ)句和for語(yǔ)句實(shí)現(xiàn)程序的循環(huán)控制;理解循環(huán)的嵌套與特殊命令break和continue的使用;掌握用循環(huán)結(jié)構(gòu)程序解決實(shí)際問(wèn)題的方法。教學(xué)重點(diǎn)使用while語(yǔ)句、do-while語(yǔ)句和for語(yǔ)句實(shí)現(xiàn)程序的循環(huán)控制;用循環(huán)結(jié)構(gòu)程序解決實(shí)際問(wèn)題的方法。教學(xué)難點(diǎn)循環(huán)的嵌套;用循環(huán)結(jié)構(gòu)程序解決實(shí)際問(wèn)題的方法。14.1引例——統(tǒng)計(jì)某課程的平均成績(jī)1.問(wèn)題描述每學(xué)期末期教學(xué)活動(dòng)結(jié)束后,通常需要對(duì)各門(mén)課程的教學(xué)情況進(jìn)行總結(jié)。其中,統(tǒng)計(jì)課程的平均成績(jī)是考察教學(xué)效果的重要評(píng)定參數(shù)。假設(shè)某班40名同學(xué)選修了C語(yǔ)言程序設(shè)計(jì),要求統(tǒng)計(jì)該門(mén)課程的平均成績(jī)。
22.引例分析具體步驟如下:(1)主要變量的定義。①設(shè)定變量sum表示總成績(jī),令其初值為零,即sum=0;②設(shè)定變量score表示某位同學(xué)的成績(jī)。(2)運(yùn)算處理。①首先輸入第1位同學(xué)的成績(jī),在總成績(jī)中計(jì)入其成績(jī),即執(zhí)行語(yǔ)句:scanf("%d",&score);sum=sum+score;②接著,輸入第2位同學(xué)的成績(jī),在已得到的總成績(jī)基礎(chǔ)上累加,即繼續(xù)執(zhí)行語(yǔ)句:scanf("%d",&score);sum=sum+score;3③再輸入第3位同學(xué)的成績(jī),然后計(jì)入總成績(jī)。④繼續(xù)輸入第i位同學(xué)的成績(jī),計(jì)算總成績(jī)。即語(yǔ)句:scanf(“%d”,&score);sum=sum+score;重復(fù)執(zhí)行40次,得到40位同學(xué)的總成績(jī),其值存在sum中。⑤計(jì)算平均成績(jī)。用變量avg表示該門(mén)課程的平均值,則有avg=sum/n。(3)輸出結(jié)果。使用printf()函數(shù)輸出平均成績(jī)。44.2.1使用while語(yǔ)句實(shí)現(xiàn)引例
用while語(yǔ)句編寫(xiě)引例的程序代碼,算法用流程圖描述如圖4-1所示:4.2
循環(huán)控制語(yǔ)句之一
——while
語(yǔ)
句圖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á)式)語(yǔ)句說(shuō)明: “表達(dá)式”為循環(huán)條件;“語(yǔ)句”為循環(huán)體。特點(diǎn): 先判斷表達(dá)式,后執(zhí)行語(yǔ)句圖4-2while循環(huán)執(zhí)行流程循環(huán)控制語(yǔ)句之一——while
語(yǔ)
句7
通過(guò)引例的學(xué)習(xí),可見(jiàn)要構(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行的語(yǔ)句“i=1;”改為“i=101;”,那么程序的運(yùn)行結(jié)果是什么?(2)若去掉第6行“i++;”,會(huì)出現(xiàn)什么結(jié)果?請(qǐng)改寫(xiě)例4-1,求1—100之間所有偶數(shù)的和。10注意:while語(yǔ)句中的“表達(dá)式”(即判斷條件)可以是任意的表達(dá)式,但一般為關(guān)系表達(dá)式或邏輯表達(dá)式。循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句,以免形成死循環(huán)。允許循環(huán)體以空語(yǔ)句形式出現(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
語(yǔ)句實(shí)現(xiàn)引例
使用dowhile語(yǔ)句實(shí)現(xiàn)引例,算法用流程圖描述如圖4-3:圖4-3求課程平均成績(jī)的流程圖4.3
循環(huán)控制語(yǔ)句之二——dowhile語(yǔ)句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語(yǔ)句
while(表達(dá)式);特點(diǎn): 先執(zhí)行一次指定的循環(huán)內(nèi)嵌語(yǔ)句,然后判斷條件表達(dá)式。圖4-4dowhile循環(huán)執(zhí)行流程循環(huán)控制語(yǔ)句之二——dowhile語(yǔ)句17【例4-5】求1—100之間所有數(shù)的和,用dowhile語(yǔ)句編寫(xiě)程序。程序代碼:#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語(yǔ)句改寫(xiě)例4-4。源代碼見(jiàn)程序文件4-6.C【例4-7】輸入一個(gè)整數(shù),將其各位數(shù)字逆序輸出。源代碼見(jiàn)程序文件4-7.C194.4.1使用for語(yǔ)句實(shí)現(xiàn)引例
4.4
循環(huán)控制語(yǔ)句之三——for語(yǔ)句程序代碼:#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)控制語(yǔ)句之三——for語(yǔ)句一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句說(shuō)明:表達(dá)式1:循環(huán)變量賦初始值表達(dá)式2:循環(huán)條件表達(dá)式3:循環(huán)變量增值語(yǔ)句:循環(huán)體圖4-5for循環(huán)的執(zhí)行流程21【例4-8】求,用for語(yǔ)句編寫(xiě)程序。#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!。
源代碼見(jiàn)程序文件4-9.C【例4-10】編寫(xiě)程序,求Fibonacci數(shù)列前20個(gè)數(shù),每輸出4個(gè)數(shù)換行。源代碼見(jiàn)程序文件4-10.C23三種循環(huán)的比較:三種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。用while和do…while循環(huán)時(shí),循環(huán)變量初始化的操作在while和do…while語(yǔ)句前完成;for語(yǔ)句可以在表達(dá)式1中完成。24while和do…while循環(huán)只在while后面指定循環(huán)條件,且在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句;for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中,功能更強(qiáng)。while和for循環(huán)是先判斷表達(dá)式,后執(zhí)行語(yǔ)句;do…while循環(huán)是先執(zhí)行語(yǔ)句后判斷表達(dá)式。25循環(huán)的嵌套定義: 一個(gè)循環(huán)體中又包含一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)的嵌套。說(shuō)明:
while循環(huán)、do…while循環(huán)和for循環(huán)都可以進(jìn)行嵌套,而且可以相互嵌套。4.5應(yīng)用循環(huán)解決實(shí)際問(wèn)題264.5.1使用循環(huán)嵌套統(tǒng)計(jì)學(xué)生的平均成績(jī)1.問(wèn)題描述某班40名同學(xué)選修了C語(yǔ)言程序設(shè)計(jì)、英語(yǔ)、離散數(shù)學(xué)、電子技術(shù)、數(shù)據(jù)結(jié)構(gòu)等5門(mén)課程,編寫(xiě)程序統(tǒng)計(jì)該班各位同學(xué)的平均成績(jī)。2.問(wèn)題分析具體步驟: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控制課程門(mén)數(shù),計(jì)算5門(mén)課的總成績(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ì)來(lái)說(shuō)比較困難)。在編程時(shí),注意循環(huán)嵌套的書(shū)寫(xiě)最好用階梯縮進(jìn)的形式,可使程序?qū)哟畏置鳌?0【例4-11】在屏幕上輸出如圖4-7所示的下三角九九乘法表。
源代碼見(jiàn)程序文件4-11.C【例4-12】打印圖4-8所示的圖案。源代碼見(jiàn)程序文件4-12.C圖4-8*組成的圖形31break語(yǔ)句---無(wú)條件轉(zhuǎn)移語(yǔ)句一般形式:
break;功能:用在switch語(yǔ)句中使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語(yǔ)句后面的語(yǔ)句。用在循環(huán)體內(nèi),迫使所在循環(huán)立即終止(跳出當(dāng)前循環(huán)體),繼續(xù)執(zhí)行循環(huán)體后面的第一條語(yǔ)句。說(shuō)明:break語(yǔ)句不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其他語(yǔ)句中。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語(yǔ)句---無(wú)條件轉(zhuǎn)移語(yǔ)句一般形式:
continue;功能: 結(jié)束本次循環(huán)(跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句),接著進(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】編寫(xiě)程序解決下列問(wèn)題:將1元錢(qián)兌換成1分、2分和5分的硬幣,請(qǐng)問(wèn)需要幾個(gè)1分硬幣、幾個(gè)2分硬幣以及幾個(gè)5分硬幣,列出所有的組合情況。源代碼見(jiàn)程序文件4-14.C354.5.2使用循環(huán)完善學(xué)生成績(jī)管理系統(tǒng)菜單1.問(wèn)題描述在第3章的3.4.2節(jié)中,制作了一個(gè)學(xué)生成績(jī)管理系統(tǒng)菜單,它的使用特點(diǎn)是當(dāng)用戶從菜單中選擇某項(xiàng)操作后,程序相應(yīng)結(jié)束。現(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 污水處理多源數(shù)據(jù)融合-洞察分析
- 炭疽疫苗毒株變異分析-洞察分析
- 游戲劇情制作與敘事設(shè)計(jì)-洞察分析
- 托烷司瓊與藥物不良反應(yīng)-洞察分析
- 消費(fèi)升級(jí)與個(gè)性化需求-洞察分析
- 虛擬試戴技術(shù)應(yīng)用分析-洞察分析
- 醫(yī)生個(gè)人工作總結(jié)范文1500字(7篇)
- 網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)線段樹(shù)方法-洞察分析
- 醫(yī)院帶教老師工作總結(jié)(5篇)
- 農(nóng)村地區(qū)農(nóng)業(yè)金融產(chǎn)品創(chuàng)新實(shí)踐
- 2022年檔案管理員資格考試題庫(kù)及答案-精簡(jiǎn)版
- CA6140型車(chē)床電氣控制線路的檢修
- 堿爐安裝淺談
- 齒輪傳動(dòng)的設(shè)計(jì)論文
- 硬筆書(shū)法田字格紙張
- 國(guó)家開(kāi)放大學(xué)《納稅籌劃》章節(jié)測(cè)試參考答案
- 概率論與數(shù)理統(tǒng)計(jì)課后習(xí)題與答案
- 上海市醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范實(shí)施細(xì)則
- EVM500在電纜中應(yīng)用
- 建渣處置-運(yùn)輸方案(共4頁(yè))
- 空心板計(jì)算書(shū)
評(píng)論
0/150
提交評(píng)論