




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章循環結構程序設計
C
語言程序設計
2023/4/202循環的基本概念不同形式的循環控制多重循環問題2023/4/203什么是循環?為什么要使用循環??5.1循環的基本概念循環是有規律的重復操作。將復雜問題分解為簡單的操作過程,程序只對簡單過程描述,這些過程的多次重復就可完成對問題的求解。重復的頻繁性決定了循環在程序設計中必不可少!一、循環問題問題1:問題2:求學生平均成績分數相加后除以課程數做99次加法問題3:找出數集x中能同時被3和7整除的數
找數問題分解循環控制2023/4/2055.1循環的基本概念(續)二、循環結構循環結構有兩種形式:當型循環結構直到型循環結構循環體N條件Y當型循環直到型循環條件NY循環體先判斷后循環先循環后判斷入口出口區別?循環體中是一個過程,該過程的復雜程度取決于問題及對問題的分解2023/4/2065.1循環的基本概念(續)循環體N條件Y當型循環條件循環次數Y循環體?Y執行1Y執行3Y執行2N結束
循環體Y?循環體Y
??N3次在循環入口處判斷當條件為真時執行循環2023/4/2075.1循環的基本概念(完)直到型循環在循環出口處判斷,當條件為真時繼續執行循環,直到條件為假時為止。條件NY循環體條件循環次數執行1Y
執行3Y
執行2N
結束
3次Y條件循環體Y條件循環體Y條件循環體Y
執行4條件循環體N4次循環至少執行一次2023/4/2085.2while循環控制語句一般格式while(表達式)
{語句組}
一般為關系表達式或邏輯表達式,也可以是C語言其他類型的合法表達式
用來控制循環體是否被執行稱為內嵌語句,可以是基本語句、控制語句,也可以是復合語句是循環重復執行的部分當條件為真時執行循環體2023/4/2010當表達式為真語句N-S結構圖NY流程圖表達式非0?語句循環控制條件循環體語句一般格式while(表達式)
{語句組}
2023/4/2011例如:【例5.1】編寫程序,求100個自然數的和即:
s=1+2+3+…+100
思路:尋找加數與求和的規律
加數i——從1變到100,每循環一次,使i增1,直到i的值超過100。i的初值設為1。求和——設變量
sum存放和,循環求sum=sum+i,直至i超過100。
2023/4/2013注意:如果while的(表達式)值為0,則循環體一次也不執行
(例如當i的初值=101)。在循環體中必須有使循環趨向結束的操作,否則循環將無限進行(死循環)。在循環體中,語句的先后位置必須符合邏輯,否則會影響運算結果。思考程序段的輸出?
……i=1;sum=0;while(i<=100){i++;sum=sum+i;}運行后,輸出:sum=5150原因是什么?
2023/4/2014注意(續):總結:為了保證循環正常運行,應該特別注意:循環控制條件的描述
控制條件的初始狀態(初始值)
循環體內部對控制條件的影響2023/4/20155.3do-while語句語句一般格式do
{語句組}while(表達式);
功能:先執行內嵌語句(循環體),之后計算表達式的值,不為0(邏輯真)時,再執行循環體并判斷條件,直到表達式的值為0結束循環,轉去執行while下面的語句。直到條件為假時結束循環2023/4/2017
voidmain(){intn=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結束2023/4/2018/*ex1-1.C*/voidmain(){ints=0,x;scanf("%d",&x);
while(x<=10)
{s=s+x;x++;}printf("s=%d\n",s);}/*ex1.C*/voidmain(){ints=0,x;scanf("%d",&x);
do
{s=s+x;x++;}
while(x<=10);printf("s=%d\n",s);}例循環至少執行一次循環沒有被執行三、while與dowhile的比較輸出:s=12輸出:s=0如輸入為1和12,兩程序各輸出情況?輸入12時:2023/4/20195.4for語句語句一般格式for(表達式1;表達式2;表達式3)語句循環初始條件循環控制條件循環體1.求解表達式1;2.求解表達式2,值為真(非0)執行循環體,然后執行第3步;值為假(0)則結束循環,轉到第5步,3.求解表達式3;4.轉回第2步。5.循環結束,執行for語句下面的語句。
2023/4/2021for循環控制語句
for(e1;e2;e3)
e1、e2、e3均可缺少for(;n<100;n++)缺少e1,n應在循環之前賦初值
for(n=0;;n++)缺少e2,造成死循環for(n=0;n<100;)缺少e3,n增量應在循環體內進行for(;;)缺少e1,e2,e3,死循環!for(;n<100;)缺少e1,e3分號始終不能缺少!討論可結合跳轉語句使用,一般情況下不使用2023/4/2022for循環控制語句for(初值;判斷;增量)語句;for(初值;判斷;增量)
{復合語句;}for(初值;判斷;增量);2.e1和e3可是與初值、增量無關的逗號表達式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語句的形式:2023/4/2023for循環控制語句voidmain(){intn=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++;}voidmain(){intn,s,x;scanf("%d",&x);
for(n=1,s=0;n<=x;n++)
s=s+n;printf("s=%d\n",s);}例缺少e1賦初值語句
2023/4/20255.5循環結構中的跳轉語句有如下三種語句實現跳轉:continue語句break語句goto語句功能:在循環語句的循環體中使用,可以進行循環的流程控制2023/4/2026后續語句…continue;
…YN表達式?后續語句…continue;…表達式?YN5.5.1continue語句及應用功能:中斷循環體的本次執行(即跳過循環體中尚未執行的語句),立即開始執行下一次循環。while語句do-while語句后續語句計算表達式3計算表達式1…continue;…表達式2?YNfor語句2023/4/2029算法和程序#include"stdio.h"voidmain(){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("\nj=%d\n",j);}2023/4/2030后續語句…break;…YN表達式?后續語句…break;…表達式?YN5.5.2循環中break的應用功能:利用break語句能夠強迫終止本層循環,轉到后續語句執行。while語句do-while語句后續語句計算表達式3計算表達式1…break;…表達式2?YNfor語句2023/4/2031例如:⑴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;}2023/4/20325.6循環的嵌套如果循環語句的循環體內又包含了另一條循環語句,則稱為循環的嵌套例如:
#include<stdio.h>voidmain(){inti,j;
for(i=1;i<10;i++)for(j=1;j<=i;j++)printf((j==i)?"%4d\n":"%4d",i*j);
}外循環語句內循環語句2023/4/2033注意:while、do-while、for循環語句可以并列,也可以相互嵌套,但要層次清楚,不能出現交叉。多重循環程序執行時,外層循環每執行一次,內層循環都需要循環執行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)
……}外循環執行了10次,每次外循環中內循環執行6次循環正常結束時,內循環執行了10×6=60次2023/4/2034
5.7循環結構程序設計【例5.5】按每行輸出5個數的形式輸出Fibonacci數列的前20項
。Fibonacci數列的前幾項是:1、1、2、3、5、8、13、21、34、…。此數列的變化規律是:1(n=1)1(n=2)fn-1+fn-2(n>2)fn=思路:設變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項;將f1←f2,f2←f3,再求f3=f1+f2得到第4項;依此類推求第5項、第6項…這是一種遞推算法應采用循環實現2023/4/2035算法和程序#include"stdio.h"#defineN20voidmain(){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
輸出f3
輸出5個數
TF
換行2023/4/2036舉例【例5.6】判斷輸入的某個數m是否為素數。若是素數,輸出“YES”,若不是,輸出“NO”。
思路:素數是指只能被1和它本身整除的數,如5、7、11、17、…等。
分別用2、3、…,m-1嘗試能否整除整數m。如果m能被某個數整除,則m就不是素數。這是一種窮舉算法設除數為j,從2循環到m-12023/4/2037算法和程序:#include"math.h"voidmain(){intj,m,k;printf("Enteranintegernumber:");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");}
輸入一個數mfor(j=2;j<=m-1;j++)m%j==0TF
退出循環
j>=mTF輸出"YES“輸出"NO"2023/4/2038舉例【例5.7】編程序求2~10000以內的完全數。
完全數:一個數的因子(除了這個數本身)之和等于該數本身。思路:設定i從2變到10000,對每個i找到其因子和s;判定i==s?若相等,則i為完全數,否則不是。
例如:6的因子是1、2、3,因子和1+2+3=6因此6是完全數使用窮舉算法用雙層循環實現2023/4/2039算法和程序:#include"stdio.h"voidmain(){inti,j,s;
for(i=2;i<=10000;i++)
{s=0;
for(j=1;j<i;j++)if(i%j==0)s+=j;if(i==s)printf("%6d\n",s);
}}for(i=2;i<=10000;i++)s=0for(j=1;j<i;j++)i%j==0TFs=s+j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 森林動植物遺傳資源保存考核試卷
- 環保型金屬防銹劑的制備與應用考核試卷
- 化妝品企業質量風險管理及應對措施考核試卷
- 玻璃纖維增強型復合板材考核試卷
- 電動車電機維修與調試考核試卷
- 玻璃儀器在光學顯微鏡升級改造中的應用考核試卷
- 電梯門系統的智能故障診斷與預測維護考核試卷
- 衛浴零售商大數據應用實踐考核試卷
- 煉油廠智能化與大數據分析應用考核試卷
- 2025會議場地租賃合同協議書
- 日處理-30噸鮮奶的脫脂乳粉廠設計
- 河南2020年河南省農村信用社(農商銀行)員工招聘考試參考題庫含答案詳解
- 工程項目邀請招標招標文件
- 城區中壓管網安全現狀評價報告
- 光谷之星中國建筑科技館建筑設計方案文本
- 一氧化氮吸入治療法演示文稿
- 研究生入學體檢表-2
- 新生兒疾病診療規范診療指南診療常規2022版
- 畢業設計(論文)-汽車用液壓串聯雙腔制動主缸的設計
- 六年級奧數陰影部分面積
- GB/T 8929-2006原油水含量的測定蒸餾法
評論
0/150
提交評論