第三章-流程控制語句_第1頁
第三章-流程控制語句_第2頁
第三章-流程控制語句_第3頁
第三章-流程控制語句_第4頁
第三章-流程控制語句_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章流程控制語句13.1語句概述

3.2分支語句3.3循環(huán)語句3.4跳轉(zhuǎn)語句3.5常用的程序設(shè)計方法

3.6格式化的輸入輸出

21.1

Java語言簡介3.1.1Java語句的分類3.1.2結(jié)構(gòu)化程序設(shè)計的三種基本流程

33.1.1Java語句的分類1.空語句2.表達(dá)式語句3.聲明語句4.標(biāo)號語句標(biāo)號語句的格式為:標(biāo)號:語句5.塊語句6.斷言語句

其語法格式:assert表達(dá)式1;assert表達(dá)式1:表達(dá)式2;其中,表達(dá)式1必須是boolean表達(dá)式,表達(dá)式2則可以是任何類型。表達(dá)式1為假,拋出異常。43.1.2結(jié)構(gòu)化程序設(shè)計的三種基本流程

計算機(jī)算法流程,只有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。每種結(jié)構(gòu)是單入口、單出口的。

AB真假BApP循環(huán)體假真5Java語言的三個顯著特點(diǎn)1跨平臺(體系結(jié)構(gòu)中立)

Java程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行;完全統(tǒng)一的語言版本,實(shí)現(xiàn)平臺無關(guān)性;字節(jié)代碼與平臺無關(guān)性;訪問底層操作系統(tǒng)功能的擴(kuò)展類庫,不依賴于具體系統(tǒng)等。典型商用系統(tǒng)。2安全性好

除了Java語言具有的許多安全特性以外,Java提供了字節(jié)碼校驗器、文件訪問限制機(jī)制、類裝載器和運(yùn)行時內(nèi)存布局四級安全保證機(jī)制。3面向?qū)ο?/p>

面向?qū)ο蟮募夹g(shù)是當(dāng)今軟件開發(fā)的主流技術(shù)之一。Java語言是一個徹底的純面向?qū)ο蟮某绦蛟O(shè)計語言。它具有面向?qū)ο蟮姆庋b、繼承和多態(tài)三大特點(diǎn)。61.2

Java程序工作原理

1.2.1Java程序工作流程

1.2.2Java虛擬機(jī)

1.2.3Java語言的平臺無關(guān)性

1.2.4Java平臺的分類

73.2.1if語句

格式:if(表達(dá)式)語句功能:首先要計算表達(dá)式,若值為真,則執(zhí)行語句,否則(值為假時)結(jié)束執(zhí)行if語句,執(zhí)行if語句的后續(xù)語句。

表達(dá)式語句truefalse8【例3-1】判斷兩個數(shù)的最大值。classMyMax{ publicdoublegetMax(doublea,doubleb){ doublemax; max=a;

if(max<b){ max=b; } returnmax; }}9【例3-1】判斷兩個數(shù)的最大值(續(xù))publicclassEx3_1{publicstaticvoidmain(String[]args){ MyMaxobj=newMyMax(); System.out.println("max="+obj.getMax(3.14,3.1415926));}}【模仿例3-1】判斷四個數(shù)的最大值。103.2.2

if-else語句格式:if(表達(dá)式)語句1else語句2功能:首先要計算表達(dá)式,若值為真,則執(zhí)行語句1,否則(值為假時)執(zhí)行語句2。

表達(dá)式語句1語句2truefalse11【例3-2】閏年問題。輸入一個年份,判斷概念是否為閏年?importjava.util.*;classLeap{ publicbooleanisLeap(intyear){

if((year%4==0)&&(year%100!=0)||(year%400==0)){ returntrue;表達(dá)式語句1語句2truefalse0 }

else{returnfalse; } }}12【例3-2】閏年問題。輸入一個年份,判斷概念是否為閏年?(續(xù))publicclassEx3_2{publicstaticvoidmain(String[]args){ intyear; System.out.println("輸入一個年份:");Scannerreader=newScanner(System.in); year=reader.nextInt(); Leapobj=newLeap();

if(obj.isLeap(year)){ System.out.println(year+"是閏年."); }

else{ System.out.println(year+"不是閏年."); }}}13【例3-4】設(shè)計一個四則運(yùn)算的計算器importjava.util.*;importjava.io.*;publicclassEx3_4{publicstaticvoidmain(String[]args)throwsIOException{(newCalculator()).calculate();}}classCalculator{ publicvoidcalculate()throwsIOException{doublea,b,c=0; charop;14【例3-4】設(shè)計一個四則運(yùn)算的計算器(續(xù)) System.out.println("輸入2個操作數(shù):"); Scannerreader=newScanner(System.in); a=reader.nextDouble(); b=reader.nextDouble(); System.out.println("輸入運(yùn)算符"); op=(char)System.in.read(); if(op=='+')c=a+b; if(op=='-')c=a-b; if(op=='*')c=a*b;if(op=='/')c=a/b; System.out.println(a+""+op+""+b+"="+c);

}}153.2.3switch語句

