Java面向對象程序設計(IDEA版) 課件 第3章結構化編程_第1頁
Java面向對象程序設計(IDEA版) 課件 第3章結構化編程_第2頁
Java面向對象程序設計(IDEA版) 課件 第3章結構化編程_第3頁
Java面向對象程序設計(IDEA版) 課件 第3章結構化編程_第4頁
Java面向對象程序設計(IDEA版) 課件 第3章結構化編程_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第3章結構化編程面向對象程序設計

1選擇結構23主要內容面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)switch語句與switch表達式案例學習:兩位數加減法45循環結構案例學習:求最大公約數6案例學習:打印輸出若干素數7編程方法3.1編程方法面向對象程序設計結構化編程(structuredprogramming)方法在1965年提出的,是軟件發展的一個重要的里程碑。在結構化編程中,只允許三種基本的程序結構,它們是順序結構、分支結構(包括多分支結構)和循環結構。僅由這三種基本結構組成的程序稱為結構化程序。3.1編程方法順序結構表示程序中的各操作是按照它們出現的先后順序執行的。如圖3-1所示,其中A、B可以是一個語句(甚至是空語句),也可以是這里介紹的7種結構中的一種結構。順序結構程序的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。簡單的選擇結構如圖3-2的(a)和(b)所示,這里P表示謂詞條件。它們通常稱為單選擇、雙選擇。圖3-2(c)一般稱為多選擇,它可以通過嵌套的(b)得到。選擇結構程序反復執行某個或某些操作,直到某條件為假(或為真)時才可終止循環。循環結構有三種,如圖3-3所示。這三種結構依次為WHILE循環、REPEAT循環和N+1/2循環。前兩種循環可以看作第三種循環的特殊情形。循環結構按照結構化程序設計的觀點,任何算法功能都可以通過由程序模塊組成的三種基本程序結構的組合來實現。采用結構化編程方法的軟件開發需要遵循的主要原則包括:

自頂向下。程序設計時,應先考慮總體,后考慮細節;先考慮全局目標,后考慮局部目標。

逐步求精。對復雜問題,通常應設計一些子目標作為過渡,然后逐步求精。

模塊化設計。一個復雜問題,是由若干簡單的問題構成。模塊化是把程序要解決的總目標分解為子目標

限制goto語句使用。循環結構選擇結構面向對象程序設計6.1.1單分支結構面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)if(條件){//語句組}<條件>是一個布爾表達式,布爾表達式應該使用圓括號括住,它的值為true或false。程序執行的流程是:首先計算條件表達式的值,若其值為true,則執行語句(組)語句序列,否則轉去執行if結構后面的語句.條件語句組truefalse程序要求用戶從鍵盤輸入兩個整數,分別存入變量a與b,如果a大于b,則交換a和b的值,也就是保證a小于或等于b,最后輸出a和b的值。單分支if語句Scannerinput=newScanner(System.in);System.out.print("請輸入整數a:");inta=input.nextInt();System.out.print("請輸入整數b:");intb=input.nextInt();if(a>b){intt=b;b=a;a=t;}程序3.1ExchangeDemo.javaSystem.out.println("a="+a);System.out.println("b="+b);在if語句中,如果花括號內只有一條語句,則可以省略化括號。if(num%5==0){System.out.println(num+"能被5整除。");}單分支if語句與下面代碼等價。if(num%5==0)System.out.println(num+"能被5整除。");6.1.1雙分支if-else語句面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)if(條件){//語句組1}else{//語句組2}雙分支if-else語句是最常用的選擇結構,它根據條件是真是假,決定執行的路徑。if-else結構的一般格式如下:判斷年份是否是閏年。符合下面兩個條件之一的年份即為閏年:(1)能被400整除;(2)能被4整除,但不能被100整除。if~else語句應用if(year%400==0||(year%4==0&&year%100!=0){//輸出是閏年}else{//輸出不是閏年}Scannerscan=newScanner(System.in);System.out.print("請輸入年份:");intyear=scan.nextInt();if(year%400==0||(year%4==0&&year%100!=0)){System.out.println(year+"年是閏年。");}else{System.out.println(year+"年不是閏年。");}

程序3-2LeapYear.java條件運算符(conditionaloperator)的格式如下:<條件表達式>?<表達式1>:<表達式2>因為有三個操作數,又稱為三元運算符。條件運算符<條件表達式>為關系或邏輯表達式,其計算結果為布爾值。如果該值為true,則計算<表達式1>的值,并將其結果作為條件表達式的結果;如果該值為false,則計算<表達式2>的值,并將其結果作為條件表達式的結果。條件運算符面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)條件運算符可實現if~else結構。若max,a,b是int型變量:max=(a>b)?a:b;if(a>b){max=a;}else{max=b;}6.1.1嵌套的if語句面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)if或if-else結構中語句可以是任意合法的Java語句,甚至可以是其他的if或if-else結構。內層的if結構稱為嵌套在外層的if結構中。例如,下面就是一個嵌套的if結構,其功能是求a、b和c中最大值并將其保存到max中。。6.1.1多分支的if-else結構面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)如果程序邏輯需要多個選擇,可以在if語句中使用一系列的elseif語句,這種結構稱為階梯式if-else結構。問題描述編寫程序,要求輸入一個人的身高和體重,計算并打印出他的BMI,同時顯示BMI是高還是低。對于一個成年人,BMI值的含義如下:BMI<18.5,表示偏瘦;18.5≤BMI<25.0,表示正常;25.0≤BMI<30.0,表示超重;BMI≥30.0,表示過胖。Scannerinput=newScanner(System.in);doubleweight,height;doublebmi;System.out.print("請輸入你的體重(單位:公斤):");weight=input.nextDouble();System.out.print("請輸入你的身高(單位:米):");height=input.nextDouble();bmi=weight/(height*height);程序3.2ComputeBMI.java

