第四章 流程控制_第1頁
第四章 流程控制_第2頁
第四章 流程控制_第3頁
第四章 流程控制_第4頁
第四章 流程控制_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JAVA語言程序設計西藏民族學院張孝飛1語句和復合語句分支結(jié)構(gòu)(選擇結(jié)構(gòu))循環(huán)結(jié)構(gòu)跳轉(zhuǎn)語句本章主

要內(nèi)容第四章流程控制23Java語言中語句可以是以分號“;”結(jié)尾的簡單語句,也可以是用一對花括號“{}”括起來的復合語句。Java語言的復合語句與C++復合語句不同的是:Java語言不允許在兩個嵌套的復合語句內(nèi)聲明兩個同名的變量。Java中的注釋形式:單行://多行:/**/文件注釋(Java特有的):/***/

文件注釋產(chǎn)生一個HTML文檔,從而為程序提供文檔說明。publicstaticvoidmain(String[]args){

inta;……{intb;

inta;//錯誤,因變量a前面已定義……}}4.1語句與復合語句34語句1圖4.1順序結(jié)構(gòu)語句24.2順序結(jié)構(gòu)4if語句1.簡單的條件語句語句的格式如下:if(表達式){ 語句;}圖4-1簡單的條件語句4.3Java分支結(jié)構(gòu)5(1)放在if之后的括號里的只能是一個邏輯表達式,即這個表達式的返回值只能是true或false。(2)如果表達式的值為true,則執(zhí)行語句;如果表達式的值為false,則什么也不執(zhí)行。(3)花括號括起來的語句塊可以只有一行語句,也可以由多行代碼構(gòu)成。一個語句塊通常被當成一個整體來執(zhí)行。如果語句塊只有一行語句時,則可以省略花括號,因為單行語句本身就是一個整體,無須花括號來把它們定義成一個整體。說明:6【例4-1】通過命令行輸入一個人的年齡,判斷其是否為未成年人。importjava.io.*;publicclassTestAge{ publicstaticvoidmain(String[]args)throwsIOException

{

InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in);

intage;System.out.println("請輸入一個年齡,回車");

age=Integer.parseInt(bin.readLine());

if(age<18)

System.out.println("這是一個未成年人!");

}

}72.帶else的條件語句語句的格式如下:if(表達式){ 語句1;}else{語句2;}圖4-2帶else的條件語句8說明:(1)放在if之后的括號里的只能是一個邏輯表達式,即這個表達式的返回值只能是true或false。(2)如果if表達式的值為true,則執(zhí)行語句1;如果表達式的值為false,則執(zhí)行語句2。9【例4-2】判斷一個年份是否為閏年,是則顯示,否則提示某年不是閏年。(閏年的判斷規(guī)則:如果某年能被4整除且不能被100整除;或者某年能被400整除)importjava.io.*;publicclassTestYear{ publicstaticvoidmain(String[]args)throwsIOException

{

InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in);10intyear;System.out.println("請輸入一個年份,回車");year=Integer.parseInt(bin.readLine());

if(year%4==0&&(year%100!=0)||(year%400==0))

System.out.println(year+"是閏年!");elseSystem.out.println(year+"不是閏年!");}}11【例4.3】找出三個整數(shù)中的最大值和最小值。//filename:App4_1.javaif語句的應用publicclassApp4_1{publicstaticvoidmain(String[]args){inta=1,b=2,c=3,max,min;if(a>b)max=a;elsemax=b;

12if(c>max)max=c;System.out.println("Max="+max);min=a<b?a:b;min=c<min?c:min;System.out.println("Min="+min);}}1314if多重條件選擇結(jié)構(gòu)(if-else嵌套)if(條件表達式1){語句序列1}elseif(條件表達式2){語句序列2}......elseif(條件表達式n){語句序列n}else{語句序列n+1}圖4.4多重條件選擇結(jié)構(gòu)TF條件表達式1語句序列1TF條件表達式2語句序列2TF條件表達式n語句序列n語句序列n+1條件表達式的結(jié)果必須都是布爾型見例4.44.3分支結(jié)構(gòu)14【例4-5】根據(jù)百分制分數(shù)判定成績等級,標準如下:A:90~100分B:80~89分C:70~79分D:60~69分E:60分以下publicclassTestGrade{publicstaticvoidmain(String[]args){intscore=89;charch;if(score>=90)ch='A';15

elseif(score>=80)ch='B';elseif(score>=70)ch='C';elseif(score>=60)ch='D'; elsech='E';System.out.println("等級"+ch);}}16Java提供了多分支選擇語——switch語句。使用switch可以測試多個不同的條件并做出相對的響應。

