《程序控制流程》PPT課件.ppt
第3章 程序控制流程,3.1 選擇結(jié)構(gòu)程序設(shè)計(jì) 3.2 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 3.3 break和continue語(yǔ)句,3.1 選擇結(jié)構(gòu)程序設(shè)計(jì),單條件 if else 多條件 switch,3.1.1 if語(yǔ)句,當(dāng)條件為真(true)時(shí)執(zhí)行一個(gè)操作 條件為假(false)時(shí)執(zhí)行另一個(gè)操作,(1)雙分支 if(布爾表達(dá)式) 語(yǔ)句區(qū)塊1 else 語(yǔ)句區(qū)塊2,(2)單分支 if(布爾表達(dá)式) 語(yǔ)句區(qū)塊1,(3)if 的嵌套 if(布爾表達(dá)式1) 語(yǔ)句區(qū)塊1 else if (布爾表達(dá)式2) 語(yǔ)句區(qū)塊2 else if (布爾式3) 語(yǔ)句區(qū)塊3 . else,(1)雙分支:c3_1.java判斷給出的成績(jī)是否及格,public class c3_1 public static void main(String args) int grade; grade=86; if(grade>=60) System.out.print("通過,成績(jī)是:"); System.out.println(grade); else System.out.println("不及格"); ,語(yǔ)句塊多行語(yǔ)句,必須加 ,單行語(yǔ)句,程序的運(yùn)行結(jié)果是: 通過,成績(jī)是:86,例c3_2.java 比較兩個(gè)數(shù)的大小,import java.awt.*; import java.applet.*; 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 只有當(dāng)成績(jī)小于60時(shí),輸出“未通過” 其他不輸出,public class c3_3 public static void main(String args) int grade; grade=56; if(grade=90)System.out.println("成績(jī):優(yōu)"); else if(grade>=80)System.out.println("成績(jī):良"); else if(grade>=70)System.out.println("成績(jī):中等"); else if(grade>=60)System.out.println("成績(jī):及格"); else System.out.println("成績(jī):不及格"); ,例c3_5.java public class c3_5 public static void main(String args) int x,y; x=8;y=4; if(x>6) if(y>6) System.out.println(“設(shè)備正?!?; else System.out.println("設(shè)備出錯(cuò)"); ,注意:if嵌套時(shí),最近匹配:else 將與離它最近的if配對(duì),程序錯(cuò)誤反例: 當(dāng)x和y都大于6時(shí),輸出“設(shè)備正?!钡?信息;僅當(dāng)x6,y<6時(shí),輸出了“設(shè)備出錯(cuò)” 而xy) m=x; else m=y; 可用下面的條件運(yùn)算符來(lái)替代: m=(x>y)?x :y 若x>y為true 則表達(dá)式取x的值,否則取y的值 形式: 布爾表達(dá)式1?表達(dá)式2 :表達(dá)式3,表達(dá)式2和表達(dá)式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=(a>b) ? a : b; y=(a!=b) ? 1 : 0; min=(a<b) ? a : b; System.out.print("max="+max); System.out.print("ty="+y); System.out.println("tmin="+min); ,運(yùn)行結(jié)果是: max=2 y=1 min=1,3.2 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),while do-while for,while(布爾表達(dá)式) 循環(huán)體語(yǔ)句區(qū)塊 ,do 循環(huán)體語(yǔ)句區(qū)塊 while(布爾表達(dá)式),While和do-while的區(qū)別: Dowhile至少執(zhí)行一次循環(huán)體 而while可能一次都不執(zhí)行,3.2.1 while語(yǔ)句,【示例程序c3_8.java】 打印數(shù)字15。 public class c3_8 public static void main(String args) int counter=1; /循環(huán)變量及其初始值 while(counter<=5) /循環(huán)條件 System.out.println("counter="+counter); counter+; /循環(huán)變量增值 ,運(yùn)行結(jié)果如下: counter=1 counter=2 counter=3 counter=4 counter=5,3.2.2 do-while語(yǔ)句,【示例程序c3_9.java】 計(jì)算從1開始的連續(xù)n個(gè)自然數(shù)之和,當(dāng)其和值剛好超過100時(shí)結(jié)束,求這個(gè)n值。 import java.awt.*; import java.applet.*; public 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); ,該程序的運(yùn)行結(jié)果是: sum=105 n=14,3.2.3 for語(yǔ)句,適于:確切知道循環(huán)次數(shù)時(shí) 一般形式 for(初值表達(dá)式;布爾表達(dá)式;循環(huán)過程表達(dá)式) 循環(huán)體程序語(yǔ)句區(qū)塊 ,循環(huán)變量賦初值,用來(lái)判斷循環(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); ,該程序的運(yùn)行結(jié)果是: sum=2500 odd=101,true,false,public class c3_11 public static void main(String args) int f1=1, f2=1; /f1為第一項(xiàng),f2為第二項(xiàng) for( int i=1; i10) break; /3.布爾表達(dá)式寫在了循環(huán)體內(nèi)的if語(yǔ)句中 System.out.println("sum="+sum); ,【特2】for頭中使用逗號(hào)表達(dá)式,for結(jié)構(gòu)頭的構(gòu)件中,“初值表達(dá)式”和“循環(huán)過程表達(dá)式”中還可以使用逗號(hào)運(yùn)算符。這也是Java中唯一使用逗號(hào)運(yùn)算符的地方。,public class c3_13 public static void main(String args) int i,sum; for(i=1,sum=0;i<=10;i+) /初值表達(dá)式中使用了逗號(hào)運(yùn)算符 sum+=i; System.out.println("sum="+sum); 該程序的運(yùn)行結(jié)果是: sum=55,for(i=1,sum=0;i<=10;i+,sum+=i;) ; System.out.println("sum="+sum); /千萬(wàn)別忘記for末尾的;否則下一句就被當(dāng)成循環(huán)體了,思考,while vs. do-while vs. for及其適用場(chǎng)合,c3_15.java統(tǒng)計(jì)選票,設(shè)有李L、王 W、張Z 三人競(jìng)選領(lǐng)導(dǎo),由群眾投票表決 import java.io.*; public class c3_15 public static void main(String args)throws IOException BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); /上面一條語(yǔ)句是有關(guān)鍵盤輸入數(shù)據(jù)流處理的,詳細(xì)內(nèi)容將在第12章講解 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( );/從鍵盤上讀取一個(gè)字符串賦給c1 name=c1.charAt(0);/ charAt(0)從一個(gè)字符串中截取第0個(gè)字符 while(name!=#) switch(name) case L: case l: Ltotal=Ltotal+1; break; case W: case 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="+Ztotal); /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 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; /計(jì)算n!,結(jié)果存于s中 k=k+s; /計(jì)算前n項(xiàng)階乘之和,結(jié)果存于k中 System.out.println(n+"!="+s+" k="+k); n+; ,c3_17.java求解 (即1!+2!+3!+7!+8!),程序的運(yùn)行結(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語(yǔ)句,break: 1)可獨(dú)立使用,如case中 用在switch語(yǔ)句中,其作用是強(qiáng)制退出switch結(jié)構(gòu),執(zhí)行switch結(jié)構(gòu)后的語(yǔ)句 2)退出本層循環(huán) 若有內(nèi)外環(huán),則只能跳出內(nèi)環(huán),到外環(huán) Continue 只用于循環(huán),結(jié)束本次循環(huán),開始下次循環(huán) 當(dāng)程序執(zhí)行到continue語(yǔ)句時(shí)就返回到循環(huán)的入口處,執(zhí)行下一次循環(huán),而使循環(huán)體內(nèi)寫在continue語(yǔ)句后的語(yǔ)句不執(zhí)行,/對(duì)01000以內(nèi)的不能被3整除的數(shù)求和,當(dāng)和超過100時(shí),打印參與計(jì)算的數(shù)的個(gè)數(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,