C語言程序設(shè)計基礎(chǔ)課件 第5章循環(huán)結(jié)構(gòu)_第1頁
C語言程序設(shè)計基礎(chǔ)課件 第5章循環(huán)結(jié)構(gòu)_第2頁
C語言程序設(shè)計基礎(chǔ)課件 第5章循環(huán)結(jié)構(gòu)_第3頁
C語言程序設(shè)計基礎(chǔ)課件 第5章循環(huán)結(jié)構(gòu)_第4頁
C語言程序設(shè)計基礎(chǔ)課件 第5章循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計

第5章循環(huán)結(jié)構(gòu)程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)

選擇結(jié)構(gòu)

(分支結(jié)構(gòu))循環(huán)結(jié)構(gòu)無論多么復(fù)雜的程序,一般都是由這三種結(jié)構(gòu)的銜接、復(fù)合或嵌套組成的。while(沒到教室)

邁左腳;

邁右腳;坐在教室上課;

while(沒到教室)

邁左腳;

邁右腳;坐在教室上課;

循環(huán)結(jié)構(gòu)概述邁左腳;邁右腳;邁左腳;邁右腳;邁左腳;邁右腳;邁左腳;邁右腳;……坐在教室上課;

{

}循環(huán)結(jié)構(gòu)——

語句只寫一遍,但可被反復(fù)執(zhí)行多遍獨生子女規(guī)則循環(huán)體被反復(fù)執(zhí)行的部分稱為循環(huán)體是誰循環(huán)體沒寫{},讓我跳著上課去!!while語句while語句while(表達(dá)式)

語句;if(表達(dá)式)

語句;執(zhí)行語句后結(jié)束。執(zhí)行語句后重新計算表達(dá)式,如值非0,再次執(zhí)行語句;如值為0結(jié)束。表達(dá)式的值語句

0非0程序流程圖

射出的箭回旋鏢inti=1;while(i<3){ printf("%d",i); i++;}i:112真1<32<312

33<3假

控制循環(huán)體執(zhí)行次數(shù)

i計數(shù)器while語句inti=1;while(i<3) printf("%d",i); i++;

{

}i:1inti=1;while(i<3) printf("%d",i++);

i:11

122312

經(jīng)過有限次循環(huán),應(yīng)使表達(dá)式的值為0(假),否則會陷入死循環(huán)(也稱無限循環(huán))——循環(huán)體將被計算機(jī)不知疲倦地反復(fù)做下去,永不停止。死循環(huán)1<3真1<3真2<33<3假睡覺:1只羊,2只羊,3只羊…while(!asleep) sheep++;

do-while語句do-while語句do{

邁左腳;

邁右腳;}

while(沒到教室);坐在教室上課;while(沒到教室){

邁左腳;

邁右腳;}坐在教室上課;謹(jǐn)慎魯莽獨生子女規(guī)則do

邁左腳;

邁右腳;while(沒到教室);先判斷,后執(zhí)行

先執(zhí)行,后判斷

邁左腳;邁右腳;邁左腳;邁右腳;邁左腳;邁右腳;邁左腳;邁右腳;……坐在教室上課;

do-while語句do在先,先循環(huán);見while就判條件。do

語句;while(表達(dá)式);此處有;此處有;while(表達(dá)式)

語句;表達(dá)式的值語句

0非0程序流程圖

先判斷,后執(zhí)行

表達(dá)式的值語句

0非0程序流程圖

先執(zhí)行,后判斷

當(dāng)型循環(huán)直到型循環(huán)可能一次也不會被執(zhí)行至少要被執(zhí)行一次while和do-while語句練習(xí)#include<stdio.h>main(){ inti=0,n=0;

do{i++;++i;}while(n!=0);

printf("%d",i);}先執(zhí)行一次!i:0n:0122#include<stdio.h>main(){ inti=0,n=0;

while(n!=0){i++;++i;}

printf("%d",i);}i:0n:0一次也沒有執(zhí)行!0for語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

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

循環(huán)體語句;分號分號若循環(huán)體有多條語句,必須加{}inti;for(i=1;i<3;i++) printf("%d",i);i:?1真12123假表達(dá)式2循環(huán)體

