




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
循環(huán)結構程序設計第一次第1頁,課件共38頁,創(chuàng)作于2023年2月5.1 程序中需要用循環(huán)結構5.2 用while語句和do-while語句實現循環(huán)5.3 用for語句實現循環(huán)5.4 循環(huán)的嵌套5.5 用break語句和continue語句改變循環(huán)狀態(tài)5.6 幾種循環(huán)的比較5.7 程序舉例主要內容第2頁,課件共38頁,創(chuàng)作于2023年2月
5.1程序中需要用循環(huán)結構什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學生平均成績
分數相加后除以學生數在許多問題中需要用到循環(huán)控制。循環(huán)結構就是用來處理需要重復處理的問題的,所以又稱重復結構。它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。循環(huán)分為兩種:無休止循環(huán)和有終止循環(huán)構成有效循環(huán)的條件:循環(huán)體和循環(huán)結束條件第3頁,課件共38頁,創(chuàng)作于2023年2月5.2用while語句和do-while語句實現循環(huán)
5.2.1
用while語句實現循環(huán)while語句用來實現“當型”循環(huán)結構一般形式:
while(表達式)
語句當表達式為非0值時,執(zhí)行while語句中的內嵌語句。其特點是:先判斷表達式,后執(zhí)行循環(huán)體。第4頁,課件共38頁,創(chuàng)作于2023年2月例題5.1求1+2+3+…+100的和解題思路(1)開始時使sum的值為0,被加數i第一次取值為1。開始進入循環(huán)結構。(2)判別“i≤100”條件是否滿足,由于i小于100,因此“i≤100”的值為真。所以應當執(zhí)行其下面矩形框中的操作。(3)執(zhí)行sum=sum+i,此時sum的值變?yōu)?了,然后使i的值加1,i的值變?yōu)?了,這是為下一次加2作準備。流程返回菱形框。(4)再次檢查“i≤100”條件是否滿足,由于i的值為2,小于100,因此“i≤100”的值仍為真,所以應執(zhí)行其下面矩形框中的操作。(5)執(zhí)行sum=sum+i,由于sum的值已變?yōu)?,i的值已變?yōu)?,因此執(zhí)行sum=sum+i后sum的值變?yōu)?。再使i的值加1,i的值變?yōu)?。流程再返回菱形框。(6)再次檢查“i≤100”條件是否滿足……,如此反復執(zhí)行矩形框中的操作,直到i的值變成了100,把i加到sum中,然后i又加1變成101了。當再次返回菱形框檢查“i≤100”條件時,由于I已是101,大于100,“i≤100”
的值為假,不再執(zhí)行矩形框中的操作,循環(huán)結構結束。5.2.1用while語句實現循環(huán)第5頁,課件共38頁,創(chuàng)作于2023年2月#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\n″,sum);
}說明:(1)循環(huán)體如果包含一個以上的語句,應該用花括號括起來,以復合語句形式出現.(2)在循環(huán)體中應有使循環(huán)趨向于結束的語句。運行結果:
5050
5.2.1
用while語句實現循環(huán)第6頁,課件共38頁,創(chuàng)作于2023年2月5.2.2
用do-while語句實現循環(huán)
do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別“表達式”,當表達式的值為非0(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0(“假”)為止,此時循環(huán)結束。while語句和do-while語句的關系:同一個問題既可以用while循環(huán)處理,也可以用do-while循環(huán)來處理。二者是可以互相轉換的。一般形式:
do
循環(huán)體語句
while(表達式);第7頁,課件共38頁,創(chuàng)作于2023年2月5.2.2
用do-while語句實現循環(huán)一般形式:
do
循環(huán)體語句
while(表達式);第8頁,課件共38頁,創(chuàng)作于2023年2月#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf(″%d\n″,sum);
}
用while語句實現第9頁,課件共38頁,創(chuàng)作于2023年2月
例題5.2
求1+2+3+…+100的和。
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
do
{sum=sum+i;
i++;
}
while(i<=100);
printf(″%d\n″,sum);
}運行結果:
5050說明:可以看到,結果和例5.1完全相同。
5.2.2
用do-while語句實現循環(huán)第10頁,課件共38頁,創(chuàng)作于2023年2月補充例題:求1+3+5+…+99的和。
#include<stdio.h>
voidmain()
{inti,sum=0;
i=1;
do
{sum=sum+i;
i=i+2;
}
while(i<=100);
printf(″%d\n″,sum);
}思考題:求2+6+8+…+100的和。第11頁,課件共38頁,創(chuàng)作于2023年2月討論題:編寫程序求100以內5的倍數的和。第12頁,課件共38頁,創(chuàng)作于2023年2月
例題5.11程序2
#include<stdio.h>
voidmain()
{intsum=0,i;
scanf(“%d”,&i)do
{sum=sum+i;
i++;
}
while(i<=10);
printf(″sum=%d\n″,sum);
}while和do-while循環(huán)的比較
例題5.11程序1
#include<stdio.h>
voidmain()
{intsum=0,i;
scanf(“%d”,&i)while(i<=10);
{sum=sum+i;
i++;
}
printf(″sum=%d\n″,sum);
}第13頁,課件共38頁,創(chuàng)作于2023年2月運行結果:1↙sum=55再運行一次:11↙sum=0運行結果:1↙sum=55再運行一次:11↙sum=11說明:當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結果相同。否則,二者結果不相同。while和do-while循環(huán)的比較第14頁,課件共38頁,創(chuàng)作于2023年2月例題5.3
募集慈善基金10000元,有若干人捐款,每輸入一個人的捐款數后,計算機就輸出當時的捐款總和。當某一次輸入捐款數后,總和達到或超過10000元時,即宣告結束,輸出最后的累加值。解題思路解此題的思路是設計一個循環(huán)結構,在其中輸入捐款數,求出累加值,然后檢查此時的累加值是否達到或超過預定值,如果達到了,就結束循環(huán)操作。5.2
用while語句和do-while語句實現循環(huán)
第15頁,課件共38頁,創(chuàng)作于2023年2月#include<stdio.h>
voidmain()
{floatamount,sum=0;
do
{scanf("%f",&amount);
sum=sum+amount;
}while(sum<10000);
printf("sum=%9.2f\n",sum);
}運行結果:1000↙(輸入捐款額)1850↙1500↙2600↙2500↙1200↙sun=10650.00說明:設計循環(huán)結構,要考慮兩個問題:一是循環(huán)體,二是循環(huán)結束條件。注意while循環(huán)中判斷的條件是循環(huán)繼續(xù)的條件,而不是結束條件。
5.2用while語句和do-while語句實現循環(huán)
第16頁,課件共38頁,創(chuàng)作于2023年2月
5.3用for語句實現循環(huán)
5.3.1for語句的一般形式和執(zhí)行過程
C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數已經確定的情況,而且可以用于循環(huán)次數不確定而只給出循環(huán)結束條件的情況。一般形式:
for(表達式1;表達式2;表達式3)語句第17頁,課件共38頁,創(chuàng)作于2023年2月5.3.1for語句的一般形式和執(zhí)行過程for語句的執(zhí)行過程:
(1)先求解表達式1。
(2)求解表達式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結束循環(huán),轉到第(5)步。
(3)求解表達式3。
(4)轉回上面第(2)步驟繼續(xù)執(zhí)行。
(5)循環(huán)結束,執(zhí)行for語句下面的一個語句。第18頁,課件共38頁,創(chuàng)作于2023年2月#include<stdio.h>
voidmain()
{inti,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf(″%d\n″,sum);
}
用FOR語句實現S=1+2+3+4+‥‥‥100相當于:i=1;while(i<=100){sum=sum+i; i++;}第19頁,課件共38頁,創(chuàng)作于2023年2月
5.3.2for循環(huán)程序舉例
國王的小麥。相傳古代印度國王舍罕要褒賞他的聰明能干的宰相達依爾(國際象棋的發(fā)明者),國王問他要什么?達依爾回答說:“國王只要在國際象棋的棋盤第1個格子中放1粒麥子,第2個格子中放2粒麥子,第3個格子中放4粒麥子,以后按此比例每一格加一倍,一直放到第64格(國際象棋的棋盤8*8=64格),我感恩不盡,其他什么都不要了。”國王想,這有多少!還不容易!讓人扛來一袋小麥,但不到一會兒全用沒了,再來一袋很快又用完了。結果全印度的糧食全部用完還不夠。國王納悶,怎樣也算不清這筆賬?,F在我們用計算機來算一下。例題5.4第20頁,課件共38頁,創(chuàng)作于2023年2月解題思路麥子的總粒數是:分別計算出每一格的麥子粒數,把它們加起來,就得到總粒數。據估算,1小麥約有1.42粒,可以計算出小麥的體積??梢杂胒or語句實現循環(huán)。
5.3.2for循環(huán)程序舉例第21頁,課件共38頁,創(chuàng)作于2023年2月
#include<stdio.h>
voidmain()
{
doublep=1,t=1,v;
inti;
for(i=1;i<64;i++)
{
p=p*2;
t=t+p;
}
v=t/1.42e8;
printf(“麥子總粒數=%e\n”,t);
printf(“麥子總體積=%e\n",v);
}運行結果:麥子總粒數=1.844674e+019麥子總體積=1.299066e+011
5.3.2for循環(huán)程序舉例1立方米小麥約有1.42*108第22頁,課件共38頁,創(chuàng)作于2023年2月5.3.2for循環(huán)程序舉例例題5.4說明:
變量i用來控制循環(huán)的次數,開始時i=1,在完成第1次循環(huán)后,i的值加1變?yōu)?,由于2<64,所以執(zhí)行第2次循環(huán),依此類推,當i變到63時,執(zhí)行最后一次循環(huán),i再變?yōu)?4,由于i不再小于64了,不再執(zhí)行循環(huán)。接著計算體積,輸出結果。第23頁,課件共38頁,創(chuàng)作于2023年2月5.3.2for循環(huán)程序舉例
人口增長預測。據2005年末統(tǒng)計,我國人口為130756萬人,如果人口的年增長率為1%,請計算到哪一年中國總人口超過15億。例題5.5解題思路
計算人口增長和計算存款利息的公式是相同的。假設原來人口為p0
,則一年后的人口:其中r是年增長率。用此公式依次計算出每年的人口,每算出一年的人口后就檢查一下是否達到或超過15億?如果未達到或超過15億,就再計算下一年的人口,直到某一年的人口達到或超過15億為止。第24頁,課件共38頁,創(chuàng)作于2023年2月5.3.2for循環(huán)程序舉例
#include<stdio.h>
voidmain()
{
doublep=1.30756e9,r=0.01;
inty;
for(y=2006;p<1.5e9;y++)
p=p*(1+r);
printf(“年份=%d,人口總數=%e\n",y-1,p);
}運行結果:年份=2019,人口總數=1.503007e+009由于在結束循環(huán)前y又加了1,因此在輸出年份時應輸出y-1的值。第25頁,課件共38頁,創(chuàng)作于2023年2月5.3.2for循環(huán)程序舉例例題5.5說明:
注意區(qū)分變量p在不同階段中的不同含義。
y代表年份。循環(huán)體中只有一個語句,用來計算從2006年開始的各年的人口數。在for語句中設定的循環(huán)條件是p<15億,當某一年的p達到或超過15億,就停止循環(huán),輸出年份和當年的人口數。由于在最后結束循環(huán)前y又加了1,因此在輸出年份時應輸出y-1的值而不是y的值。第26頁,課件共38頁,創(chuàng)作于2023年2月5.3.2for循環(huán)程序舉例總結:
一個變量開始時有一初值,通過一定的運算,可以推算出一個新的值,再從這個新值又推出下一個新值,即不斷用計算出的新值去取代原有的值,這種方法稱為迭代。上面的計算公式p*(1+r)稱為迭代公式。迭代算法一般是用循環(huán)來實現的。迭代是一種常用的算法,用人工實現很麻煩,而用計算機實現卻十分方便。第27頁,課件共38頁,創(chuàng)作于2023年2月5.5
提前結束循環(huán)
5.5.1
用break語句提前退出循環(huán)
break語句可以用來從循環(huán)體內跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循環(huán)下面的語句。一般形式:
break;說明:
break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。
第28頁,課件共38頁,創(chuàng)作于2023年2月
統(tǒng)計各班級的學生的平均成績。已知各班人數不等,但都不超過30人。編一個程序能處理人數不等的各班學生的平均成績。例題5.6解題思路
如果各班人數相同,問題比較簡單,只需用一個for語句控制即可:
for(i=1;i<31;i++)
但是現在有的班不足30人,應當設法告訴計算機本班的人數,使程序也能統(tǒng)計出該班的平均成績??梢约s定,當輸入的成績是負數時,就表示本班數據已結束(一般情況下成績不會是負數)。在程序接收到一個負的分數時就提前結束循環(huán),計算出本班平均成績。
break語句可以用來實現提前結束循環(huán)。5.5.1
用break語句提前退出循環(huán)第29頁,課件共38頁,創(chuàng)作于2023年2月5.5.1
用break語句提前退出循環(huán)
#include<stdio.h>
voidmain()
{floatscore,sum=0,average;
inti,n;
for(i=1;i<31;i++)
{scanf("%f",&score)
if(score<0)break;
sum=sum+score;
}
n=i-1;
average=sum/n;
printf("n=%d,average=%7.2f\n",n,average);
}運行結果:100↙(輸入一個學生成績)80↙70↙-1↙(輸入負數,表示本班數據結束)n=3,average=83.33第30頁,課件共38頁,創(chuàng)作于2023年2月5.5.1
用break語句提前退出循環(huán)說明:
如果一個班有30人,則輸入完30人的成績后累計總分后自動結束循環(huán),不必再輸入負數作為結束標志。在結束循環(huán)后i的值等于31(因為執(zhí)行完30次循環(huán)后,i再加1,變成31,此時才終止循環(huán)),因此學生數n應該等于i-1。如果一個班人數少于30人,則在輸入完全班學生的成績后,輸入一個負數,此時程序就跳過循環(huán)體其余的語句,也不再繼續(xù)執(zhí)行其余的幾次循環(huán)。直接跳到循環(huán)下面的語句(n=i-1;)繼續(xù)執(zhí)行。剛輸入的數不進行累加(不執(zhí)行sum=sum+score;)。注意此時i的值,假如已輸入了25個有效分數,在第26次循環(huán)時輸入一個負數,此時i的值是26,而學生數n應是i-1。第31頁,課件共38頁,創(chuàng)作于2023年2月5.5
提前結束循環(huán)
5.5.2
用continue語句提前結束本次循環(huán)continue語句作用為結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定.一般形式:
continue;第32頁,課件共38頁,創(chuàng)作于2023年2月continue語句和break語句的區(qū)別:
continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。
break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。while(表達式1)
{…
if(表達式2)continue;
…}
while(表達式1)
{…if(表達式2)break;…}第33頁,課件共38頁,創(chuàng)作于2023年2月continue語句break語句第34頁,課件共38頁,創(chuàng)作于2023年2月
輸入一個班全體學生的成績,把不及格的學生成績輸出,并求及格學生的平均成績。例題5.7解題思路
在進行循環(huán)中,檢查學生的成績,把其中不及格的成績輸出,然后跳過后面總成績的累加和求平均成績的語句。用continue語句即可處理此問題。5.5提前結束循環(huán)第35頁,課件共38頁,創(chuàng)作于2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海農林職業(yè)技術學院《國際技術與服務貿易》2023-2024學年第二學期期末試卷
- 2025屆四川省巴中市巴州區(qū)小升初常考易錯數學檢測卷含解析
- 吉利學院《大數據財務分析》2023-2024學年第二學期期末試卷
- 上海中醫(yī)藥大學《電氣專業(yè)外語及文獻檢索》2023-2024學年第二學期期末試卷
- 山西醫(yī)科大學晉祠學院《大數據應用開發(fā)語言》2023-2024學年第二學期期末試卷
- 南京工業(yè)大學浦江學院《中國共產黨新聞事業(yè)史》2023-2024學年第二學期期末試卷
- 山西省臨汾市2025年小升初模擬數學測試卷含解析
- 藤縣2025屆數學四下期末達標測試試題含解析
- 2025年國網寧夏電力有限公司高校畢業(yè)生提前批招聘校園宣講安排筆試參考題庫附帶答案詳解
- 2025年02月廣西欽州市事業(yè)單位公開招聘893人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 生產組織供應能力說明
- 碳酸丙烯酯法脫碳工藝工程設計
- 藥劑學-名詞解釋
- 口語課件Unit 1 Ways of Traveling Possibility and Impossibility
- 做一個幸福教師
- 城市支路施工組織設計
- 耐堿玻纖網格布檢測報告
- 20米往返跑教案 (2)
- 甲醛安全周知卡
- 《書法練習指導》教案江蘇鳳凰少年兒童出版社四年級下冊
- 三菱變頻器e700使用手冊基礎篇
評論
0/150
提交評論