switch語句的格式:switch(表達(dá)式){case值1:語句1; [break;]case值2:語句2;[break;]……case值N:語句N;[break;][default:語句N+1;]}功能:執(zhí)行switch語句時,首先計算switch后表達(dá)式的值,然后在switch語句中尋找與該表達(dá)式的值相匹配的case值,如果找到,則執(zhí)行該case后的各語句,直至遇到一個break語句為止;如果找不到匹配的case值,則執(zhí)行switch的默認(rèn)語句(default),直到switch語句體結(jié)束。如果找不到匹配的case值且不存在默認(rèn)語句(default),則跳過switch語句體,什么也不做。

16switch表達(dá)式語句1語句2語句n語句…...值1值2值ndefaultcase17【例3-6】【例3-6】根據(jù)輸入的百分制成績(score),要求輸出成績等級(grade)A、B、C、D、E。90分以上為A,80~89分為B,70~79分為C,60~69分為D,60分以下為E。

importjava.util.*;publicclassEx3_6{publicstaticvoidmain(String[]args){ (newGrade()).toGrade();}}18【例3-6】(續(xù)1)classGrade{ publicvoidtoGrade(){ intscore,m; Scannerreader=newScanner(System.in); System.out.println("輸入成績:"); score=reader.nextInt(); if(score<0||score>100){ System.out.println("dataerror."); } else{

m=score/10; switch(m)

{

case9:

19【例3-6】(續(xù)2)

case10:System.out.println("ThegradeisA.");

break;

case8:System.out.println("ThegradeisB.");

break;

case7:System.out.println("ThegradeisC.");

break;

case6:System.out.println("ThegradeisD.");

break;

default:System.out.println("ThegradeisE.");

break;

}

}

}}【改寫】用switch語句設(shè)計一個四則運(yùn)算的計算器。203.3

循環(huán)語句

3.3.1while循環(huán)語句

3.3.2do-while循環(huán)語句

3.3.3for循環(huán)語句

213.3.1while循環(huán)語句

while語句的一般格式:[初始化]while(終止表達(dá)式){語句序列(循環(huán)體);[迭代]}功能:首先初始化,其次,計算終止表達(dá)式的值,如果其值為真(true),則執(zhí)行語句序列(循環(huán)體),再執(zhí)行迭代語句,然后計算終止表達(dá)式的值,并重復(fù)上述過程,直到終止表達(dá)式的值為“假”(值為false)時,退出循環(huán),執(zhí)行下一條語句。

終止循環(huán)體falsetrue初始化迭代22【例3-7】有一張足夠大的紙,厚0.01毫米,問將它對折多少次后可以達(dá)到珠穆拉瑪峰的高度(8844.43米)。classFoldCount{ publicintgetCount(doubleh){ intn=0; while(h<8844.43){

h=2*h; n++; } returnn; }}23【例3-7】(續(xù))publicclassEx3_7{publicstaticvoidmain(String[]args){ FoldCountobj; obj=newFoldCount(); System.out.println("count="+obj.getCount(0.01e-3));}}程序運(yùn)行結(jié)果:count=30243.3.2do-while循環(huán)語句

do-while語句的一般格式:[初始化]do{語句序列(循環(huán)體);[迭代]}while(終止表達(dá)式);功能:首先初始化,其次,執(zhí)行do后面循環(huán)體中的語句。再執(zhí)行迭代語句,然后,計算終止表達(dá)式的值。當(dāng)值為true時,轉(zhuǎn)去執(zhí)行do后面循環(huán)體中的語句;當(dāng)值為false時,退出do-while循環(huán),執(zhí)行下一條語句。