System.out.println("你的身體質量指數是:"+bmi);if(bmi<18.5){System.out.println("你的體重偏瘦。");}elseif(bmi<25.0){System.out.println("你的體重正常。");}elseif(bmi<30.0){System.out.println("你的體重超重。");}else{System.out.println("你的體重過胖。");}3.3案例學習:兩位數加減運算面向對象程序設計要求隨機生成兩個兩位數及加減號(如果是減法,要保證被減數大于減數),顯示題目讓學生輸入計算結果,程序判斷結果是否正確。兩位數加減運算

(1)隨機產生兩位整數。intnumber1=10+(int)(Math.random()*90);intnumber2=10+(int)(Math.random()*90);(2)確定加或減運算。這也可以通過產生2個隨機數確定(比如,0和1,0表示加法,1表示減法)。intoperator=(int)(Math.random()*2);(3)設學生沒有學過負數概念,如果做減法運算,要保證第一個數大于第二個數。也就是如果number1小于number2,應該交換這兩個數。if(number1<number2){inttemp=number2;number2=number1;number1=temp;}(4)比較用戶答案與正確結果。

Scannerinput=newScanner(System.in);intnumber1=10+(int)(Math.random()*90);intnumber2=10+(int)(Math.random()*90);intoperator=(int)(Math.random()*2);intresult,answer;if(operator==0){result=number1+number2;System.out.print(number1+"+"+number2+"=");}else{if(number1<number2){程序3.7Calculator.javainttemp=number2;number2=number1;number1=temp;}result=number1-number2;System.out.print(number1+"-"+number2+"=");}answer=input.nextInt();if(answer==result){System.out.print("恭喜你,回答正確!");}else{System.out.print("對不起,回答錯誤!");}3.4switch語句和switch表達式面向對象程序設計Java語言從一開始就提供了switch語句實現多分支結構。從Java12開始對switch語句進行了修改并支持switch表達式。盡管Java仍然支持舊的switch結構,但建議熟悉并使用新的switch語句和switch表達式。概述3.4.1switch語句switch語句格式:switch(表達式){

case

值1->

語句(組)1;

case值2->

語句(組)2;…

case值n->

語句(組)n;[default->語句(組)]}表達式值類型為byte,short,int,char,enum,String值為常量或常量表達式語句組,多個語句使用大括號結束switch結構所有情況都不匹配執行的語句組值后面是->,不是冒號:程序要求從鍵盤輸入一個季節數字(1,2,3,4),程序根據輸入的數輸出一句話。3.4.1switch語句可以在switch語句的表達式中使用String對象,本案例根據英文季節字符串名稱(Spring、Summer、Autumn和Winter)輸出中文季節名。3.4.1switch語句Scannerinput=newScanner(System.in);System.out.print("輸入一個季節(1,2,3,4):");intseason=input.nextInt();switch(season){case1->System.out.println("春雨驚春清谷天");case2->System.out.println("夏滿忙夏暑相連");case3->System.out.println("秋處露秋寒霜降");case4->System.out.println("冬雪雪冬小大寒");default->System.out.println("季節輸入非法.");}程序3.3SwitchDemo.java是Java12提供的新的表達式。格式如下:變量名=switch(表達式){

case

值1->

表達式1;

case值2->

表達式2;…

case值n->

表達式n;[default->表達式]};3.4.2switch表達式下面程序從鍵盤輸入一個年份(如2020年)和一個月份(如2月),用switch表達式返回該月的天數(29),將其存入一個變量。3.4.2switch表達式Scannerinput=newScanner(System.in);System.out.print("輸入一個年份:");intyear=input.nextInt();System.out.print("輸入一個月份:");intmonth=input.nextInt();intnumDays=switch(month){case1,3,5,7,8,10,12->31;case4,6,9,11->30;程序3.5SwitchExprDemo.java//對2月需要判斷是否是閏年case2->{ if(((year%4==0)&&!(year%100==0))||(year%400==0))

yield29;

else

yield28;}default->0;};System.out.println("該月的天數為:"+numDays);DayOfWeekday=DayOfWeek.SATURDAY;intnumLetters=switch(day){

caseMONDAY,FRIDAY,SUNDAY->6;caseTUESDAY->7;caseTHURSDAY,SATURDAY->8;caseWEDNESDAY->9;};System.out.println(numLetters);//輸出:8循環結構面向對象程序設計概述在程序設計中,有時需要反復執行一段相同的代碼,這時就需要使用循環結構來實現。Java語言提供了4種循環結構:while循環、do-while循環、for循環和增強的for循環。一般情況下,一個循環結構包含四部分內容:(1)初始化部分:設置循環開始時變量初值。(2)循環條件:一般是一個布爾表達式,當表達式值為true時執行循環體,為false時退出循環。(3)迭代部分:改變變量的狀態。(4)循環體部分:需要重復執行的代碼。while循環是Java最基本的循環結構,這種循環是在某個條件為true時,重復執行一個語句或語句塊。它的一般格式如下:while循環[初始化部分]while(條件){//循環體[迭代部分]}編寫一個正確的循環對編程初學者來說并不是件容易的事,編寫循環時應該考慮三個步驟:(1)確定需要重復的語句;(2)將這些語句放入一個循環體;(3)編寫循環繼續條件,并添加適合的語句控制循環。while循環下面一段代碼使用while結構計算1到100之和。intn=1;intsum=0;while(n<=100){sum=sum+n;

