分支 (selection,branch)概念再複習
分支 (selection,branch)概念:搶答(1) if (邏輯/關係運算式) { s1; S2; } s3; 邏輯/關係運算式 邏輯/關係運算式 邏輯/關係運算式 false false false true true true s3 S1; S1; S2; S1; S2; A S2; s3 s3 3 1 2 (邏輯/關係運算式) ==(條件式) A的正確流程圖? 1、2、3
分支 (selection,branch)概念:搶答(3) if (邏輯/關係運算式) { s1; S2; } else s3; 邏輯/關係運算式 邏輯/關係運算式 邏輯/關係運算式 false false false true true true s3 S1; S1; S2; S1; S2; S2; s3 s3 C 3 1 2 C的正確流程圖? 1、2、3 (邏輯/關係運算式) ==(條件式)
分支 (selection,branch)概念:搶答(2) 邏輯/關係運算式 邏輯/關係運算式 邏輯/關係運算式 false false false if (邏輯/關係運算式) s1; s2; s3; true true true s3 S1; S1; S2; S1; S2; B S2; s3 s3 3 1 2 B的正確流程圖? 1、2、3 (邏輯/關係運算式) ==(條件式)
分支 (selection,branch)概念複習(1) if (邏輯/關係運算式) { s1; S2; } s3; 邏輯/關係運算式 邏輯/關係運算式 邏輯/關係運算式 false false false true true true s3 S1; S1; S2; S1; S2; A if (邏輯/關係運算式) s1; s2; s3; S2; s3 s3 3 1 2 A的正確流程圖? 1~3 B的正確流程圖? 1~3 (邏輯/關係運算式) ==(條件式) B
分支 (selection,branch)概念複習(1) 邏輯/關係運算式 S1; S2; s3 true false if (邏輯/關係運算式) { s1; S2; } else s3;
(selection,branch)概念複習(2) if (邏輯/關係運算式) { s1; S2; } s3; if (邏輯/關係運算式) { s1; S2; } else { s3; S4; S5; if (邏輯/關係運算式) { s1; S2; } else if (邏輯/關係運算式) s3; s4; else { s5; S6; S7; if (邏輯/關係運算式) { if (邏輯/關係運算式) { s1; s2; } else s3; else if (邏輯/關係運算式) s4; s5; S6; 2分支 Multiple-way if: 3分支 nested if: 2層巢狀
分支 (selection,branch)概念複習(3) if (邏輯/關係運算式) { s1; S2; } s3; if (邏輯/關係運算式) s1; S2; s3; if (邏輯/關係運算式) { s1; S2; } else { s3; S4; S5; if (邏輯/關係運算式) s1; else s3; S4; S5; 複合敘述Compound statement 單一敘述Single statement 不用{ }
判斷閏年(leap year)、平年(common year)
閏年、平年 格里高利曆(Calendarium Gregorianum)閏年規則如下: 每逢閏年,2月分有29日,平年的2月分為28日 閏年:閏年是比普通年分多出一段時間的年分,目的是為了彌補人為 規定的紀年與地球公轉產生的差異 格里高利曆(Calendarium Gregorianum)閏年規則如下: 4的倍數是可能的。 100的倍數是不可能的。 400的倍數是可能的。 每逢閏年,2月分有29日,平年的2月分為28日 公元前之閏年出現在1, 5, 9, 13, ... BC,須將年份值減1再 以「除以4」計算。(因為沒有公元0年這一年,所以公 元前1, 2, 3, 4, ... 年應該是公元0, -1, -2, -3, ... 年,而公元 前1, 5, 9, 13, ... 年為公元0, -4, -8, -12, ... 年,為4的倍數) https://zh.wikipedia.org/wiki/%E9%97%B0%E5%B9%B4
判斷閏年(leap year)、平年(common year)流程圖 條件式調整順序,是否正確? 多重Multi-way if Not year被400整除 yes Not year被100整除 印“閏年” yes Not year被4整除 印“平年” yes 印“平年” 印“閏年”
巢狀分支Nested if year被400整除 yes Not 印“閏年” Year不被100整除 印“平年” year被4整除
year被400整除 印“閏年” Year不可被100整除 且可被4整除 印“平年” No Yes ※ 二分支都可得閏年:或(or) (year被400整除 )或 (Year不可被100整除 且可被4整除) 印“閏年” 印“平年” No Yes
閏年規則轉成條件 閏年規則如下: if ((year%4==0 && year%100!=0)|| year%400==0) { 是4的倍數 不是100的倍數 是400的倍數 if ((year%4==0 && year%100!=0)|| year%400==0) { status = "閏年(leap year)!"; } else status = "平年(common year)!";
迴圈加入判斷leap year(閏年)
臺北市立大學 資訊科學系(含碩士班) 賴阿福 讓程式繞圈圈 :談迴圈(loop) 臺北市立大學 資訊科學系(含碩士班) 賴阿福
迴圈(loop) 讓猜數字重複執行 猜到對為止 繼續猜 但何時結束? 結束條件 重複計算BMI 重複判斷leap year(閏年)
迴圈(loop)概念 條件 S1; 重複不斷執行,直到條件不符合為止。 常見型態:for、while、do…while True False 重複不斷執行,直到條件不符合為止。 常見型態:for、while、do…while 一開始條件須符合,才能進入迴圈內 部執行 無窮迴圈:條件永遠符合 有些環境必須是無窮迴圈: O.S(作業系統) *CPU特性:重複執行(耐性)
猜數字遊戲 讓猜數字重複執行 猜到對為止 繼續猜 但何時結束? 結束條件
產生亂數 繼續 玩/猜? 輸入數值 印“答錯了” 輸入值==亂數 False True 印“答對了” 下一個亂數值
讓猜數字重複執行
增加:猜次數 產生亂數 繼續 玩/猜? 次數+1 輸入數值 印“答錯了” 輸入值==亂數 False True 印“答對了” 下一個亂數值
增加:猜次數
結束(離開)程式: System.exit(-1); import java.security.SecureRandom; import java.util.Scanner; public class GuessN_3 { public static void main(String[] args) { SecureRandom sr = new SecureRandom(); Scanner input = new Scanner(System.in); int a = 0; int b = 100; a = sr.nextInt(100)+1; while (b>0) { System.out.print("猜數字(1~100):"); b = input.nextInt(); if (b<=0) { System.out.println("bye!!"); System.exit(-1); } if (a!= b) { //nested if if (a > b) System.out.println("猜的太小囉"); else System.out.println("猜的太大囉"); } //if else { System.out.println("恭喜猜對!\n"); }//while System.out.println("不會被顯示!!"); }//main }//class 結束(離開)程式: System.exit(-1);
迴圈加入計算BMI : debug until it can work.
Errors: 宣告問題
Errors: 重複宣告
迴圈加入計算BMI
迴圈加入判斷leap year(閏年)
習題 習題2:輸入民國幾年,判斷該年是閏年或平年 習題1:輸入矩形長、寬(整數)資料,求面積及邊長、判斷為正方形或長方形, 但須能重複執行,直到長或寬輸入為<=0 正方形或長方形條件? 如何解決? 請規畫其過程 (解法)且畫流程圖 (參考: 程式設計歷程 表.docx、程式設計歷程參考範本.docx) 習題2:輸入民國幾年,判斷該年是閏年或平年 須能重複執行,直到輸入年份為<=-100,結束(離開)程式: System.exit(-1); 判斷閏年或平年之邏輯式為何? 請規畫其過程 (解法)且畫 流程圖(參考: 程式設計歷程表.docx、程式設計歷程參考範 本.docx)
追蹤迴圈 條件 S1; S2; S3; True False 無窮迴圈 空迴圈 如何跳出迴圈
追蹤迴圈1
追蹤迴圈2
追蹤迴圈3
追蹤迴圈4 S1; 條件 False True S2; break S3;
亂數加法練習 (個位數) (1)出10題個位數加法測驗(一次一題),不管對錯都出下一題, 直到答對為止; (2)出10題,答錯不出下一題,直到答對為止; (3)出N題,由user決定題數,每題10分,答錯之題目須於結束 時顯示;
public class add_drill_2 { public static void main(String[] args) { SecureRandom sr = new SecureRandom(); Scanner input = new Scanner(System.in); int n1=0,n2= 0; int ans= 0, score=0, i=1; while (i<=10) { n1 = sr.nextInt(10); n2 = sr.nextInt(10); System.out.print(""+n1+"+"+n2+"=");//present question ans = input.nextInt(); if (ans== n1+n2) { score=score+10; System.out.println("答對,GREAT!!");} else System.out.println("答錯,加油! "); }//while }//main }//class What’s wrong?
public class add_drill_2 { public static void main(String[] args) { SecureRandom sr = new SecureRandom(); Scanner input = new Scanner(System.in); int n1=0,n2= 0; int ans= 0, score=0, i=1; while (i<=10) { //i=i+1; n1 = sr.nextInt(10); n2 = sr.nextInt(10); System.out.print(""+n1+"+"+n2+"=");//present question ans = input.nextInt(); if (ans== n1+n2) { score=score+10; System.out.println("答對,GREAT!! 分數:"+score+"分.");} else System.out.println("答錯,加油! 分數:"+score+"分."); i=i+1; }//while }//main }//class
輸入三變數內容,分別放入a, b, c,且將最大值放入a,最小值放入c
迴圈加入計算BMI
亂數加法練習 (個位數) 亂數加法練習 (個位數) : (1)出10題,答錯不出下一題,直到答 對為止; (2)出N題,由user決定題數,每題10分,答錯之題目須 於結束時顯示; 減法:不可小減大 除法:(1)只能整除;(2)需輸入商和餘數