第4章Java循環(huán)結(jié)構(gòu)_第1頁(yè)
第4章Java循環(huán)結(jié)構(gòu)_第2頁(yè)
第4章Java循環(huán)結(jié)構(gòu)_第3頁(yè)
第4章Java循環(huán)結(jié)構(gòu)_第4頁(yè)
第4章Java循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第4章章 Java循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 本章學(xué)習(xí)重點(diǎn)本章學(xué)習(xí)重點(diǎn) lwhile、do-while以及for語(yǔ)句 。l跳轉(zhuǎn)語(yǔ)句break和continue 。l分支及循環(huán)結(jié)構(gòu)的嵌套編程 。l較復(fù)雜程序的執(zhí)行流程分析 。4.1 循環(huán)結(jié)構(gòu)l在進(jìn)行程序設(shè)計(jì)時(shí),經(jīng)常會(huì)碰到一些計(jì)算并不很復(fù)雜,但卻要重復(fù)進(jìn)行相同的處理操作的問(wèn)題。比如:l(1)計(jì)算累加和1+2+3+100。l(2)計(jì)算階乘,如10!。l(3)計(jì)算一筆錢在銀行存了若干年后,連本帶息有多少? l問(wèn)題(1),用一條語(yǔ)句:sum = 1+2+3+100 來(lái)求解,則賦值表達(dá)式太長(zhǎng),l改成多條賦值語(yǔ)句:sum +=1; sum +=2; sum +=3;

2、 ; sum +=100;也不行,即便加到100那也有100條語(yǔ)句,程序過(guò)于臃腫,不利編輯、存儲(chǔ)和運(yùn)行。 lJava語(yǔ)言引入三種語(yǔ)句:while、do-while以及for來(lái)解決這類問(wèn)題。我們把這類問(wèn)題的結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu),把這三種實(shí)現(xiàn)語(yǔ)句稱為循環(huán)語(yǔ)句。l這三種循環(huán)語(yǔ)句的流程圖如下所示: while語(yǔ)句lwhile語(yǔ)句的一般語(yǔ)法格式如下:while(條件表達(dá)式) 循環(huán)體; while是關(guān)鍵字,首先計(jì)算條件表達(dá)式的值,若為true則執(zhí)行循環(huán)體,然后再計(jì)算條件表達(dá)式的值,只要是true就循環(huán)執(zhí)行,直到布爾值為false才結(jié)束退出while結(jié)構(gòu)。 循環(huán)體可以是復(fù)合語(yǔ)句、簡(jiǎn)單語(yǔ)句甚至是空語(yǔ)句, 一般情況

3、下,循環(huán)體中應(yīng)包含有能修改條件表達(dá)式取值的語(yǔ)句,否則就容易出現(xiàn)“死循環(huán)”(程序毫無(wú)意義地?zé)o限循環(huán)下去)。 例如:while(1);這里,循環(huán)體為一空語(yǔ)句,而條件表達(dá)式為一常量1(Java語(yǔ)言里,0代表false,非0為true),因此這是一死循環(huán)。 【例4-1】利用while語(yǔ)句實(shí)現(xiàn)1到100的累加。 public static void main(String args) int sum=0; /累加和變量sum int i=1; / 控制變量i while(i=100) sum+=i; i+; System.out.println(累加和為:+sum); (1)存放累加和的變量初始值一般賦

4、值為0。(2)變量i既是累加數(shù),同時(shí)又是控制變量(控制循環(huán)體的循環(huán)次數(shù))。(3)循環(huán)體語(yǔ)句sum+=i; i+; 可以合并簡(jiǎn)寫為:sum+=i+; 但對(duì)于初學(xué)者而言,不建議這么寫。()while循環(huán)體語(yǔ)句多于一條,因而必須以復(fù)合語(yǔ)句形式出現(xiàn),千萬(wàn)別漏了大括號(hào)。 【例4-2】利用while語(yǔ)句求10的階乘。public class Test public static void main(String args) long jc=1;int i=1;while(i=10) jc*=i; i+;System.out.println(i-1)+!結(jié)果:+jc); 本程序需要注意的要點(diǎn)有:(1)求階乘