初始化迭代終止falsetrue循環(huán)體25【例3-9】循環(huán)接受并輸出從鍵盤輸入的字符,直到輸入的字符為回車為止。importjava.io.*;classCharIO{publicvoidaceptChar()throwsIOException{ charch; System.out.print("請輸入字符(按Enter鍵結(jié)束):");

do{ ch=(char)System.in.read();//接收鍵盤輸入 System.out.print(ch+"");

}while(ch!='\n');}}26【例3-9】(續(xù))publicclassEx3_9{publicstaticvoidmain(String[]args)throwsIOException{ (newCharIO()).aceptChar();}}特點(diǎn):先執(zhí)行循環(huán)體,后判斷終止表達(dá)式。循環(huán)體至少被執(zhí)行一次。273.3.3for循環(huán)語句格式:for(初始化;終止表達(dá)式;迭代){循環(huán)體;}功能:執(zhí)行過程如下:1)執(zhí)行初始化。2)計算“終止表達(dá)式2”,若其值為true,則轉(zhuǎn)步驟(3);若其值為false,則轉(zhuǎn)步驟(5)。3)執(zhí)行一次循環(huán)體。4)執(zhí)行迭代語句,然后轉(zhuǎn)向步驟2。5)結(jié)束循環(huán),執(zhí)行for循環(huán)之后的語句。終止循環(huán)體false初始化迭代true28【例3-11】求1+2+3+…+100的和。classSum{ publicintsum1ton(intn){ intsum=0; for(inti=1;i<=n;i++){ sum+=i; } returnsum; }}publicclassEx3_11{publicstaticvoidmain(String[]args){ System.out.println("sum="+(newSum().sum1ton(100)));}}29累加型問題的一般編程方法【累加型】類型諸如□+□+□+□+……+□+□求其前n項之和的編程題。累加型算法:若設(shè)i為循環(huán)變量,s為前n項累加之和,則程序的基本結(jié)構(gòu)為:

s=0;for(i=1;i<=n;i++)s=s+□;【模仿例3-11】編程求1+3+5+7+……+95+97+99的和?!纠?-12】編程求1-1/2+1/3-1/4+1/5-…+1/99-1/10030【例3-13】編程求階乘n!classFactorial{ publiclonggetFac(intn){ longfac; fac=1; for(inti=1;i<=n;i++){ fac=fac*i; } returnfac; }}publicclassEx3_13{publicstaticvoidmain(String[]args){System.out.println("fac="+(newFactorial().getFac(10)));}}31階乘型問題的一般編程方法【階乘型】類型諸如□×□×□×□×……×□×□求其前n項之積的編程題。階乘型算法若設(shè)i為循環(huán)變量,fac為前n項相乘之積,則程序的基本結(jié)構(gòu)為:

fac=1;for(i=1;i<=n;i++)fac=fac*□;【模仿例3-13】編程求1×3×5×7×9×11×13×…前n項之積。323.4

跳轉(zhuǎn)語句

3.4.1

break語句

3.4.2

continue語句

3.4.2

return語句333.4.1break語句

break有兩種形式:不帶標(biāo)號的break和帶標(biāo)號的break。不帶標(biāo)號break的格式:break;功能:⑴跳出switch語句;⑵跳出當(dāng)前一層循環(huán)。說明:⑴break只能終止并跳出最近一層的結(jié)構(gòu)。⑵break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。34【例3-16】韓信點(diǎn)兵又稱為中國剩余定理,相傳漢高祖劉邦問大將軍韓信統(tǒng)御兵士多少,韓信答說,每3人一列余1人,5人一列余2人,7人一列余4人,13人一列余6人。劉邦茫然不知其數(shù)。請問韓信至少有多少名士兵?

classHanXin{publicintgetNum(){intn=1;while(true){ if(n%3==1&&n%5==2&&n%7==4&&n%13==6)

break; n++;}returnn;}}35【例3-16】(續(xù))publicclassEx3_16{publicstaticvoidmain(String[]args){ System.out.println((newHanXin()).getNum());}}程序運(yùn)行結(jié)果:48736帶標(biāo)號break語句的格式: 標(biāo)號://標(biāo)號應(yīng)在break前面 …… break標(biāo)號;功能:直接跳出由標(biāo)號所指定的循環(huán)語句、開關(guān)語句或塊語句,使程序繼續(xù)執(zhí)行后面的語句。37【例3-17】用break終止外層塊語句