switch(表達式){case常量1:語句序列1; [break;]case常量2:語句序列2; [break;]…case常量n:語句序列n; [break;][default:語句序列n+1;]}4.3.2switch語句17(1)表達式的數(shù)據(jù)類型可以是byte、short、char和int類型,不允許是浮點數(shù)類型和long類型。break語句和default子句是可選項。(2)switch語句先計算表達式的值,然后依次匹配case子句后的常量1、常量2……常量n等值,如果遇到匹配的值即執(zhí)行對應的語句序列,直到遇到break語句為止;如果case子句中沒有break語句,則程序繼續(xù)匹配剩余case子句后的值。(3)如果沒有一個常量值與表達式的值相等,則執(zhí)行default子句中的語句序列;如果沒有default子句,switch語句不執(zhí)行任何操作。說明:18【例4.6】利用switch語句來判斷用戶從鍵盤上輸入的運算符,再輸出計算后的結(jié)果。//filename:App4_3.javaswitch語句的應用publicclassApp4_3{publicstaticvoidmain(String[]args)throwsException{inta=100,b=6;charoper;System.out.print("請輸入運算符:");oper=(char)System.in.read();//從鍵盤讀入一個字符存入變量oper中switch(oper){

19case'+'://輸出a+bSystem.out.println(a+"+"+b+"="+(a+b));break;case'-'://輸出a-bSystem.out.println(a+"-"+b+"="+(a-b));break;case'*'://輸出a*bSystem.out.println(a+"*"+b+"="+(a*b));break;case'/'://輸出a/bSystem.out.println(a+"/"+b+"="+((float)a/b));break;default://輸出字符串System.out.println("輸入的符號不正確!");}}}20【例4.7】從鍵盤上輸入一個月份,然后判斷該月份的天數(shù)。//filename:App4_4.javaswitch語句的應用importjava.util.*;publicclassApp4_4{publicstaticvoidmain(String[]args){intmonth,days;Scannerreader=newScanner(System.in);System.out.print("請輸入月份:");month=reader.nextInt();21switch(month){case2:days=28;//2月份是28天break;case4:case6:case9:case11:days=30;//4、6、9、11月份的天數(shù)為30break;default:days=31;//其它月份為31天}System.out.println(month+"月份為【"+days+"】天");}}22【例4-7】根據(jù)用戶輸入1~7之間的一個整數(shù),輸出相對應星期的英文單詞。importjava.io.*;publicclassTestWeek{publicstaticvoidmain(String[]args)throwsIOException{ InputStreamReaderin=newInputStreamReader(System.in); BufferedReaderbin=newBufferedReader(in); shortday;System.out.println("請輸入1~7之間的一個整數(shù)");