n=n+1;}案例學習:while循環隨機產生一個100~200之間的整數,用戶從鍵盤上輸入所猜的數,程序顯示是否猜中的消息,如果沒有猜中要求用戶繼續猜,直到猜中為止。intmagic=(int)(Math.random()*101)+100;Scannersc=newScanner(System.in);System.out.print("請輸入你猜的數:");intguess=sc.nextInt();while(guess!=magic){if(guess>magic)System.out.print("錯誤!太大,請重猜:");elseSystem.out.print("錯誤!太小,請重猜:");guess=sc.nextInt();}System.out.println("恭喜你,答對了!\n該數是:"+magic);程序3.8GuessNumber.javado-while循環的一般格式如下:do-while循環[初始化部分]do{//循環體[迭代部分]}while(條件);特點:循環體至少被執行一次。for循環是Java語言中使用最廣泛的,也是功能最強的循環結構。它的一般格式如下:for循環

for(初始化部分;條件;迭代部分){//循環體

}其中,初始化部分、循環條件和迭代部分用分號隔開。執行流程如圖所示。下面代碼使用for循環計算1到100之和。intsum=0;for(inti=1;i<=100;i++){sum=sum+i;}System.out.println("sum="+sum);//輸出:sum=5050for循環在初始化部分可以聲明多個變量,中間用逗號分隔,它們的作用域在循環體內。在迭代部分也可以有多個表達式,中間也用逗號分隔。下面循環中聲明了兩個變量i和j。for(inti=0,j=10;i<j;i++,j--){System.out.println("i="+i+",j="+j);}for循環for循環中的一部分或全部可為空,循環體也可為空,但分號不能省略,如:for(;;){//這實際是一個無限循環,循環體中應包含結束循環代碼}對于無限循環,在循環體中應該包含結束循環的代碼,否則可能產生死循環(deadloop)。可以使用break語句或帶標簽的break語句結束循環。同樣,對while和do-while循環,如果循環條件永遠為true,也會產生無限循環。for循環for循環和while循環及do~while循環有時可相互轉換,例如有下面的for循環:for(inti=0,j=10;i<j;i++,j--){System.out.println("i="+i+",j="+j);}可以轉換為下面等價的while循環結構。inti=0,j=10;while(i<j){System.out.println("i="+i+",j="+j);i++;j--;}for循環6.1.1增強的for循環面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)for(Typevar:collectionName){//循環體

}主要用于對數組和集合元素迭代。6.1.1循環的嵌套面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)在一個循環的循環體中可以嵌套另一個完整的循環,稱為循環的嵌套。while(條件){//外層循環體

do{//內層循環體}while(條件);//其他語句}for(初始化;條件;迭代){//外層循環體

for(初始化;條件;迭代){//內層循環體}//其他語句}【程序3.10】循環的嵌套的應用用嵌套的for循環打印輸出如下圖形。這里,第一行輸出一個星號,第二行輸出2個星號,…,第8行輸出8個星號。

for(intn=1;n<=8;n++){for(intk=0;k<=(8-n);k++){System.out.print(“”);//輸出前導空格}

for(intj=1;j<=n;j++){System.out.print(“*”);//輸出星號

}System.out.println();//換行

}在Java循環體中可以使用continue語句和break語句。break語句和continue語句break語句是用來跳出while、do、for或switch結構的執行,該語句有兩種格式:break;breaklabel;break語句的功能是結束本次循環,控制轉到其所在循環的后面執行。對各種循環均直接退出,不再計算循環控制表達式。下面程序演示了break語句的使用。intn=1;intsum=0;while(n<=100){sum=sum+n;if(sum>100){break;//若條件成立退出循環}n=n+2;}System.out.println("n="+n);System.out.println("sum="+sum);程序3.11BreakDemo.java使用break語句只能跳出當前的循環體。如果程序使用了多重循環,又需要從內層循環跳出或者從某個循環開始重新執行,此時可以使用帶標簽的break。考慮下面代碼:break語句start:for(inti=0;i<3;i++){for(intj=0;j<4;j++){if(j==2){breakstart;//跳出start標簽標識的循環}System.out.println(i+":"+j);}}這里,標簽start用來標識外層的for循環,因此語句breakstart;跳出了外層循環。上述代碼的運行結果如下:6.1.1continue語句面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)continue語句與break語句類似,但它只終止執行當前的迭代,導致控制權從下一次迭代開始。該語句有下面兩種格式:continue;continuelabel;

下面代碼演示了continue語句的使用。代碼會輸出0~9之間除了5以外的數字。for(inti=0;i<10;i++){if(i==5){continue;}System.out.print(i+"");//輸出:012346789}當i等于5時,if語句的表達式運算結果為true,使得continue語句得以執行。因此,后面的輸出語句不能執行,控制權從下一次循環處繼續,即i等于6的時候。continue語句continue語句也可以帶標簽,用來標識從那一層循環繼續執行。下面是使用帶標簽的continue語句的例子。continue語句start:for(inti=0;i<3;i++){for(intj=0;j<4;j++){if(j==2){continuestart;//返回到start標簽標識的循環的條件處}System.out.println(i+":"+j);}}帶標簽的continue語句案例:求最大公約數面向對象程序設計6.1.1問題描述面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)兩個正整數的最大公約數(GreatestCommonDivisor,GCD)是能夠同時被兩個數整除的最大整數。例如,4和2的最大公約數是2,16和24的最大公約數是8。一種方法是,假設求兩個整數m和n的最大公約數,顯然1是一個公約數,但它可能不是最大的。可以依次檢查k(k=2,3,4,…)是否是m和n的最大公約數,直到k大于m或n為止。Scannerinput=newScanner(System.in);System.out.print("請輸入第1個整數:");intm=input.nextInt();System.out.print("請輸入第2個整數:");intn=input.nextInt();//求m和n的最大公約數intgcd=1;intk=2;程序3.12GCDDemo.javawhile(k<=m&&k<=n){if(m%k==0&&n%k==0){gcd=k;}k++;}System.out.println(m+"與"+n+"的最大公約數是"+gcd);案例:打印輸出若干素數面向對象程序設計6.1.1問題描述面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)素數又稱質數,有無限個。素數定義為在大于1的正整數中,除了1和它本身以外不再有其他因數的數。比如,5、7、11、13等。判斷一個正整數number是否是素數,從2開始判斷number是否能被這個數整除,若能被它整除,則不是素數,一直到number-1為止,若都不能整除,則是素數。intcount=0;//記錄素數個數intnumber=2;booleanisPrime;System.out.printf("前50個素數如下:%n");while(count<50){isPrime=true;for(intdivisor=2;divisor<number;divisor++){if(number%divisor==0){isPrime=false;break;}}程序3.13PrimeNumber.javaif(isPrime){count++;if(count%10==0)System.out.printf("%5d%n",number);elseSystem.out.printf("%5d",number);}number++;}6.1.1課堂討論及訓練面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)下面的if語句在Java語言中是否合法?if(0<=n<=10){System.out.println("n的值介于0和10之間");}6.1.1面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)下面代碼的輸出結果是什么?解釋原因。intx=80000000;while(x>0)x++;System.out.println("xis"+x)

溫馨提示

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

評論

0/150

提交評論