classBreakClass{ publicvoidbreakMethod(){ booleant=true;

first:{//定義塊first

second:{//定義塊second

third:{

//定義塊third System.out.println("在break之前。"); if(t)breaksecond;//break終止second塊 System.out.println("本語句將不被執(zhí)行。");

} System.out.println("本語句將不被執(zhí)行。");

}

System.out.println("在second塊后的語句。");

} }}38【例3-17】用break終止外層塊語句(續(xù))publicclassEx3_17{publicstaticvoidmain(String[]args){ (newBreakClass()).breakMethod();}}程序運(yùn)行結(jié)果:在break之前。在second塊后的語句。393.4.2continue語句

continue有兩種形式:不帶標(biāo)號的continue和帶標(biāo)號的continue。格式:continue;功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,重新開始下一輪循環(huán)。從循環(huán)體第一個語句開始執(zhí)行。說明:只有用在循環(huán)結(jié)構(gòu)中?!纠?-18】求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值。40importjava.util.*;classPositive{ publicfloatgetPosAve(){ inti,num=0,a;//i循環(huán)控制變量,num計數(shù)器,a輸入數(shù)floatsum=0; Scannerreader=newScanner(System.in); System.out.print("輸入整數(shù):");for(i=0;i<10;i++)

{ a=reader.nextInt();

if(a<=0)continue; num++; sum+=a;

} returnsum/num; }}41publicclassEx3_18{publicstaticvoidmain(String[]args){ System.out.println((newPositive()).getPosAve());}}程序運(yùn)行結(jié)果:輸入整數(shù):234-7-235-1145-910.0423.4.3return語句

格式:return[表達(dá)式];功能:從當(dāng)前方法中推出,返回到調(diào)用的語句處,可以帶參數(shù)返回。說明:如果指定的返回類型是void,那么方法中的return語句不應(yīng)該帶表達(dá)式;如果指定的返回類型是非void,那么方法中的return語句必須帶表達(dá)式。一個方法中可以包含多個return語句,程序一旦執(zhí)行到return語句就從方法中返回。一般情況下,出現(xiàn)在方法體末尾不帶表達(dá)式的return語句可以被省略。433.5常用的程序設(shè)計方法

3.5.1枚舉法(窮舉法)

3.5.2

遞推法3.5.3

遞歸法3.5.4簡單圖形的輸出

3.5.5簡單游戲的設(shè)計

443.5.1枚舉法(窮舉法)

枚舉法:把所有可能的情況一一測試,篩選出符合條件的各種結(jié)果進(jìn)行輸出?!纠?-20】百元買百雞:用一百元錢買一百只雞。已知公雞5元/只,母雞3元/只,小雞1元/3只。classHundredYunChicken{ publicvoidprintChicken(){ intx,y,z;45

for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)

{if(x+y+z==100&&5*x+3*y+z/3.0==100)System.out.println("公雞="+x+",母雞="+y+",小雞="+z);

} }}publicclassEx3_20{publicstaticvoidmain(String[]args){ (newHundredYunChicken()).printChicken();}}46為了減少循環(huán)次數(shù),可將三個for語句改寫為:for(x=0;x<=20;x++)for(y=0;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3.0==100) System.out.println("公雞="+x+",母雞="+y+",小雞="+z);}程序運(yùn)行結(jié)果:公雞=0,母雞=25,小雞=75公雞=4,母雞=18,小雞=78公雞=8,母雞=11,小雞=81公雞=12,母雞=4,小雞=84473.5.2遞推法

遞推是一個序列U1,U2,U3,…,Un,后面的每一項都能按公式由前面的一項或連續(xù)的幾項推算出來。遞推初值、遞推公式和遞推終止條件是遞推法的三要素。【例3-22】斐波納契數(shù)列。斐波納契數(shù)列是這樣一個數(shù)列:前兩個數(shù)都是1,第三個數(shù)是前兩個數(shù)之和,以后的每個數(shù)都是其前兩個數(shù)之和。求斐波那契數(shù)列前n項的和。48【例3-22】斐波納契數(shù)列