day=Short.parseShort(bin.readLine()); switch(day) {23case1:System.out.println("Monday");break; case2:System.out.println("Tuesday");break;case3:System.out.println("Wednesday");break;case4:System.out.println("Thursday");break;case5:System.out.println("Friday");break;case6:System.out.println("Saturday");break;case7:System.out.println("Sunday");break; default:System.out.println("請輸入1~7之間的一個數(shù)!"); }}}244.2.3while語句語句的格式如下:while(表達式){循環(huán)體;}圖4-6while語句流程圖25說明:(1)放在while之后的括號里的只能是一個布爾表達式。布爾表達式表示循環(huán)執(zhí)行的條件。(2)循環(huán)體可以是一條語句,也可以是復合的語句序列。如果只有單個語句需要重復,花括號可以省略。(3)while循環(huán)語句的執(zhí)行流程:先判斷while語句中的布爾表達式的值;如果是false,則不執(zhí)行循環(huán)體,直接執(zhí)行后面的程序;如果是true,則執(zhí)行循環(huán)體語句,然后重新驗證表達式的值,直到表達式的值為假時退出循環(huán)。(4)while語句的特點是先判斷表達式值為真后,再執(zhí)行循環(huán)體。如果while循環(huán)一開始布爾表達式的值就是假的,那么循環(huán)體就根本不被執(zhí)行。26【例4.5】計算Fibonacci序列的前16項。//filename:App4_5.javawhile語句的應用publicclassApp4_5{publicstaticvoidmain(String[]args){finalintMAX=15;//定義常量MAX=15inti=0,j=1,k=1;while(k<=MAX){System.out.print(""+i+""+j);i=i+j;//計算Fibonacci序列中的下一個數(shù)j=i+j;//計算Fibonacci序列中的下一個數(shù)k=k+2;//用于改變循環(huán)的條件表達式的值}System.out.println();}}27【例4.6】從鍵盤上輸入一個數(shù),判斷該數(shù)是否是Fibonacci序列中的數(shù)。//filename:App4_6.javawhile語句的應用importjava.io.*;publicclassApp4_6{publicstaticvoidmain(String[]args)throwsIOException{inta=0,b=1,n,num;Stringstr;BufferedReaderbuf;buf=newBufferedReader(newInputStreamReader(System.in));28System.out.print("請輸入一個正整數(shù):");str=buf.readLine();//從鍵盤上讀入字符串賦給變量strnum=Integer.parseInt(str);//將str轉(zhuǎn)換成int類型后賦給numwhile(b<num){n=a+b;a=b;b=n;}if(num==b)System.out.println(num+"是Fibonacci數(shù)");elseSystem.out.println(num+"不是Fibonacci數(shù)");}}29【例4.7】利用hasNextXXX()和nextXXX()方法的配合使用來完成鍵盤輸入。//filename:App4_7.javahasNextXXX()方法的使用importjava.util.*;publicclassApp4_7{publicstaticvoidmain(String[]args){doublesum=0;intn=0;System.out.println("請輸入多個數(shù),每輸入一個數(shù)后按Enter或Tab或空格鍵確認:");System.out.println("最后輸入一個非數(shù)字結(jié)束輸入操作");30Scannerreader=newScanner(System.in);//用System.in創(chuàng)建一個Scanner對象while(reader.hasNextDouble())//判斷輸入的數(shù)是否是雙精度浮點型{doublex=reader.nextDouble();//讀取并轉(zhuǎn)換表示double型數(shù)據(jù)的字符序列sum=sum+x;n++;}System.out.print("共輸入了【"+n+"】個數(shù),其和為:"+sum);}}314.2.2do—while語句語句的格式如下:do{ 循環(huán)體;}while(表達式);圖4-5do-while語句流程圖32說明:(1)放在while之后的括號里的只能是一個布爾表達式。布爾表達式表示循環(huán)執(zhí)行的條件。(2)循環(huán)體可以是一條語句,也可以是復合的語句序列。如果只有單個語句需要重復,花括號可以省略。(3)do—while語句的執(zhí)行過程是:先執(zhí)行一次循環(huán)體再判斷布爾表達式的值,當布爾表達式的值為true時重復執(zhí)行循環(huán)體中的語句,每次執(zhí)行循環(huán)體之后都要重新驗證表達式的值,直到表達式的值為false時退出循環(huán)。一定要有使布爾表達式的值取假的時候,否則會出現(xiàn)死循環(huán)。(4)特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立,do—while語句總是執(zhí)行它的循環(huán)體至少一次。33【例4.8】從鍵盤上輸入一個正整數(shù)n,然后計算1+2+…+n的結(jié)果并輸出。//filename:App4_8.javado-while循環(huán)的應用importjava.util.*;publicclassApp4_8{publicstaticvoidmain(String[]args){intn,i=1,sum=0;Scannerbuf=newScanner(System.in);do{System.out.print("輸入正整數(shù):");n=buf.nextInt();}while(n<=0);//要求輸入數(shù)n必須大于0,否則一直要求重新輸入

34while(i<=n)sum+=i++;//計算和System.out.println("1+2+…+"+n+"="+sum);//輸出結(jié)果}}35【例4.9】用輾轉(zhuǎn)相除法求兩個整數(shù)的最大公約數(shù)。//filename:App4_9.javaimportjava.io.*;publicclassApp4_9{publicstaticvoidmain(String[]args)throwsIOException{inta,b,k;Stringstr1,str2;BufferedReaderbuf;buf=newBufferedReader(newInputStreamReader(System.in));System.out.print("請輸入第一個數(shù)a=");str1=buf.readLine();//將輸入的文字賦值給字符串變量str136a=Integer.parseInt(str1);//將str1轉(zhuǎn)成int類型數(shù)據(jù)后賦給aSystem.out.print("請輸入第二個數(shù)b=");str2=buf.readLine();//將輸入的文字賦值給字符串變量str2b=Integer.parseInt(str2);//將str2轉(zhuǎn)成int類型數(shù)據(jù)后賦給bSystem.out.print("gcd("+a+","+b+")=");do{k=a%b;a=b;b=k;}while(k!=0);//若余數(shù)k不為0,則繼續(xù)進行下一次循環(huán)System.out.println(a);}}37【例4.10】已知S=N!,其中N為正整數(shù),從鍵盤上任意輸入一個大于1的整數(shù)M,求滿足S<M時的最大S及此時的N,并輸出S和N的值。//filename:App4_10.java循環(huán)語句的應用importjava.util.*;publicclassApp4_10{publicstaticvoidmain(String[]args){intn=1,s=1,m;Scannerreader=newScanner(System.in);38do{System.out.print("請輸入大于1的整數(shù)m:");m=reader.nextInt();}while(m<=1);//若m≤1會一直要求重新輸入,直到m>1為止while(s<m)//判斷n!<m是否成立{s*=n;//計算s=n!n++;}System.out.println("s="+s/(n-1)+"n="+(n-2));//輸出結(jié)果}}39

