《《程序控制流程》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《程序控制流程》PPT課件.ppt(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第3章 程序控制流程,3.1 選擇結(jié)構(gòu)程序設(shè)計 3.2 循環(huán)結(jié)構(gòu)程序設(shè)計 3.3 break和continue語句,3.1 選擇結(jié)構(gòu)程序設(shè)計,單條件 if else 多條件 switch,3.1.1 if語句,當條件為真(true)時執(zhí)行一個操作 條件為假(false)時執(zhí)行另一個操作,(1)雙分支 if(布爾表達式) 語句區(qū)塊1 else 語句區(qū)塊2,(2)單分支 if(布爾表達式) 語句區(qū)塊1,(3)if 的嵌套 if(布爾表達式1) 語句區(qū)塊1 else if (布爾表達式2) 語句區(qū)塊2 else if (布爾式3) 語句區(qū)塊3 . else,,(1)雙分支:c3_1
2、.java判斷給出的成績是否及格,public class c3_1 public static void main(String args) int grade; grade=86; if(grade=60) System.out.print(通過,成績是:); System.out.println(grade); else System.out.println(不及格); ,語句塊多行語句,必須加 ,單行語句,程序的運行結(jié)果是: 通過,成績是:86,例c3_2.java 比較兩個數(shù)的大小,import java.awt.*; import java.apple
3、t.*; public class c3_2 extends Applet public void paint(Graphics g) double d1=43.4; double d2=85.3; if(d1=d2) g.drawString(d1+ = +d2,25,25); else g.drawString(d1+ < +d2,25,25); ,(2)單分支c3_3.java 只有當成績小于60時,輸出“未通過” 其他不輸出,public class c3_3 public static void main(String args) int grade; gr
4、ade=56; if(grade<60) System.out.print(未通過,成績是:); System.out.println(grade); ,該程序的運行結(jié)果是: 未通過,成績是:56,(3)if語句的嵌套,//例c3_4.java用if嵌套將百分制轉(zhuǎn)換為5分制 public class c3_4 public static void main(String args) int grade=76; if(grade=90)System.out.println(成績:優(yōu)); else if(grade=80)System.out.println(成績:良);
5、 else if(grade=70)System.out.println(成績:中等); else if(grade=60)System.out.println(成績:及格); else System.out.println(成績:不及格); ,例c3_5.java public class c3_5 public static void main(String args) int x,y; x=8;y=4; if(x6) if(y6) System.out.println(“設(shè)備正?!?; else System.out.println(設(shè)備出錯);
6、 ,注意:if嵌套時,最近匹配:else 將與離它最近的if配對,程序錯誤反例: 當x和y都大于6時,輸出“設(shè)備正常”的 信息;僅當x6,y<6時,輸出了“設(shè)備出錯” 而x<=6時什么信息也沒輸出。 問題出在哪里? else同哪個if匹配了?, ,3.1.3 switch語句,從多個分支中選擇一個分支執(zhí)行時 嵌套的if過于繁瑣 例如:對給定的成績grade(介于0100),劃分成 優(yōu):90100 良:8090. 那么能不能根據(jù)kgrade/10的結(jié)果來判斷屬于哪個分數(shù)段呢? swtich,switch(表達式) case 值1:語句區(qū)塊1;break; //分支1 case 值2:語句
7、區(qū)塊2;break; //分支2 case 值n:語句區(qū)塊n;break; //分支n default : 語句區(qū)塊n+1; //分支n+1 ,可以是byte,char,short,int,但不能是float,case后面的值必須是常量,Default可以省略,注意break,,例:c3_6.java 判斷成績等級,import java.awt.*; import java.applet.*; public class c3_6 extends Applet public void paint(Graphics g) int k; int grade=86; //改為7
8、6 ,結(jié)果仍舊是良,因為8:后面沒有break k=grade/10; switch(k) case 10: case 9: g.drawString(成績:優(yōu),25,25); break; case 8: case 7: g.drawString(成績:良,25,25); break; case 6: g.drawString(成績:及格。,25,25); break; default: g.drawString(成績:不及格。,25,25); ,3.1.3 條件運算符三目運算符,適用:簡單的if/else語句 if (xy) m=x; else m=y; 可用下面
9、的條件運算符來替代: m=(xy)?x :y 若xy為true 則表達式取x的值,否則取y的值 形式: 布爾表達式1?表達式2 :表達式3,表達式2和表達式3的類型必須相同,【示例程序c3_7.java】 public class c3_1 public static void main(String args ) int max, min,a,b; int y; a=1; b=2; max=(ab) ? a : b; y=(a!=b) ? 1 : 0; min=(a
10、.print(ty=+y); System.out.println(tmin=+min); ,運行結(jié)果是: max=2 y=1 min=1,,,3.2 循環(huán)結(jié)構(gòu)程序設(shè)計,while do-while for,while(布爾表達式) 循環(huán)體語句區(qū)塊 ,do 循環(huán)體語句區(qū)塊 while(布爾表達式),While和do-while的區(qū)別: Dowhile至少執(zhí)行一次循環(huán)體 而while可能一次都不執(zhí)行,3.2.1 while語句,【示例程序c3_8.java】 打印數(shù)字15。 public class c3_8 public static void main(String args)
11、 int counter=1; //循環(huán)變量及其初始值 while(counter<=5) //循環(huán)條件 System.out.println(counter=+counter); counter++; //循環(huán)變量增值 ,,運行結(jié)果如下: counter=1 counter=2 counter=3 counter=4 counter=5,3.2.2 do-while語句,【示例程序c3_9.java】 計算從1開始的連續(xù)n個自然數(shù)之和,當其和值剛好超過100時結(jié)束,求這個n值。 import java.awt.*; import java.applet.*; p
12、ublic class c3_9 extends Applet public void paint(Graphics g) int n=0; int sum=0; //循環(huán)變量及其初始值 do n++; sum+=n; //循環(huán)變量增值 while(sum<=100); //循環(huán)條件 g.drawString(sum=+sum,25,25); g.drawString(n=+n,100,25); ,該程序的運行結(jié)果是: sum=105 n=14,3.2.3 for語句,適于:確切知道循環(huán)次數(shù)時 一般形式 for(初值表達式;布爾表達式;循環(huán)過程表達式) 循環(huán)體
13、程序語句區(qū)塊 ,循環(huán)變量賦初值,用來判斷循環(huán)是否繼續(xù),完成修改循環(huán)變量、改變循環(huán)條件,true,false,c3_10.java 求自然數(shù)1100之間所有奇數(shù)之和。,public class c3_10 public static void main(String args) int sum=0,odd; for(odd=1;odd<=100;odd+=2) sum +=odd; System.out.println(sum=+sum+ odd=+odd); ,該程序的運行結(jié)果是: sum=2500 odd=101,,true,false,public cla
14、ss c3_11 public static void main(String args) int f1=1, f2=1; //f1為第一項,f2為第二項 for( int i=1; i<38/2; i++) System.out.print(t+f1+t+f2); //每次輸出兩項 if(i%2==0)System.out.println(n); //每輸出兩次共4項后換行 f1=f1+f2; //計算下一個奇位項 f2=f2+f1; //計算下一個偶位項 ,例c3_11 求Fibanacci數(shù)列,Fibonacci數(shù)列:1,1,2,3,5,8,的前36個
15、數(shù)。,構(gòu)造該數(shù)列的遞推關(guān)系是: F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3),,,,運行結(jié)果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 177112865746368 75025 121393196418317811 514229 83204013462692178309 35245785702887922746514930352,,【特1】省略部分成分的for,for(;;) 可以,但要在循環(huán)體內(nèi)加循環(huán)變量,
16、小心“死循環(huán)”,【示例程序c3_12.java】 編寫求解(即1+2+3++9+10)的程序。 public class c3_12 public static void main(String args) int i=1; //1.初值表達式寫在循環(huán)語句之前 int sum=0; for(;;) sum +=i++; //2.循環(huán)過程表達式i++寫在了循環(huán)體內(nèi) if(i10) break; //3.布爾表達式寫在了循環(huán)體內(nèi)的if語句中 System.out.println(sum=+sum); ,【特2】for頭中使用逗號表達式,for結(jié)構(gòu)頭的構(gòu)件中
17、,“初值表達式”和“循環(huán)過程表達式”中還可以使用逗號運算符。這也是Java中唯一使用逗號運算符的地方。,public class c3_13 public static void main(String args) int i,sum; for(i=1,sum=0;i<=10;i++) //初值表達式中使用了逗號運算符 sum+=i; System.out.println(sum=+sum); 該程序的運行結(jié)果是: sum=55,for(i=1,sum=0;i<=10;i++,sum+=i;) ; System.out.println(sum=+sum); //千萬別忘記f
18、or末尾的;否則下一句就被當成循環(huán)體了,思考,while vs. do-while vs. for及其適用場合,c3_15.java統(tǒng)計選票,設(shè)有李L、王 W、張Z 三人競選領(lǐng)導,由群眾投票表決 import java.io.*; public class c3_15 public static void main(String args)throws IOException BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); //上面一條語句是有關(guān)鍵盤輸入數(shù)據(jù)流處理的,詳細內(nèi)容將在第1
19、2章講解 int Ltotal=0,Wtotal=0,Ztotal=0; char name; String c1; System.out.print(enter letter L or W or Z name, # to end:); c1=keyin.readLine( );//從鍵盤上讀取一個字符串賦給c1 name=c1.charAt(0);// charAt(0)從一個字符串中截取第0個字符 while(name!=#) switch(name) case L: case l: Ltotal=Ltotal+1; break; case W: ca
20、se w: Wtotal=Wtotal+1; break; case Z: case z: Ztotal=Ztotal+1; break; System.out.print(enter letter L or W or Z name ,# to end:); c1=keyin.readLine( ); name=c1.charAt(0); //while循環(huán)結(jié)束,System.out.println( Ltotal=+Ltotal); System.out.println( Wtotal=+Wtotal); System.out.println( Ztotal=+Ztot
21、al); //end of class,3.2.7循環(huán)嵌套c3_16.java,//編程打印三角形數(shù)字圖案。 public class c3_16 public static void main(String args) for(int i=1;i=10) System.out.print(+i+” ); else System.out.print(+i+“ ); System.out.println( ); //外層for循環(huán)結(jié)束 ,1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6
22、7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10,,,public class c3_17 public static void main(String args) int n=1,m,s,k=0; while(n<=8) for(s=1,m=1;m<=n;m++) s=s*m; //計算n!,結(jié)果存于s中 k=k+s; //計算前n項階乘之和,結(jié)果存于k中 System.out.println(n+!=+s+ k=+k); n++;
23、 ,c3_17.java求解 (即1!+2!+3!++7!+8!),程序的運行結(jié)果如下: 1!=1 k=1 2!=2 k=3 3!=6 k=9 4!=24 k=33 5!=120 k=153 6!=720 k=873 7!=5040 k=5913 8!=40320 k=46233,3.3 break 和continue語句,break: 1)可獨立使用,如case中 用在switch語句中,其作用是強制退出switch結(jié)構(gòu),執(zhí)行switch結(jié)構(gòu)后的語句 2)退出本層循環(huán) 若有內(nèi)外環(huán),則只能跳出內(nèi)環(huán),到外環(huán) Continue 只用于循環(huán),結(jié)束本次循環(huán),開始下次循環(huán) 當程序執(zhí)行到continue語句時就返回到循環(huán)的入口處,執(zhí)行下一次循環(huán),而使循環(huán)體內(nèi)寫在continue語句后的語句不執(zhí)行,//對01000以內(nèi)的不能被3整除的數(shù)求和,當和超過100時,打印參與計算的數(shù)的個數(shù)及累加和。 public class sample public static void main(String args) int sum=0,i; for(i=0;i100) break; System.out.println(sum=+sum+ i=+(i-1)); //結(jié)果是sum=108 i=16,3.3.2 continue,,作業(yè),P58 1,3,6,7,9,10,12,