5、的積時(shí),變量jc初始值應(yīng)為1。(2)由于階乘的積,數(shù)值往往比較大,因此要注意防止溢出,比如盡量選用取值范圍大的長(zhǎng)整型long。【例4-4】有一條長(zhǎng)的階梯,如果每步2階,則最后剩1階,每步3階則剩2階,每步5階則剩4階,每步6階則剩5階,只有每步7階的最后才剛好走完,一階不剩,問(wèn)這條階梯最少共有多少階?public class Test public static void main(String args) int i=1; while(!(i%2=1&i%3=2&i%5=4&i%6=5&i%7=0) i+; System.out.println(這條階梯最少有

6、:+i+階); l假如現(xiàn)在想算出在1萬(wàn)個(gè)階梯內(nèi),都有哪些階梯數(shù)滿足題意的話,可以這樣改寫程序中的while結(jié)構(gòu): while(i=10000) if(i%2=1&i%3=2&i%5=4&i%6=5&i%7=0) System.out.print(i+階階 ); i+; l新程序運(yùn)行結(jié)果如下:l119階 329階 539階 749階 959階 1169階 1379階 1589階 1799階 2009階 2219階 2429階 2639階 2849階 3059階 3269階 3479階 3689階 3899階 4109階 4319階 4529階 4739階 4949

7、階 5159階 5369階 5579階 5789階 5999階 6209階 6419階 6629階 6839階 7049階 7259階7469階 7679階 7889階 8099階 8309階 8519階 8729階 8939階 9149階 9359階 9569階 9779階 9989階do-while語(yǔ)句語(yǔ)句 ldo-while語(yǔ)句的語(yǔ)法格式如下: do循環(huán)體;循環(huán)體; while(條件表達(dá)式);(條件表達(dá)式);【例4-5】假定在Bank中存款額5000元,按6.25%的年利率計(jì)算,試問(wèn)過(guò)多少年后 就會(huì)連本帶利翻一翻?試編程實(shí)現(xiàn)之。public class Testpublic static

8、 void main(String args) double m=5000.0; /初始存款額 double s=m; /當(dāng)前存款額 int count=0; / 存款年數(shù) do s=(1+0.0625)*s; count+; while(s2*m); System.out.println(count+年后連本帶利翻一翻!);for語(yǔ)句語(yǔ)句 lfor語(yǔ)句的一般語(yǔ)法格式如下: for(表達(dá)式(表達(dá)式1;條件表達(dá)式;條件表達(dá)式2;表達(dá)式;表達(dá)式3) 循環(huán)體;循環(huán)體; l表達(dá)式1一般用來(lái)給循環(huán)控制變量賦初值,它僅在剛開始時(shí)被執(zhí)行一次,以后就不再被執(zhí)行。l表達(dá)式2是一個(gè)條件表達(dá)式,根據(jù)其取值的不同,決

9、定循環(huán)體是否被執(zhí)行,若為true,則執(zhí)行循環(huán)體,然后再執(zhí)行表達(dá)式3。l表達(dá)式3通常用作修改循環(huán)控制變量之用,接著又判斷條件表達(dá)式2的布爾值,若還為true,則繼續(xù)上述循環(huán),直至布爾值變?yōu)閒alse。 【例4-6】利用for語(yǔ)句實(shí)現(xiàn)1到100的累加。public class Test public static void main(String args) int sum=0; /累加和變量sum for(int i=1; i=100;i+) / 控制變量i sum+=i; System.out.println(累加和為:+sum); 【例4-7】假定在Bank中存款額5000元,按6.25%的

10、 年利率計(jì)算,試問(wèn)過(guò)多少年后就會(huì)連本帶利翻一翻? 試用for語(yǔ)句編程實(shí)現(xiàn)之。public class Test public static void main(String args) double m=5000.0; /初始存款額double s=m; /當(dāng)前存款額int count=0; / 存款年數(shù)for(;s2*m;s=(1+0.0625)*s)count+;System.out.println(count+年后連本帶利翻一翻!); 4.2 循環(huán)嵌套循環(huán)嵌套 l當(dāng)循環(huán)體語(yǔ)句又是循環(huán)語(yǔ)句時(shí),就構(gòu)成了循環(huán)嵌套,即多重循環(huán),循環(huán)嵌套可以是兩重的、三重的甚至更多重(較復(fù)雜的算法)。 【例4-8

11、】編程實(shí)現(xiàn)打印以下圖案:* * * * * *public class Testpublic static void main(String args) int i,j; / i控制行數(shù), j控制*的個(gè)數(shù) for(i=1;i=6;i+) for(j=1;j=i*2-1;j+) System.out.print(*); System.out.println(); /換行 *?4.3 跳轉(zhuǎn)語(yǔ)句跳轉(zhuǎn)語(yǔ)句 lbreak lcontinue lreturn 1 break lbreak語(yǔ)句的作用是使程序的流程從一個(gè)語(yǔ)句塊的內(nèi)部跳轉(zhuǎn)出來(lái),如前述的switch結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)。break語(yǔ)句的語(yǔ)法格式為:

