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

下載本文檔

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

文檔簡介

第5章

循環(huán)結(jié)構(gòu)程序設(shè)計C

語言程序設(shè)計北京航空航天大學(xué)交通科學(xué)與工程學(xué)院徐國艷1循環(huán)的基本概念不同形式的循環(huán)控制多重循環(huán)問題什么是循環(huán)?為什么要使用循環(huán)?5.1

循環(huán)的基本概念一、循環(huán)問題問題1:做99次加法問題2:求學(xué)生平均成績

分數(shù)相加后除以課程數(shù)問題3:找出數(shù)集x中能同時被3和7整除的數(shù)

找數(shù)循環(huán)是有規(guī)律的重復(fù)操作。將復(fù)雜問題分解為簡單的操作過程,程序只對簡單過程描述,這些過程的多次重復(fù)就可完成對問題的求解。重復(fù)的頻繁性決定了循環(huán)在程序設(shè)計中必不

可少!問題分解循環(huán)控制5.1

循環(huán)的基本概念C提供四種循環(huán)控制語句:while循環(huán)(5.2節(jié))do

while循環(huán)(5.3節(jié))for循環(huán)(5.4節(jié))if--goto

循環(huán)(一般不用)

難點:5.1循環(huán)的基本概念(續(xù))二、循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)有兩種形式:當型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)循環(huán)體N條件Y當型循環(huán)條件NY循環(huán)體先判斷后循環(huán)直到型循環(huán)先循環(huán)后判斷入口出口循環(huán)體中是一個過程,該過程的復(fù)雜程度取決于問題及對問題的分解5.1 循環(huán)的基本概念(續(xù))當型循環(huán)條件 循環(huán) 次數(shù)123YYYN執(zhí)行執(zhí)行執(zhí)行結(jié)束條?件Y循環(huán)體N3次在循環(huán)入口處判斷當條件為真時執(zhí)行循環(huán)5.1循環(huán)的基本概念(完)直到型循環(huán)在循環(huán)出口處判斷,當條件為真時繼續(xù)執(zhí)行循環(huán),直到條件為假時為止。條件 循環(huán) 次數(shù)3次YYYYN執(zhí)行執(zhí)行執(zhí)行執(zhí)行結(jié)束1234循環(huán)體條件N4次5.2

while循環(huán)控制語句一般格式while

(表達式)

{語句組}一般為關(guān)系表達式或邏輯表達式,也

可以是C語言其他類型的合法表達式用來控制循環(huán)體是否被執(zhí)行稱為內(nèi)嵌語句,可以是基本語句、控制語句,也可以是復(fù)合語句是循環(huán)重復(fù)執(zhí)行的部分語句一般格式while

(表達式)

{語句組}功能:計算“表達式”的值,為非0(邏輯真)

時,重復(fù)執(zhí)行內(nèi)嵌語句,每執(zhí)行一次,就判斷一次表達式的值,直到表達式的值為0時結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語句。當表達式為真語句N-S結(jié)構(gòu)圖N流程圖表達式非0?Y語句循環(huán)體語句一般格式while

(表達式)

{語句組}循環(huán)控制條件例如:【例5.1】編寫程序,求100個自然數(shù)的和

即:

s=1+2+3+…

+100思路:尋找加數(shù)與求和的規(guī)律加數(shù)i——從1變到100,每循環(huán)一次,使i增1,直到i的值超過100。i的初值設(shè)為1。求和——設(shè)變量sum

存放和,循環(huán)求sum=sum+i,直至i超過100。算法和程序:#include

"stdio.h"void

main(

){

inti,sum;

i=1;

sum=0;while

(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);}程序輸出結(jié)果:sum=5050i: 循環(huán)控制變量sum: 累加器i=1,sum=0當i<=100sum=sum+ii++輸出sum注意:如果while的(表達式)

值為0,則循環(huán)體一次也不執(zhí)行

(例如當i的初值=101)

。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,

否則循環(huán)將無限進行(死循環(huán))。在循環(huán)體中,語句的先后位置必須符合邏輯,否則會影響運算結(jié)果。思考程序段的輸出?……i=1;sum=0;while

(i<=100){

i++;sum=sum+i;

}運行后,輸出:sum=5150原因是什么?注意(續(xù)):總結(jié):為了保證循環(huán)正常運行,應(yīng)該特別注意:循環(huán)控制條件的描述控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對控制條件的影響5.3

do-while語句語句一般格式do{語句組}while(表達式);功能:先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計算

表達式的值,不為0(邏輯真)時,再執(zhí)行循環(huán)體并判斷條件,直到表達式的值為0結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語句。do-while循環(huán)的算法循環(huán)體當表達式為真N-S結(jié)構(gòu)圖Y循環(huán)體流程圖#include

