




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章循環(huán)控制6.3用while語句實現(xiàn)循環(huán)6.4用do-while語句實現(xiàn)循環(huán)6.5用for語句實現(xiàn)循環(huán)6.6循環(huán)的嵌套6.8break語句和continue語句6.9案例:圍著操場跑5圈12345重復多次同樣的事情,可用循環(huán)解決沒跑完五圈嗎?跑是否6.1概述初始情況我們可以用表達式語句完成;條件表示一般仍然用關(guān)系表達式或邏輯表達式循環(huán)部分結(jié)構(gòu)C語言提供了3條循環(huán)語句來實現(xiàn)(1)用while語句。(2)用do-while語句。(3)用for語句。初始化6.3用while語句實現(xiàn)循環(huán)一、while循環(huán)的一般形式如下:
初始化部分;while(表達式)
{語句}表達式語句非00如果值為真如果值為假
二、while語句的執(zhí)行過程是:1.先執(zhí)行初始化部分2.計算while后面圓括號內(nèi)表達式的值;
3.如果其值為“真”(非0),則執(zhí)行語句部分(即循環(huán)體);重復2。4.如果值為“假”(0)時,循環(huán)結(jié)束,程序控制轉(zhuǎn)至循環(huán)結(jié)構(gòu)的下一語句。
案例T6_1.c:求1~5的累計和分析:設(shè)一個累加器,將1~5一一的累加到里面
加到sum中0sumi112336410515初始情況:i=sum=重復5次做的事是:重復做的條件:10sum=sum+i同時i要增1i為1~5都要做三、程序練習:1.求1+2+……+100之和;50502.求2+4+……+100之和;25503.求1+3+……+99之和;25004.求1~100的偶數(shù)和及奇數(shù)和;5.輸入N個學生成績,求其平均值;求和算法:sum=0;x=初始值;while(條件){sum=sum+x;
下一個x的變化;}源代碼:#include<stdio.h>voidmain(){charch;intcount=0;printf("Typeinasentence,thenpress<Enter>\n");ch=getchar();/*初始化第一個字符*/while(ch!=′\n′)/*循環(huán)條件*/{if(ch==‘A’)count++;/*循環(huán)體*/ch=getchar();}printf("\nAcountis%d.\n",count);}[程序演示]6.4用do-while語句實現(xiàn)循環(huán)一、do-while循環(huán)的一般形式如下:初始化部分;
do{語句}
while(表達式);初始化表達式語句非00如果值為真如果值為假
二、do—while語句的執(zhí)行過程是:1.先執(zhí)行初始化部分2.執(zhí)行語句部分(即循環(huán)體);
3.計算while后面圓括號內(nèi)表達式的值;如果其值為“真”(非0),重復2。4.如果值為“假”(0)時,循環(huán)結(jié)束,程序控制轉(zhuǎn)至循環(huán)結(jié)構(gòu)的下一語句。
改寫案例T6_1.c:求1~5的累計和。初始化表達式語句非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.對同一個問題用while語句處理,也可以用do_while語句處理,并且初始化部分、循環(huán)體部分、條件部分都是一樣的。2.樣式上不同點,while語句中while(條件)后無“;”,而do_while語句中while(條件)后一定要加“;”。3.執(zhí)行上不同點,while語句是先判定條件,再執(zhí)行循環(huán)體,如果一開始條件為假,則有可能一次也不執(zhí)行循環(huán)體,故又稱0次循環(huán)。do_while語句是先執(zhí)行循環(huán)體,再判定條件,如果一開始條件為假,則也要先執(zhí)行一次循環(huán)體,故又稱1次循環(huán)。例:若x的初始值從8開始,比較下面兩個程序的運行結(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;/*為什么要加這條語句*/printf("sumis:%d\n",sum);[程序演示]求解表達式36.5用for語句實現(xiàn)循環(huán)一、for循環(huán)語句的一般形式如下:
for(表達式1;表達式2;表達式3){循環(huán)體語句;}
求解表達式1表達式2語句非00如果值為真如果值為假for語句最簡單的應(yīng)用形式,也是最容易理解的形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){語句}
例如,求1~5之和;(控制循環(huán)次數(shù)的是從幾加到幾結(jié)束)可寫為
for(i=1;i<=5;i++)sum=sum+i;循環(huán)變量為控制循環(huán)次數(shù)的變量(循環(huán)條件中的變量)案例T6_4.c:計算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語句中的表達式1,可以看成初始化部分,表達式2可以看成條件部分,表達式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)的嵌套
當一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu)時,稱為多重循環(huán)或循環(huán)嵌套,其循環(huán)結(jié)構(gòu)可用上述三種循環(huán)語句的任意一種。例如,下面是兩種循環(huán)嵌套的示意圖。(1)while(){
while(){}}……(2)for(;;){
do{}while();}………i=1i<=N畫第i行;#defineN3#include<stdio.h>voidmain(){inti;i=1;while(i<=N){
畫第i行*;
printf(“\n”);}}for(j=1;j<=i;j++){printf(“*”);}[程序演示]注:循環(huán)嵌套中每層循環(huán)變量名一般是不能一樣的。換行j=1j<=i畫一個*程序練習:1.輸出以下圖形當N=3時,輸出*********2.輸出九九乘法表1*1=11*2=22*2=41*3=32*3=63*3=9 ……1*9=92*9=183*9=27……9*9=81
當N=4時,輸出****************畫圖算法:一般設(shè)置兩個兩層循環(huán),外層循環(huán)控制畫幾行,內(nèi)層循環(huán)控制每一行如何畫for(i=1;i<=N;i++)/*i變量控制從第1行畫到第N行*/{
畫出每i行;/*用循環(huán)設(shè)置第i行如何畫*/
換行;}#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語句和continue語句一、break語句1.形式為:break;
2.作用:
結(jié)束本層循環(huán)(用在循環(huán)體中)3.一般使用形式
與if語句聯(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īng)注意如下幾個問題:(1)break語句只能用于switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu),如果在程序中有下列語句:
if(…)break;則此時的if語句一定位于循環(huán)體中或switch結(jié)構(gòu)中,break語句跳出的也不是if語句,而是跳出包含此if語句的循環(huán)結(jié)構(gòu)或switch結(jié)構(gòu)。
(2)在循環(huán)語句嵌套使用的情況下,break語句只能跳出(或終止)它所在的循環(huán),而不能同時跳出(或終止)多層循環(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是否是素數(shù)。素數(shù)(>=2的整數(shù)):只能被1和本身整除的整數(shù)判斷方法:拿m去整除2~m-1中所有的數(shù),如果有一個能被整除,則不是素數(shù),如果都不能整除,則為素數(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則為素數(shù),為0則為素數(shù)*/printf(“pleaseinputanum:”);scanf(“%d”,&m);k=sqrt(m);/*簡化為1~*/
for(i=2;i<=k&&flag;i++){if(m%i==0)flag=0;/*可得m為非素數(shù)*/}if(flag)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]二、continue語句1.continue語句的一般形式如下:
continue;2.continue語句的作用是:
結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,直接進行下一次是否執(zhí)行循環(huán)的判定。
其執(zhí)行過程是:終止當前這一輪循環(huán),即跳過循環(huán)體中位于continue后面的語句而立即開始下一輪循環(huán);對于while和do-while來講,這意味著立即執(zhí)行條件測試部分,而對于for語句來講,則意味著立即求解表達式3。案例T6_7.c:把100到150之間的不能被3整除的數(shù)輸出,要求一行輸出10個數(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");}}[程序演示]運行結(jié)果:1001011031041061071091101121131151161181191211221241251271281301311331341361371391401421431451461481496.9程序舉例案例T6_8.c:用公式求出π的近似值,直到最后一項的絕對值小于10-6為止。分析:這是一個求和問題,可以看成
sum=sum+xx從1到(+)x=sign*
符號sign一次正一次負;
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個數(shù)。這個數(shù)列有如下特點:第1、2兩個數(shù)為1、1。從第三個數(shù)開始,該數(shù)是其前兩個數(shù)之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)
分析:已知F1和F2,從F3求到F20(重復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個數(shù),求其中的最大值方法:擂臺法:擂臺……比拼,設(shè)2號贏,1號滾蛋,擂臺上此時站的是2號3號與擂臺上的人繼續(xù)比拼,設(shè)2號贏,3號滾蛋,擂臺上此時站的可能還是2號以此類推從2號到最后一個人一一的與擂臺上的人比拼,誰贏,誰站在擂臺上,誰輸誰滾蛋,最后在擂臺上就是最強的。#include<stdio.h>voidmain(){intx,max,i;/*擂臺用max表示*/scanf(“%d”,&x);/*輸入第1個數(shù)*/max=x;/*第1個先站在擂臺上*/for(i=2;i<=20;i++){scanf(“%d”,&x);/*輸入下一個數(shù)*/if(x>max)max=x;/*x與max比拼,比
max大,x就是max*/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥物研發(fā)的法規(guī)與政策分析試題及答案
- 固膜性炎試題及答案
- 高三政治:熱點最后預測試題九:抗旱救災
- 把握2024文化產(chǎn)業(yè)管理證書考試核心試題及答案
- 安排接待面試題及答案
- 系統(tǒng)架構(gòu)設(shè)計師多種架構(gòu)比較試題及答案
- 激光技術(shù)與工程師資格考試的復習策略試題及答案
- 藥師考試實例試題及答案匯編
- 育嬰師培訓課程設(shè)計試題及答案
- 衛(wèi)生管理專職與兼職考量題及答案
- 成品支吊架專項施工方案
- (高職)電子商務(wù)基礎(chǔ)與實務(wù)ppt課件(完整版)
- 工程倫理學教學課件
- 城市設(shè)計導則SOM
- C語言程序設(shè)計題庫習集帶答案(128p最全版)
- 高爐布袋除塵的MCGS-PLC控制系統(tǒng)
- 反三違培訓課件
- 創(chuàng)傷骨科患者術(shù)后疼痛影響因素評估及護理策略論文
- 評標方法課件
- 泵送混凝土測區(qū)強度換算表(完整版)
- 基于PLC的電梯控制系統(tǒng)設(shè)計報告(共15頁)
評論
0/150
提交評論