classFibonacci{ publicintgetSum(intn){ intsum=2,f1=1,f2=1,f;

for(inti=3;i<=n;i++) {

f=f1+f2; sum=sum+f; f1=f2; f2=f; } returnsum; }}49【例3-22】斐波納契數(shù)列

(續(xù))publicclassEx3_22{publicstaticvoidmain(String[]args){ Fibonaccio=newFibonacci(); System.out.println("sum="+o.getSum(20));}}本題的三要素是:遞推初值:f1=1,f2=1遞推公式:f=f1+f2終止條件:共計算n-2次503.5.3遞歸法

在一個方法有調(diào)用該方法自身的情況時,稱為方法的遞歸調(diào)用。大多數(shù)情況是直接遞歸,即一個方法直接自己調(diào)自己。當(dāng)一個實(shí)際問題可用遞歸形式描述時,該問題的求解用遞歸方法變得容易。例如,求n!、求前n個自然數(shù)的和、求第n個Fibonacci數(shù)等。【例3-25】用遞歸調(diào)用求第n個Fibonacci數(shù)的方法求前20個Fibonacci數(shù)。51classFibo{ publicvoidprintFibo(intn){ for(inti=1;i<=n;i++){ System.out.print(f(i)+""); if(i%10==0)System.out.println(); } } longf(longn){

if(n==1||n==2)return1;

elsereturnf(n-1)+f(n-2); }}52publicclassEx3_25{publicstaticvoidmain(String[]args){ newFibo().printFibo(20);}}對求第n個Fibonacci數(shù)列的遞歸方法來說,這兩個條件是:遞歸計算公式:fib(n)=fib(n-1)+fib(n-2)遞歸結(jié)束條件:n=1或n=2【模仿例3-25】用遞歸法求n的階乘。533.5.4簡單圖形的輸出

【例3-26】編程顯示以下圖形(共N行,N由鍵盤輸入)。*************************⑴設(shè)N=5第1行4個空格=5-11個“*”=2*行號-1第2行3個空格=5-23個“*”=2*行號-1第3行2個空格=5-35個“*”=2*行號-1第4行1個空格=5-47個“*”=2*行號-1第5行0個空格=5-59個“*”=2*行號-1由此歸納出:第i行的空格數(shù)N-i個;第i行的“*”數(shù)是2i-1個。54打印圖形的程序結(jié)構(gòu):for(i=1;i<=h;i++)/*重復(fù)打印h行*/{重復(fù)打印h-i個空格;重復(fù)打印2i-1個*;換行;}55importjava.util.*;classTriGraphic{ publicvoidprintTriGra(inth){ for(inti=1;i<=h;i++){ for(intj=1;j<=h-i;j++) System.out.print(""); for(intj=1;j<=2*i-1;j++) System.out.print("*"); System.out.println();//換行 } }}56publicclassEx3_26{publicstaticvoidmain(String[]args){ intn; Scannerreader=newScanner(System.in); System.out.print("輸入正整數(shù):"); n=reader.nextInt(); newTriGraphic().printTriGra(n);}}573.5.5簡單游戲的設(shè)計

【例3-28】設(shè)計一個猜數(shù)字游戲。游戲自動產(chǎn)生一個0至1000范圍內(nèi)的一個整數(shù),游戲玩家從鍵盤輸入數(shù)字去猜,如果猜對了,打印共猜了多少次數(shù);如果猜小了,給玩家提示猜小了,重新輸入數(shù)字;如果猜大了,同樣,給玩家提示猜大了,重新輸入數(shù)字。58importjava.util.*;classGuessGame{publicvoidplayGuessGame(){intgoalNum=(int)(Math.random()*1000);intcount=0;//計數(shù)器intguessNum;do{ guessNum=inputGuessNum(); count++; if(guessNum<goalNum){ System.out.println(“你猜小了,請重猜。} if(guessNum>goalNum){System.out.println("你猜大了,請重猜。")}while(guessNum!=goalNum);59System.out.println("恭喜你猜對了。共猜了"+count+"次。")

}intinputGuessNum(){ Scannerreader=newScanner(System.in); System.out.println("請輸入你所猜的數(shù)(0-1000):");intn=reader.nextInt(); while(n<0||n>=1000){ System.out.println("你所猜的數(shù)不在

溫馨提示

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

評論

0/150

提交評論