版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章循環(huán)控制6.3用while語(yǔ)句實(shí)現(xiàn)循環(huán)6.4用do-while語(yǔ)句實(shí)現(xiàn)循環(huán)6.5用for語(yǔ)句實(shí)現(xiàn)循環(huán)6.6循環(huán)的嵌套6.8break語(yǔ)句和continue語(yǔ)句6.9案例:圍著操場(chǎng)跑5圈12345重復(fù)多次同樣的事情,可用循環(huán)解決沒(méi)跑完五圈嗎?跑是否6.1概述初始情況我們可以用表達(dá)式語(yǔ)句完成;條件表示一般仍然用關(guān)系表達(dá)式或邏輯表達(dá)式循環(huán)部分結(jié)構(gòu)C語(yǔ)言提供了3條循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)(1)用while語(yǔ)句。(2)用do-while語(yǔ)句。(3)用for語(yǔ)句。初始化6.3用while語(yǔ)句實(shí)現(xiàn)循環(huán)一、while循環(huán)的一般形式如下:
初始化部分;while(表達(dá)式)
{語(yǔ)句}表達(dá)式語(yǔ)句非00如果值為真如果值為假
二、while語(yǔ)句的執(zhí)行過(guò)程是:1.先執(zhí)行初始化部分2.計(jì)算while后面圓括號(hào)內(nèi)表達(dá)式的值;
3.如果其值為“真”(非0),則執(zhí)行語(yǔ)句部分(即循環(huán)體);重復(fù)2。4.如果值為“假”(0)時(shí),循環(huán)結(jié)束,程序控制轉(zhuǎn)至循環(huán)結(jié)構(gòu)的下一語(yǔ)句。
案例T6_1.c:求1~5的累計(jì)和分析:設(shè)一個(gè)累加器,將1~5一一的累加到里面
加到sum中0sumi112336410515初始情況:i=sum=重復(fù)5次做的事是:重復(fù)做的條件:10sum=sum+i同時(shí)i要增1i為1~5都要做三、程序練習(xí):1.求1+2+……+100之和;50502.求2+4+……+100之和;25503.求1+3+……+99之和;25004.求1~100的偶數(shù)和及奇數(shù)和;5.輸入N個(gè)學(xué)生成績(jī),求其平均值;求和算法:sum=0;x=初始值;while(條件){sum=sum+x;
下一個(gè)x的變化;}源代碼:#include<stdio.h>voidmain(){charch;intcount=0;printf("Typeinasentence,thenpress<Enter>\n");ch=getchar();/*初始化第一個(gè)字符*/while(ch!=′\n′)/*循環(huán)條件*/{if(ch==‘A’)count++;/*循環(huán)體*/ch=getchar();}printf("\nAcountis%d.\n",count);}[程序演示]6.4用do-while語(yǔ)句實(shí)現(xiàn)循環(huán)一、do-while循環(huán)的一般形式如下:初始化部分;
do{語(yǔ)句}
while(表達(dá)式);初始化表達(dá)式語(yǔ)句非00如果值為真如果值為假
二、do—while語(yǔ)句的執(zhí)行過(guò)程是:1.先執(zhí)行初始化部分2.執(zhí)行語(yǔ)句部分(即循環(huán)體);
3.計(jì)算while后面圓括號(hào)內(nèi)表達(dá)式的值;如果其值為“真”(非0),重復(fù)2。4.如果值為“假”(0)時(shí),循環(huán)結(jié)束,程序控制轉(zhuǎn)至循環(huán)結(jié)構(gòu)的下一語(yǔ)句。
改寫(xiě)案例T6_1.c:求1~5的累計(jì)和。初始化表達(dá)式語(yǔ)句非00sum=0,i=1sum+=ii=i+1i<=5#include<stdio.h>voidmain(){intsum,i;sum=0,i=1;do{sum=sum+i;i=i+1;}while(i<=5);printf(“sum=%d”,sum);}while和do_while之間的區(qū)分1.對(duì)同一個(gè)問(wèn)題用while語(yǔ)句處理,也可以用do_while語(yǔ)句處理,并且初始化部分、循環(huán)體部分、條件部分都是一樣的。2.樣式上不同點(diǎn),while語(yǔ)句中while(條件)后無(wú)“;”,而do_while語(yǔ)句中while(條件)后一定要加“;”。3.執(zhí)行上不同點(diǎn),while語(yǔ)句是先判定條件,再執(zhí)行循環(huán)體,如果一開(kāi)始條件為假,則有可能一次也不執(zhí)行循環(huán)體,故又稱(chēng)0次循環(huán)。do_while語(yǔ)句是先執(zhí)行循環(huán)體,再判定條件,如果一開(kāi)始條件為假,則也要先執(zhí)行一次循環(huán)體,故又稱(chēng)1次循環(huán)。例:若x的初始值從8開(kāi)始,比較下面兩個(gè)程序的運(yùn)行結(jié)果。
#include<stdio.h>voidmain(){intsum,i;sum=0,i=8do{sum=sum+i;i=i+1;}while(i<=5);printf(“sum=%d”,sum);}#include<stdio.h>voidmain(){intsum,i;sum=0,i=8;while(i<=5){sum=sum+i;i=i+1;}printf(“sum=%d”,sum);}結(jié)果為sum=8結(jié)果為sum=0#include<stdio.h>voidmain(){intx,sum;sum=0;do{scanf("%d",&x);sum=sum+x;}while(x!=-1)sum=sum+1;/*為什么要加這條語(yǔ)句*/printf("sumis:%d\n",sum);[程序演示]求解表達(dá)式36.5用for語(yǔ)句實(shí)現(xiàn)循環(huán)一、for循環(huán)語(yǔ)句的一般形式如下:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體語(yǔ)句;}
求解表達(dá)式1表達(dá)式2語(yǔ)句非00如果值為真如果值為假for語(yǔ)句最簡(jiǎn)單的應(yīng)用形式,也是最容易理解的形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){語(yǔ)句}
例如,求1~5之和;(控制循環(huán)次數(shù)的是從幾加到幾結(jié)束)可寫(xiě)為
for(i=1;i<=5;i++)sum=sum+i;循環(huán)變量為控制循環(huán)次數(shù)的變量(循環(huán)條件中的變量)案例T6_4.c:計(jì)算1至50中是7的倍數(shù)的數(shù)值之和。#include<stdio.h>voidmain(){inti,sum=0;for(i=1;i<=50;i++)if(i%7==0)sum+=i;printf("sum=%d\n",sum);}[程序演示]
所以for語(yǔ)句中的表達(dá)式1,可以看成初始化部分,表達(dá)式2可以看成條件部分,表達(dá)式3可以看成循環(huán)的一部分。
sum=0;i=0;while(i<=5){sum=sum+i;i=i+1;}for(sum=0,i=0;i<=5;sum+=i,i++);sum=0;i=0;for(;i<=5;){sum+=i;i++;}6.6循環(huán)的嵌套
當(dāng)一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)時(shí),稱(chēng)為多重循環(huán)或循環(huán)嵌套,其循環(huán)結(jié)構(gòu)可用上述三種循環(huán)語(yǔ)句的任意一種。例如,下面是兩種循環(huán)嵌套的示意圖。(1)while(){
while(){}}……(2)for(;;){
do{}while();}………i=1i<=N畫(huà)第i行;#defineN3#include<stdio.h>voidmain(){inti;i=1;while(i<=N){
畫(huà)第i行*;
printf(“\n”);}}for(j=1;j<=i;j++){printf(“*”);}[程序演示]注:循環(huán)嵌套中每層循環(huán)變量名一般是不能一樣的。換行j=1j<=i畫(huà)一個(gè)*程序練習(xí):1.輸出以下圖形當(dāng)N=3時(shí),輸出*********2.輸出九九乘法表1*1=11*2=22*2=41*3=32*3=63*3=9 ……1*9=92*9=183*9=27……9*9=81
當(dāng)N=4時(shí),輸出****************畫(huà)圖算法:一般設(shè)置兩個(gè)兩層循環(huán),外層循環(huán)控制畫(huà)幾行,內(nèi)層循環(huán)控制每一行如何畫(huà)for(i=1;i<=N;i++)/*i變量控制從第1行畫(huà)到第N行*/{
畫(huà)出每i行;/*用循環(huán)設(shè)置第i行如何畫(huà)*/
換行;}#defineN9#include<stdio.h>voidmain(){inti,j;
for(i=1;i<=N;i++){
for(j=1;j<=i;j++)printf(“%d*%d=%d\t”,j,i,j*i);printf(“\n”);}}[程序演示]6.8break語(yǔ)句和continue語(yǔ)句一、break語(yǔ)句1.形式為:break;
2.作用:
結(jié)束本層循環(huán)(用在循環(huán)體中)3.一般使用形式
與if語(yǔ)句聯(lián)合使用if(條件)break;例:#include<stdio.h>voidmain(){inti,sum=0;
for(i=1;i<=100;i++){
if(sum>12)break;printf(“sum=%d\n”,sum);}}結(jié)果為:sum=154.使用break語(yǔ)句應(yīng)注意如下幾個(gè)問(wèn)題:(1)break語(yǔ)句只能用于switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu),如果在程序中有下列語(yǔ)句:
if(…)break;則此時(shí)的if語(yǔ)句一定位于循環(huán)體中或switch結(jié)構(gòu)中,break語(yǔ)句跳出的也不是if語(yǔ)句,而是跳出包含此if語(yǔ)句的循環(huán)結(jié)構(gòu)或switch結(jié)構(gòu)。
(2)在循環(huán)語(yǔ)句嵌套使用的情況下,break語(yǔ)句只能跳出(或終止)它所在的循環(huán),而不能同時(shí)跳出(或終止)多層循環(huán),如:
for(…){for(…){…break;}
…/*注1*/}例:#include<stdio.h>voidmain(){inti,j,sum=0;
for(i=1;i<=5;i++){
for(j=1;j<=i;j++){sum=i*j;if(sum>=10)break;}printf(“j=%d\tsum=%d\n”,j,sum);}}結(jié)果為:j=1sum=1j=2sum=4j=3sum=9j=3sum=12j=2sum=10案例T6_6.c:求m是否是素?cái)?shù)。素?cái)?shù)(>=2的整數(shù)):只能被1和本身整除的整數(shù)判斷方法:拿m去整除2~m-1中所有的數(shù),如果有一個(gè)能被整除,則不是素?cái)?shù),如果都不能整除,則為素?cái)?shù)。
m%2==0?m%3==0?……m%(m-1)==0?[程序演示]m%i==0?(i從2到m-1)break法#include<stdio.h>voidmain(){inti,m;printf(“pleaseinputanum:”);scanf(“%d”,&m);
for(i=2;i<=m-1;i++){if(m%i==0)break;}if(i>m-1)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]flag法#include<math.h>#include<stdio.h>voidmain(){inti,m,k,flag=1;/*flag為1則為素?cái)?shù),為0則為素?cái)?shù)*/printf(“pleaseinputanum:”);scanf(“%d”,&m);k=sqrt(m);/*簡(jiǎn)化為1~*/
for(i=2;i<=k&&flag;i++){if(m%i==0)flag=0;/*可得m為非素?cái)?shù)*/}if(flag)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]二、continue語(yǔ)句1.continue語(yǔ)句的一般形式如下:
continue;2.continue語(yǔ)句的作用是:
結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,直接進(jìn)行下一次是否執(zhí)行循環(huán)的判定。
其執(zhí)行過(guò)程是:終止當(dāng)前這一輪循環(huán),即跳過(guò)循環(huán)體中位于continue后面的語(yǔ)句而立即開(kāi)始下一輪循環(huán);對(duì)于while和do-while來(lái)講,這意味著立即執(zhí)行條件測(cè)試部分,而對(duì)于for語(yǔ)句來(lái)講,則意味著立即求解表達(dá)式3。案例T6_7.c:把100到150之間的不能被3整除的數(shù)輸出,要求一行輸出10個(gè)數(shù)。main(){intn,i=0;for(n=100;n<=150;n++){if(n%3==0)/*能被3整除,不用輸出,結(jié)束本次循環(huán)*/continue;printf("%4d",n);i++;if(i%10==0)printf("\n");}}[程序演示]運(yùn)行結(jié)果:1001011031041061071091101121131151161181191211221241251271281301311331341361371391401421431451461481496.9程序舉例案例T6_8.c:用公式求出π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。分析:這是一個(gè)求和問(wèn)題,可以看成
sum=sum+xx從1到(+)x=sign*
符號(hào)sign一次正一次負(fù);
n為1,3,5,7……
#include<stdio.h>#include<math.h>voidmain(){floatsum,pi,x,intn,sign=1;sum=0;n=1;x=sign*n;while(fabs(x)>=1e-6){sum=sum+x;n=n+2;sign=sign*-1;x=sign*n;}pi=sum*4;printf(“pi=%f”,pi);}[程序演示]#include<stdio.h>#include<math.h>voidmain(){floatsum,pi,x,intn,sign=1;sum=0;n=1;x=sign*n;while(fabs(x)>=1e-6){sum=sum+x;n=n+2;sign=sign*-1;x=sign*n;}pi=sum*4;printf(“pi=%f”,pi);}[程序演示]案例T6_9.c:求Fibonacci數(shù)列前20個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2兩個(gè)數(shù)為1、1。從第三個(gè)數(shù)開(kāi)始,該數(shù)是其前兩個(gè)數(shù)之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)
分析:已知F1和F2,從F3求到F20(重復(fù)17次)F3=F1+F2F4=F2+F3F5=F3+F4……形式一樣,變量名不一樣FFFF1F1=F2F2=F3=FF2F1F2#include<stdio.h>voidmain(){intF1,F2,F,i;F1=1;F2=1;printf(“%5d%5d”,F1,F2);for(i=3;i<=20;i++){F=F1+F2;printf(“%5d”,F);if(i==5)printf(“\n”);F1=F2;F2=F;}}[程序演示]案例T6_10.c:輸入20個(gè)數(shù),求其中的最大值方法:擂臺(tái)法:擂臺(tái)……比拼,設(shè)2號(hào)贏,1號(hào)滾蛋,擂臺(tái)上此時(shí)站的是2號(hào)3號(hào)與擂臺(tái)上的人繼續(xù)比拼,設(shè)2號(hào)贏,3號(hào)滾蛋,擂臺(tái)上此時(shí)站的可能還是2號(hào)以此類(lèi)推從2號(hào)到最后一個(gè)人一一的與擂臺(tái)上的人比拼,誰(shuí)贏,誰(shuí)站在擂臺(tái)上,誰(shuí)輸誰(shuí)滾蛋,最后在擂臺(tái)上就是最強(qiáng)的。#include<stdio.h>voidmain(){intx,max,i;/*擂臺(tái)用max表示*/scanf(“%d”,&x);/*輸入第1個(gè)數(shù)*/max=x;/*第1個(gè)先站在擂臺(tái)上*/for(i=2;i<=20;i++){scanf(“%d”,&x);/*輸入下一個(gè)數(shù)*/if(x>max)max=x;/*x與max比拼,比
max大,x就是max*/
溫馨提示
- 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ì)圖紙
- 自行車(chē)的人機(jī)課程設(shè)計(jì)
- 荒島植物辨識(shí)課程設(shè)計(jì)
- 泵房的課程設(shè)計(jì)
- 智慧物流課課程設(shè)計(jì)
- 英語(yǔ)思維導(dǎo)圖課程設(shè)計(jì)
- 古泉1100kV千伏GIS安裝施工方案(報(bào)公司審核)
- 植物根莖科學(xué)課程設(shè)計(jì)
- 長(zhǎng)沙交通集團(tuán)日常維修定點(diǎn)項(xiàng)目招標(biāo)文件
- 物體打擊 課程設(shè)計(jì)
- 物業(yè)服務(wù)水電維修方案
- 2024至2030年中國(guó)生活用紙機(jī)械行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2024-2030年中國(guó)蔬菜種植市場(chǎng)發(fā)展方向及前景需求趨勢(shì)報(bào)告
- 2024年水生產(chǎn)處理工(初級(jí))職業(yè)技能鑒定考試題庫(kù)(含答案)
- 勞動(dòng)合同變更確認(rèn)書(shū)
- 象棋培訓(xùn)機(jī)構(gòu)合伙協(xié)議
- 2025屆貴州遵義市桐梓縣數(shù)學(xué)七年級(jí)第一學(xué)期期末經(jīng)典試題含解析
- 藍(lán)色糧倉(cāng)-水產(chǎn)學(xué)專(zhuān)業(yè)導(dǎo)論智慧樹(shù)知到期末考試答案章節(jié)答案2024年中國(guó)海洋大學(xué)、山東大學(xué)、中國(guó)科學(xué)院海洋研究所、上海海洋大學(xué)、華中農(nóng)業(yè)大學(xué)、大連海洋大學(xué)、集美大學(xué)
- (高清版)JTGT D31-06-2017 季節(jié)性凍土地區(qū)公路設(shè)計(jì)與施工技術(shù)規(guī)范
- 幼兒園健康體檢活動(dòng)方案及流程
- 二年級(jí)乘除法口算題計(jì)算練習(xí)大全2000題(可直接打印)
評(píng)論
0/150
提交評(píng)論