0非0程序流程圖

表達(dá)式1表達(dá)式3

表達(dá)式1做在先,表達(dá)式2判條件。循環(huán)體罷表達(dá)3,再判條件再循環(huán)。表達(dá)式間分號斷,莫要陷入死循環(huán)。獨生子女規(guī)則for(求職者入職;未到退休年齡;領(lǐng)一個月的工資)

一個月的工作;表達(dá)式1先做,但只做一次;只要執(zhí)行循環(huán)體,后必做表達(dá)式3。例2:輸出1-10各數(shù)的平方。for語句(2)從這種應(yīng)用中,可直接看出循環(huán)次數(shù)。小竅門inti;for(i=1;i<3;i++) printf("%d",i);i=1i=1,2,3,4,…i=1,2

執(zhí)行2次printf("%d",i);其中i分別=1,2

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

例1:輸出100遍“Iloveyou!"for(i=1;i<11;i+=1)

for(i=1;i<=100;i++) printf("Iloveyou!\n");for(i=1;i<11;i+=1) printf("%d\n",i*i);for(i=0;i<100;i++) printf("Iloveyou!\n");i=0,2,3,…,99

i=1,2,3,…,10

或i=1,2,3,…,100

for(i=1;i<=10;++i) printf("%d\n",i*i);或for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)語句;常用套路:習(xí)題#include<stdio.h>main(){intc=0,k;

for(k=1;k<3;k++)

switch(k){default:c+=k;

case2:c++;break;

case4:c+=2;break;}printf("%d\n",c);}for(k=1;k<3;k++)

k=1k=23求1+2+3+…+100之和用for語句求解sum=1+2+3+…+100。int

sum;sum=sum+1;sum=sum+2;…sum=sum+100;sum=0;累加前必須清零提取公共部分sum=sum+i;i=1,2,3,…,100

for(i=1;i<=100;i++)intsum,i;sum=0;

#include<stdio.h>main(){ printf("sum=%d",sum);}sum=5050

sum=0;清零放錯了位置#include<stdio.h>main(){ intsum,i;

{ sum=0;

} printf("sum=%d",sum);}for(i=1;i<=100;i++)sum=sum+i;prod=prod*i;求10!=10*9*8*…*2*1用for語句求解10!=1*2*3*…*10。int

prod;prod

=prod

*1;prod

=prod

*2;…prod

=prod

*10;prod=1;累乘前必須清1提取公共部分prod=prod*i;for(i=1;i<=10;++i)intprod,i;prod=1;

#include<stdio.h>main(){ printf("10!=%d",prod);}10!=3628800for(i=10;i>=1;i--)或:i=1,2,3,…,10

i=10,9,8,…,1

i:1098...10用for語句求解累加或累乘問題的編程套路是:

sum=0(累加)或1(累乘);for(i=初值;i<=終值;每次i的變化

) sum=sum+或*一項的值;求100以內(nèi)偶數(shù)的和求100以內(nèi)偶數(shù)的和sum=2+4+6+…+100。#include<stdio.h>main(){

intsum,i; sum=0;

for(i=1;i<=100;i++) sum=sum+i; printf("sum=%d",sum);}sum=1+2+3+…+100

#include<stdio.h>main(){

intsum,i; sum=0;

sum=sum+i; printf("sum=%d",sum);}sum=2+4+6+…+100

i=1,2,3,…,100i=2,4,6,…,100

for(i=2;i<=100;i+=2)sum=2550i=i+2sum=0(累加)或1(累乘);for(i=初值;i<=終值;每次i的變化

) sum=sum+或*一項的值;#include<stdio.h>main(){ doublesum=0.0;

inti;求和問題綜合練習(xí)求

for(i=1;i<=100;i++)sum=sum+1/i;sum=sum+1.0/i;#include<stdio.h>main(){ doublesum=0.0;

inti; printf("sum=%f",sum);}sum=5.18738求分母:1,2,3,…,100分子:1分母:1,2,3,…,100for(i=1;i<=100;i++)分子:1/-1doublej=1.0;sum=sum+j/i;j=-j;

