C 語言 第06章課件_第1頁
C 語言 第06章課件_第2頁
C 語言 第06章課件_第3頁
C 語言 第06章課件_第4頁
C 語言 第06章課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章循環(huán)控制6.3用while語句實現循環(huán)6.4用do-while語句實現循環(huán)6.5用for語句實現循環(huán)6.6循環(huán)的嵌套6.8break語句和continue語句6.9案例:圍著操場跑5圈12345重復多次同樣的事情,可用循環(huán)解決沒跑完五圈嗎?跑是否6.1概述初始情況我們可以用表達式語句完成;條件表示一般仍然用關系表達式或邏輯表達式循環(huán)部分結構C語言提供了3條循環(huán)語句來實現(1)用while語句。(2)用do-while語句。(3)用for語句。初始化6.3用while語句實現循環(huán)一、while循環(huán)的一般形式如下:

初始化部分;while(表達式)

{語句}表達式語句非00如果值為真如果值為假

二、while語句的執(zhí)行過程是:1.先執(zhí)行初始化部分2.計算while后面圓括號內表達式的值;

3.如果其值為“真”(非0),則執(zhí)行語句部分(即循環(huán)體);重復2。4.如果值為“假”(0)時,循環(huán)結束,程序控制轉至循環(huán)結構的下一語句。

案例T6_1.c:求1~5的累計和分析:設一個累加器,將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的偶數和及奇數和;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語句實現循環(huán)一、do-while循環(huán)的一般形式如下:初始化部分;

do{語句}

while(表達式);初始化表達式語句非00如果值為真如果值為假

二、do—while語句的執(zhí)行過程是:1.先執(zhí)行初始化部分2.執(zhí)行語句部分(即循環(huán)體);

3.計算while后面圓括號內表達式的值;如果其值為“真”(非0),重復2。4.如果值為“假”(0)時,循環(huán)結束,程序控制轉至循環(huán)結構的下一語句。

改寫案例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開始,比較下面兩個程序的運行結果。

#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);}結果為sum=8結果為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語句實現循環(huán)一、for循環(huán)語句的一般形式如下:

for(表達式1;表達式2;表達式3){循環(huán)體語句;}

求解表達式1表達式2語句非00如果值為真如果值為假for語句最簡單的應用形式,也是最容易理解的形式:

for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){語句}

例如,求1~5之和;(控制循環(huán)次數的是從幾加到幾結束)可寫為

for(i=1;i<=5;i++)sum=sum+i;循環(huán)變量為控制循環(huán)次數的變量(循環(huán)條件中的變量)案例T6_4.c:計算1至50中是7的倍數的數值之和。#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)體內又包含另一個完整的循環(huán)結構時,稱為多重循環(huán)或循環(huán)嵌套,其循環(huán)結構可用上述三種循環(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時,輸出****************畫圖算法:一般設置兩個兩層循環(huán),外層循環(huán)控制畫幾行,內層循環(huán)控制每一行如何畫for(i=1;i<=N;i++)/*i變量控制從第1行畫到第N行*/{

畫出每i行;/*用循環(huán)設置第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.作用:

結束本層循環(huán)(用在循環(huán)體中)3.一般使用形式

與if語句聯合使用if(條件)break;例:#include<stdio.h>voidmain(){inti,sum=0;

for(i=1;i<=100;i++){

if(sum>12)break;printf(“sum=%d\n”,sum);}}結果為:sum=154.使用break語句應注意如下幾個問題:(1)break語句只能用于switch結構或循環(huán)結構,如果在程序中有下列語句:

if(…)break;則此時的if語句一定位于循環(huán)體中或switch結構中,break語句跳出的也不是if語句,而是跳出包含此if語句的循環(huán)結構或switch結構。

(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);}}結果為:j=1sum=1j=2sum=4j=3sum=9j=3sum=12j=2sum=10案例T6_6.c:求m是否是素數。素數(>=2的整數):只能被1和本身整除的整數判斷方法:拿m去整除2~m-1中所有的數,如果有一個能被整除,則不是素數,如果都不能整除,則為素數。

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則為素數,為0則為素數*/printf(“pleaseinputanum:”);scanf(“%d”,&m);k=sqrt(m);/*簡化為1~*/

for(i=2;i<=k&&flag;i++){if(m%i==0)flag=0;/*可得m為非素數*/}if(flag)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]二、continue語句1.continue語句的一般形式如下:

continue;2.continue語句的作用是:

結束本次循環(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整除的數輸出,要求一行輸出10個數。main(){intn,i=0;for(n=100;n<=150;n++){if(n%3==0)/*能被3整除,不用輸出,結束本次循環(huán)*/continue;printf("%4d",n);i++;if(i%10==0)printf("\n");}}[程序演示]運行結果: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數列前20個數。這個數列有如下特點:第1、2兩個數為1、1。從第三個數開始,該數是其前兩個數之和。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個數,求其中的最大值方法:擂臺法:擂臺……比拼,設2號贏,1號滾蛋,擂臺上此時站的是2號3號與擂臺上的人繼續(xù)比拼,設2號贏,3號滾蛋,擂臺上此時站的可能還是2號以此類推從2號到最后一個人一一的與擂臺上的人比拼,誰贏,誰站在擂臺上,誰輸誰滾蛋,最后在擂臺上就是最強的。#include<stdio.h>voidmain(){intx,max,i;/*擂臺用max表示*/scanf(“%d”,&x);/*輸入第1個數*/max=x;/*第1個先站在擂臺上*/for(i=2;i<=20;i++){scanf(“%d”,&x);/*輸入下一個數*/if(x>max)max=x;/*x與max比拼,比

max大,x就是max*/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論