12、break 標(biāo)號(hào);l標(biāo)號(hào)是可選的,如前面介紹的switch結(jié)構(gòu)程序就沒(méi)有使用標(biāo)號(hào)。不使用標(biāo)號(hào)的break語(yǔ)句只能跳出當(dāng)前的switch或循環(huán)結(jié)構(gòu),而帶標(biāo)號(hào)的則可以跳出由標(biāo)號(hào)指出的語(yǔ)句塊,并從語(yǔ)句塊的下條語(yǔ)句處繼續(xù)程序的執(zhí)行。l因此,帶標(biāo)號(hào)的break語(yǔ)句可以用來(lái)跳出多重循環(huán)結(jié)構(gòu)。 【例4-9】寫出以下程序執(zhí)行后的輸出結(jié)果。public class Test public static void main(String args) int i ,s=0; for(i=1;i50) break; System.out.println(s=+s); 【例4-10】寫出以下程序執(zhí)行后的輸出結(jié)果。pub

13、lic class Test public static void main(String args) int jc=1,i=1; while(true) jc=jc*i; i=i+1; if (jc100000) /首先突破10萬(wàn)的階乘 break; System.out.println(i-1)+的階乘值是+jc); 【例4-11】寫出以下程序執(zhí)行后的輸出結(jié)果。public class Test public static void main(String args) int s=0,i=1; label: while(true) while(true) if (i%2=0) break

14、; /不帶標(biāo)號(hào) if(s50) break label; /帶標(biāo)號(hào) s+=i+; i+; System.out.println(s=+s); 2 continue lcontinue語(yǔ)句只能用于循環(huán)結(jié)構(gòu),它也有兩種使用形式:不帶標(biāo)號(hào)和帶標(biāo)號(hào)。l前者的功能是提前結(jié)束本次循環(huán),即跳過(guò)當(dāng)前循環(huán)體的其他后續(xù)語(yǔ)句,提前進(jìn)入下一輪循環(huán)體繼續(xù)執(zhí)行。對(duì)于while和do-while循環(huán),不帶標(biāo)號(hào)的continue語(yǔ)句會(huì)使流程直接跳轉(zhuǎn)到條件表達(dá)式,而對(duì)于for循環(huán),則跳轉(zhuǎn)至表達(dá)式3,修改控制變量后再進(jìn)行條件表達(dá)式2的判斷。l帶標(biāo)號(hào)continue語(yǔ)句多用在多重循環(huán)結(jié)構(gòu)中,標(biāo)號(hào)的位置與break語(yǔ)句的標(biāo)號(hào)位置相類

15、似,一般需放至整個(gè)循環(huán)結(jié)構(gòu)的前面,用來(lái)標(biāo)識(shí)這個(gè)循環(huán)結(jié)構(gòu),一旦內(nèi)層循環(huán)執(zhí)行了帶標(biāo)號(hào)continue語(yǔ)句,程序流程則跳轉(zhuǎn)到標(biāo)號(hào)處的最外層循環(huán),具體是:while和do-while循環(huán),跳轉(zhuǎn)到條件表達(dá)式,for循環(huán),跳轉(zhuǎn)至表達(dá)式3。 【例4-12】寫出以下程序執(zhí)行后的輸出結(jié)果。public class Test public static void main(String args) int s=0,i=0; do i+; if (i%2!=0) continue; s+=i; while(s50); System.out.println(s=+s); 【例4-13】寫出以下程序執(zhí)行后的輸出結(jié)果。public class Test public static void main(String args) int i,j; label: for(i=1;i=200;i+) /查找1到200以內(nèi)的素?cái)?shù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論