{} printf("sum=%f",sum);}sum=0.688172for

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

if

(i%2==1)j=1.0;

else

j=-1.0; sum=sum+j/i;}if(i%2)sum=0(累加)或1(累乘);for(i=初值;i<=終值;每次i的變化

) sum=sum+或*一項的值;for語句中省略表達(dá)式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語句;for語句中的3個表達(dá)式均可省略,但;不可省。

省略表達(dá)式1:不執(zhí)行表達(dá)式1,直接進(jìn)入表達(dá)式2判斷循環(huán)條件;for(;i<=10;i++) printf("%d\n",i);

省略表達(dá)式3:執(zhí)行循環(huán)體后不執(zhí)行表達(dá)式3,直接計算表達(dá)式2

決定是否繼續(xù)循環(huán);for(i=1;i<=10;i++) printf("%d\n",i);for(i=1;i<=10;){ printf("%d\n",i);

}

省略表達(dá)式2:永真——死循環(huán),除非使用break;語句強(qiáng)行跳出;for(i=1;;i++){ printf("%d\n",i);}for(;;){

printf("%d\n",i);

}3個表達(dá)式均省略

12345678910i=1;i++;if(i>10)break;i++;if(i>10)break;i=1;for語句中使用逗號表達(dá)式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語句;3個表達(dá)式還可以是逗號表達(dá)式

sum=0;

for(i=1;i<=100;i++)sum=sum+i;for(sum=0,i=1;i<=100; ) ;sum=sum+i,i++表達(dá)式1表達(dá)式3

for(sum=0,i=1;i<=100;

);sum=0;for(i=2;i<=100;

i+=2) sum=sum+i;sum=0;for(i=2;i<=100;

i++,i++) sum=sum+i;求sum=2+4+6+…+100sum=sum+i,i++sum+=i++sum=sum+i++循環(huán)語句小結(jié)C語言提供了3種實現(xiàn)循環(huán)的語句

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語句;do

語句;while(表達(dá)式);此處有;此處有;while(表達(dá)式)

語句;sum=0;for(i=1;i<=100;i++) sum=sum+i;sum=0;i=1;while(i<=100){sum=sum+i;i++;}

求sum=1+2+3+…+100三種循環(huán)語句適合使用的場合不同;在編程時具體使用哪種語句無一定之規(guī),這三種語句一般也可以相互代替也可用while語句實現(xiàn):要實現(xiàn)死循環(huán)有幾種做法?while(1)

語句;do

語句;while(1);for(表達(dá)式1;

1;表達(dá)式3)

語句;for(表達(dá)式1;;表達(dá)式3)

語句;以上的1任意寫為一個非0值均可。循環(huán)的嵌套循環(huán)的嵌套(1)三種循環(huán)既可以自身嵌套,

也可以互相嵌套。嵌套時必須將一個完整的循

環(huán)整體放在另一個循環(huán)體內(nèi)。for(…;…;…){

while(…) { … }}while(…){

while(…) { … }}while(…){

do

{ … }while(…);}for(…;…;…){

for(…;…;…) { … }}do{

for(…;…;…) { … }}while(…);do{

do { … }while(…);}while(…);循環(huán)的嵌套(2)for(時針=1;時針<=12;時針++)外層循環(huán)(時針循環(huán))內(nèi)層循環(huán)(分針循環(huán))是外層循環(huán)的循環(huán)體中的一條語句外層走一步內(nèi)層完整走一輪一小時過去了;==for(分針=1;分針<=60;分針++)

一分鐘過去了;一小時過去了;#include<stdio.h>main(){

inti,j; for(i=1;i<=2;i++) {

printf("\n"); }}#include<stdio.h>main(){ inti,j; for(i=1;i<=2;i++) { printf("\n"); }}

for(j=1;j<=3;j++) printf("*");循環(huán)嵌套程序例*i:1j:12**3***4;21****2*****3******43被執(zhí)行了2次(i=1,2)每執(zhí)行一次,要完整走一輪j循環(huán):printf("*");

被執(zhí)行3次printf("*");

