第4章Java循環結構_第1頁
第4章Java循環結構_第2頁
第4章Java循環結構_第3頁
第4章Java循環結構_第4頁
第4章Java循環結構_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、下,循環體中應包含有能修改條件表達式取值的語句,否則就容易出現“死循環”(程序毫無意義地無限循環下去)。 例如:while(1);這里,循環體為一空語句,而條件表達式為一常量1(Java語言里,0代表false,非0為true),因此這是一死循環。 【例4-1】利用while語句實現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既是累加數,同時又是控制變量(控制循環體的循環次數)。(3)循環體語句sum+=i; i+; 可以合并簡寫為:sum+=i+; 但對于初學者而言,不建議這么寫。()while循環體語句多于一條,因而必須以復合語句形式出現,千萬別漏了大括號。 【例4-2】利用while語句求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)+!結果:+jc); 本程序需要注意的要點有:(1)求階乘

5、的積時,變量jc初始值應為1。(2)由于階乘的積,數值往往比較大,因此要注意防止溢出,比如盡量選用取值范圍大的長整型long。【例4-4】有一條長的階梯,如果每步2階,則最后剩1階,每步3階則剩2階,每步5階則剩4階,每步6階則剩5階,只有每步7階的最后才剛好走完,一階不剩,問這條階梯最少共有多少階?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假如現在想算出在1萬個階梯內,都有哪些階梯數滿足題意的話,可以這樣改寫程序中的while結構: 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新程序運行結果如下: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語句語句 ldo-while語句的語法格式如下: do循環體;循環體; while(條件表達式);(條件表達式);【例4-5】假定在Bank中存款額5000元,按6.25%的年利率計算,試問過多少年后 就會連本帶利翻一翻?試編程實現之。public class Testpublic static

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

9、定循環體是否被執行,若為true,則執行循環體,然后再執行表達式3。l表達式3通常用作修改循環控制變量之用,接著又判斷條件表達式2的布爾值,若還為true,則繼續上述循環,直至布爾值變為false。 【例4-6】利用for語句實現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、 年利率計算,試問過多少年后就會連本帶利翻一翻? 試用for語句編程實現之。public class Test public static void main(String args) double m=5000.0; /初始存款額double s=m; /當前存款額int count=0; / 存款年數for(;s2*m;s=(1+0.0625)*s)count+;System.out.println(count+年后連本帶利翻一翻!); 4.2 循環嵌套循環嵌套 l當循環體語句又是循環語句時,就構成了循環嵌套,即多重循環,循環嵌套可以是兩重的、三重的甚至更多重(較復雜的算法)。 【例4-8

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

12、break 標號;l標號是可選的,如前面介紹的switch結構程序就沒有使用標號。不使用標號的break語句只能跳出當前的switch或循環結構,而帶標號的則可以跳出由標號指出的語句塊,并從語句塊的下條語句處繼續程序的執行。l因此,帶標號的break語句可以用來跳出多重循環結構。 【例4-9】寫出以下程序執行后的輸出結果。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】寫出以下程序執行后的輸出結果。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萬的階乘 break; System.out.println(i-1)+的階乘值是+jc); 【例4-11】寫出以下程序執行后的輸出結果。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、; /不帶標號 if(s50) break label; /帶標號 s+=i+; i+; System.out.println(s=+s); 2 continue lcontinue語句只能用于循環結構,它也有兩種使用形式:不帶標號和帶標號。l前者的功能是提前結束本次循環,即跳過當前循環體的其他后續語句,提前進入下一輪循環體繼續執行。對于while和do-while循環,不帶標號的continue語句會使流程直接跳轉到條件表達式,而對于for循環,則跳轉至表達式3,修改控制變量后再進行條件表達式2的判斷。l帶標號continue語句多用在多重循環結構中,標號的位置與break語句的標號位置相類

15、似,一般需放至整個循環結構的前面,用來標識這個循環結構,一旦內層循環執行了帶標號continue語句,程序流程則跳轉到標號處的最外層循環,具體是:while和do-while循環,跳轉到條件表達式,for循環,跳轉至表達式3。 【例4-12】寫出以下程序執行后的輸出結果。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】寫出以下程序執行后的輸出結果。public class Test public static void main(String args) int i,j; label: for(i=1;i=200;i+) /查找1到200以內的素數

溫馨提示

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

評論

0/150

提交評論