4.2.1for語句語句的格式如下:for(表達式1;表達式2;表達式3){ 循環(huán)體;}圖4-4for語句流程圖40說明:(1)表達式1一般是一個或多個(用逗號隔開)賦值語句,它用來給循環(huán)控制變量賦初值;表達式2是一個布爾類型的表達式,它決定什么時候退出循環(huán);表達式3一般用來修改循環(huán)變量,控制變量每循環(huán)一次后按什么方式變化。這三個部分之間用“;”分開。41(2)for語句的執(zhí)行過程:在循環(huán)剛開始時,先計算表達式1,在這個過程中,一般完成的是初始化循環(huán)變量或其它變量。根據(jù)表達式2的值來決定是否執(zhí)行循環(huán)體。表達式2是一個返回布爾值的表達式,若該值為假,將不執(zhí)行循環(huán)體,并退出循環(huán);若該值為真,將執(zhí)行循環(huán)體。執(zhí)行完一次循環(huán)體后,計算表達式3。每次執(zhí)行循環(huán)體之后都要重新驗證表達式2的值,直到表達式2的值為false時退出循環(huán)。(3)循環(huán)體可以是一條簡單語句,此時可以省略循環(huán)體外的花括號。循環(huán)體也可以是一組語句塊,此時不可以省略循環(huán)體外的花括號。42【例4.11】求1到10的累加和。//filename:App4_11.javafor循環(huán)語句的應用publicclassApp4_11{publicstaticvoidmain(String[]args){inti,n=10,s=0;for(i=1;i<=n;i++)//從1到10進行累加求和s=s+i;System.out.println("Sum=1+……+"+n+"="+s);s=0;System.out.print("Sum=");

43for(i=n;i>1;i--)//從10到2進行累加求和{s+=i;System.out.print(i+"+");//輸出數(shù)i和加號“+”}System.out.println(i+"="+(s+i));//輸出結(jié)果}}444.2.4嵌套循環(huán)如果在循環(huán)語句的循環(huán)體中又包含循環(huán)語句,就形成多重循環(huán)結(jié)構(gòu),稱為嵌套循環(huán)。嵌套循環(huán)既可以是for循環(huán)嵌套while循環(huán),也可以是while循環(huán)嵌套do—while循環(huán)……即各種類型的循環(huán)都可以作為外層循環(huán),各種類型的循環(huán)也可以作為內(nèi)層循環(huán)。當程序遇到嵌套循環(huán)時,如果外層循環(huán)的循環(huán)條件允許,則開始執(zhí)行外層循環(huán)的循環(huán)體,而內(nèi)層循環(huán)將被外層循環(huán)的循環(huán)體來執(zhí)行——只是內(nèi)層循環(huán)需要反復執(zhí)行自己的循環(huán)體而已。當內(nèi)層循環(huán)執(zhí)行結(jié)束、且外層循環(huán)的循環(huán)體執(zhí)行結(jié)束,則再次計算外層循環(huán)的循環(huán)條件,決定是否再次開始執(zhí)行外層循環(huán)的循環(huán)體。45根據(jù)上面分析,假設外層循環(huán)的循環(huán)次數(shù)為i次,內(nèi)層循環(huán)的循環(huán)次數(shù)為j次,那么內(nèi)層循環(huán)的循環(huán)體實際上需要執(zhí)行i*j次。嵌套循環(huán)不僅可以是兩層嵌套,還可以是三層嵌套,四層嵌套……不論循環(huán)如何嵌套,我們都可以把內(nèi)層循環(huán)當成外層循環(huán)的循環(huán)體來對待,區(qū)別只是這個循環(huán)體里包含了需要反復執(zhí)行的代碼。循環(huán)嵌套時,要求內(nèi)循環(huán)完全包含在外循環(huán)之內(nèi),不允許出現(xiàn)相互交叉46【例4-17】利用雙重循環(huán),輸出九九乘法表:publicclassTable{publicstaticvoidmain(Strin

溫馨提示

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

評論

0/150

提交評論