共被執(zhí)行了3×2=6次。i j1 11 21 32 12 22 3i j1 12 2內(nèi)外層循環(huán)變量一般要不同(i,j)for(i=1;i<=2;i++) printf("*");for(j=1;j<=3;j++) printf("*");*****練習(xí)main(){

inti,j,sum=0; for(i=1;i<5;i++)

for(j=1;j<4;j++) sum++; printf("%d",sum);}12i=1,2,3,4外層循環(huán)4次,

被執(zhí)行4次;i j1 11 21 32 12 22 33 13 23 34 14 24 3sum++;

在i、j分別為右側(cè)值時被執(zhí)行:for(i=1;i<5;i++) sum++;for(j=1;j<4;j++) sum++;7

每被執(zhí)行一次,j=1,2,3,sum++被執(zhí)行3次;#include<stdio.h>main(){

intm,n; scanf("%d%d",&m,&n);

while(m!=n) {

while(m>n)m=m-n;

while(m<n)n=n-m; } printf("%d\n",m);}#include<stdio.h>main(){ intm,n; scanf("%d%d",&m,&n); while(m!=n) {

while(m>n)m=m-n;

while(m<n)n=n-m; } printf("%d\n",m);}練習(xí);;程序運行后,輸入1463<回車>輸出結(jié)果是_________

m:?n:?_1463146349352177146377break語句和continue語句break語句和continue語句break:跳出整個循環(huán)。本次循環(huán)結(jié)束,后續(xù)的循環(huán)也不再執(zhí)行。continue:結(jié)束本次循環(huán),轉(zhuǎn)到循環(huán)的開始判斷是否執(zhí)行下一次循環(huán)。continue只是繞開了本次循環(huán)尚未執(zhí)行的語句,下次循環(huán)還可能要執(zhí)行。while(隊列中還有未結(jié)賬的顧客){ 掃描商品條形碼;

if(錢包忘帶了)continue;

付款;

領(lǐng)小票;

取商品離開超市;}while(還有未查毒的文件){

準(zhǔn)備檢查第i個文件...;

if(“跳過此文件"被按下)continue;

if(殺毒軟件被關(guān)閉)break;

檢查第i個文件是不是病毒;}跳過此文件continuebreakbreak語句的程序例計算sum=1+2+3+…+i,求i等于多少時,sum的值大于5000。#include<stdio.h>main(){inti,sum;sum=0;

for(i=1;;i++){ sum=sum+i;

if(sum>5000)break;}printf("sum=%d\n",sum);printf("i=%d",i);}循環(huán){

累加下一個值;

}sum=5050i=100

if(夠5000了)break;退出循環(huán)有兩種方法:(1)逐漸變化的循環(huán)變量的值不滿足某條件時退出循環(huán);(2)通過break;

語句隨時可以跳出循環(huán)。continue語句詳解用于while語句中:跳轉(zhuǎn)到while(表達(dá)式),然后判斷表達(dá)式為真或假,決定是否繼續(xù)下一次循環(huán)。用于do-while語句中:跳轉(zhuǎn)到while(表達(dá)式),然后判斷表達(dá)式為真或假,決定是否繼續(xù)下一次循環(huán)。用于for語句中:跳轉(zhuǎn)到表達(dá)式3,先計算表達(dá)式3,然后再判斷表達(dá)式2為真或假,決定是否繼續(xù)下一次循環(huán)。continuefor(表達(dá)式1;表達(dá)式2;表達(dá)式3){

語句;

continue;

語句;}do{

語句;

continue;

語句;}while(表達(dá)式);while(表達(dá)式){

語句;

continue;

語句;}向上跳向下跳暴力破解密碼#include<stdio.h>main(){

intpw;inti; printf("請輸入一個6位數(shù)以內(nèi)的密碼:"); scanf("%d",&pw);

for(i=0;i<=999999;i++)}if(i==pw){ printf("小樣!你密碼被破解了,是%d\n",i);

break;}

請輸入一個6位數(shù)以內(nèi)的密碼:123456

小樣!你密碼被

溫馨提示

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

評論

0/150

提交評論