"stdio.h"void

main(

){

inti=1,sum=0;do{

sum=sum+i;i++;}

while

(i<=100);printf("%d\n",sum);}表達式非0?N用do-while語句

求100個自然數(shù)的和void

main(){int

n=1,s=0,x;scanf("%d",&x);printf("s=%d\n",s);}求:流程圖n<=xs=s+nYn加1開始初始化n,s,x輸入xdo{s=s+n;n++;}while

(n<=x);dowhileN輸出s結(jié)束/*ex1-1.C*/void

main(){int

s=0,x;scanf("%d",&x);while

(x<=10)x++;}printf("s=%d\n",s);}/*ex1.C*/void

main(){int

s=0,x;scanf("%d",&x);do{s=s+x;x++;}while(x<=10);printf("s=%d\n",s);}例循環(huán)至少執(zhí)行一次{s=s+x;

循環(huán)沒有被執(zhí)行三、

while與do

while的比較輸出:s=12輸出:s=0如輸入為1和12,兩程序各輸出情況輸入12時:5.4

for語句語句一般格式for

(表達式1;表達式2;表達式3)語句循環(huán)初始條件循環(huán)控制條件循環(huán)體1.求解表達式1;2.求解表達式2,值為真(非0)執(zhí)行循環(huán)體,然后執(zhí)行第3步;值為假(0)則結(jié)束循環(huán),轉(zhuǎn)到第5步,3.求解表達式3;4.轉(zhuǎn)回第2步。5.循環(huán)結(jié)束,執(zhí)行for語句下面的語句。for(e1;e2;e3)

語句的算法N-S結(jié)構(gòu)圖for

(e1;e2;e3)語句N流程圖計算e1語句e3e2為真?Y例如:void

main(

){

inti,sum;sum=0;for

(

i=1;

i<=100;

i++)sum=sum+i;printf("sum=%d\n",sum);}for循環(huán)控制語句for(e1;e2;e3)e1、e2、e3均可缺少for(;n<100;n++)for(n=0;;n++)for(n=0;n<100;)for

(;

;)for(;n<100;)缺少e1,n應(yīng)在循環(huán)之前賦初值缺少e2,造成死循環(huán)缺少e3,n增量應(yīng)在循環(huán)體內(nèi)進行缺少e1,e2,e3

,死循環(huán)!缺少e1,e3分號始終不能缺少!討論可結(jié)合跳轉(zhuǎn)語句使用,一般情況下不使用for循環(huán)控制語句2.e1和e3可是與初值、增量無關(guān)的逗號表達式for

(s=0,n=1;n<=100;s=s+n,

printf(“ %d”,s))

n++;for

(s=0;n<100;s=s+n,n++)

{printf(“ %d”

,s);}求累加和n的初值在for之前完成增量在for之外完成for語句的形式:for(初值;判斷;增量)語句;for(初值;判斷;增量){復(fù)合語句;}for(初值;判斷;增量);for循環(huán)控制語句void

main(){int

n=1,s=0,x;scanf("%d",&x);for(;n<=x;n++)

s=s+n;printf("s=%d\n",s);}while(n<=x){s=s+n;n++;}void

main(){int

n,s,x;scanf("%d",&x);for(n=1,s=0;n<=x;n++)s=s+n;printf("s=%d\n",s);}例缺少e1賦初值語句for循環(huán)控制語句void

main(){int

n,s;for(n=1;n<=10;n+=2)printf("n=%d\n",n);}void

main(){int

n,s;printf("n=%d\n",n);}以下程序的輸出結(jié)果輸出結(jié)果:n=11輸出結(jié)果:

n=1n=3n=5n=7n=9無循環(huán)體循環(huán)體for(n=1;n<=10;n+=2);5.5

循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句有如下三種語句實現(xiàn)跳轉(zhuǎn):continue語句break語句goto語句功能:在循環(huán)語句的循環(huán)體中使用,可以進行循環(huán)的流程控制后續(xù)語句…continue;…N表達式?Y后續(xù)語句…continue;…表達式?YN5.5.1

continue語句及應(yīng)用后續(xù)語句計算表達式3計算表達式1continue;…表達式2?Y

…N功能:中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未

執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。while語句

do-while語句

for語句例如:⑴

intx,n=0,s=0;while

(n<10){

scanf("%d",&x);if

(x<0)continue;s+=x;

n++;};⑵

intx,n=0,s=0;do{

scanf("%d",&x);if

(x<0)continue;s+=x;

n++;}

while

(n<10);⑶

for

(n=0,s=0;

n<10;n++){

scanf("%d",&x);if

(x<0)continue;s+=x;}應(yīng)用舉例【例5.4】把100~200之間能被7整除的數(shù),

以十個數(shù)為一行的形式輸出,最后輸出一共有多少個這樣的數(shù)。for

(n=100;

n<=200;

n++)n能被7整除F

T輸出n終止本次循環(huán)輸出了10個數(shù)T

F換行算法和程序#include

"

stdio.h"void

main(

){

intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue;printf("%6d",n);j++;if(j%10==0)printf("\n");}printf("

\n

j=%d\n",j);}后續(xù)語句…break;…N表達式?Y后續(xù)語句…break;…表達式?YN5.5.2

循環(huán)中break的應(yīng)用后續(xù)語句計算表達式3計算表達式1break;…表達式2?Y

…N功能:利用break語句能夠強迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語句執(zhí)行。while語句

do-while語句

for語句例如:⑴

intx,n=0,s=0;while

(n<10){

scanf("%d",&x);if

(x<0)break;s+=x;

n++;};⑵

intx,n=0,s=0;do{

scanf("%d",&x);if

(x<0)break;s+=x;

n++;}

while

(n<10);⑶

for

(n=0,s=0;

n<10;

n++

){

scanf("%d",&x);if

(x<0)break;s+=x;}5.6

循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套例如:

#include

<stdio.h>void

main(){

int

i,

j;for

(

i=1;

i<10;

i++

)for

(

j=1;

j<=i;

j++

)printf

((j==i)?"%4d\n":"%4d",i*j);}外循環(huán)語句內(nèi)循環(huán)語句注意:while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。例如:

for(a=1;a<=10;a++){

for

(b=0;b<=5;b++)……

}外循環(huán)執(zhí)行了10次,每次外循環(huán)中內(nèi)循環(huán)執(zhí)行6次

循環(huán)正常結(jié)束時,內(nèi)循環(huán)執(zhí)行了10×6=60次5.7

循環(huán)結(jié)構(gòu)程序設(shè)計【例5.5】按每行輸出5個數(shù)的形式輸出Fibonacci數(shù)列的前20項

。Fibonacci數(shù)列的前幾項是:1、1、2、3、5、8、13、21、34、…。此數(shù)列的變化規(guī)律是:fn-1+fn-2(n>2)1

(n=1)fn=

1

(n=2)思路:設(shè)變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項;將f1←f2,

f2←f3,再求f3=f1+f2得到第4項;依此類推求第5項、第6項…這是一種遞推算法應(yīng)采用循環(huán)實現(xiàn)算法和程序#include

"

stdio.h"#define

N

20void

main(

){

inti,f1,f2,f3;f1=f2=1;printf("\n%8d%8d",f1,f2);for

(i=3;

i<=N;

i++){

f3=f1+f2;f1=f2;f2=f3;printf("%8d",f3);if

(i%5==0)

printf("\n");}}f1=1,f2=1并輸出for

(i=3;

i<=20;

i++)f3=f2+f1f1=f2,f2=f3輸出f3T輸出5個數(shù)F換行舉例【例5.6】判斷輸入的某個數(shù)m是否為素數(shù)。

若是素數(shù),輸出“YES”,若不是,輸出“NO”。思路:素數(shù)是指只能被1和它本身整除的數(shù),如5、7、11、17、…等。分別用2、3、…,m-1嘗試能否整除整數(shù)m。如果m能被某個數(shù)整除,則m就不是素數(shù)。這是一種窮舉算法設(shè)除數(shù)為j,從2循環(huán)到m-1算法和程序:#include

"math.h"void

main(

){

intj,m,k;printf("Enter

an

integer

number:");scanf("%d",&m);for

(j=2;

j<=m-1;j++)if

(m%j==0)

break;printf("%d

",m);if(j>=m)printf("YES\n");elseprintf("NO\n");}輸入一個數(shù)mfor

(j=2;

j<=m-1;

j++)Tm%j==0F退出循環(huán)Tj>=mF輸出"YES“輸出"NO"舉例【例5.7】編程序求2~10000以內(nèi)的完全數(shù)。完全數(shù):一個數(shù)的因子(除了這個數(shù)本身)之和思路:設(shè)定i從2變到10000,對每個i找到其因子和s;判定

i==s?若相等,則i為完全數(shù),否則不是。等于該數(shù)本身。例如:6的因子是1、2、3,因子和1+2+3=6因此6是完全數(shù)使用窮舉算法用雙層循環(huán)實現(xiàn)算法和程序:#include

"stdio.h"void

main(

){

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論