本周不辦理實作輔導 happy mother day!

Slides:



Advertisements
Similar presentations
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
Advertisements

第一單元 建立java 程式.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
TQC+ 物件導向程式認證-JAVA.
程設一.
第二章 JAVA语言基础.
第三章 控制结构.
程設一.
程式設計實作.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
臺北市立大學 資訊科學系(含碩士班) 賴阿福
控制流程 邏輯判斷 迴圈控制.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
程式撰寫流程.
臺北市立大學 資訊科學系(含碩士班) 賴阿福
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
實作輔導 4 日期: 4/21(星期六) 13:10~16:00、13:10~16:00
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java 程式設計 講師:FrankLin.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
陣列(Array).
Week 2: 程式設計概念與 演算法的效能評估
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
JAVA 程式設計 資訊管理系 - 網路組.
挑戰C++程式語言 ──第8章 進一步談字元與字串
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Java 程式設計 講師:FrankLin.
實作輔導 本周5/5(六)安排實作輔導 二時段: 周六 11:00~12:30 周六13:30~15:30.
第二章 Java语法基础.
陣列與結構.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
if (j…) printf ("… prime\n"); else printf ("… not prime\n");
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
迴圈(重複性結構) for while do while.
JAVA 程式設計與資料結構 第三章 物件的設計.
Programming & Language Telling the computer what to do
迴圈(重複性結構) for while do while.
C#快速導讀 流程控制.
判斷(選擇性敘述) if if else else if 條件運算子.
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

本周不辦理實作輔導 happy mother day!

Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; } int p=0, i=1, n=9; while (i<=n) { p=p*i; i=i+2; } System.out.println(“p=“+p+”n=“+n);

Q2: 追蹤程式: 印出結果? 搶答 for(p=100;p>50;p--) i++; for(;q<p;q++) s++; int p=0, i=1, q=9, s=0; for(p=100;p>50;p--) i++; for(;q<p;q++) s++; s=p+q; System.out.println(“s=“+s);

再談字元金字塔: nested loop 應用

主題:字元金字塔 – 正金字塔 問題分析: 7個空白,印1個* 6個空白,印3個* 5個空白,印5個* 4個空白,印7個* 3個空白,印9個* 2個空白,印11個* 1個空白,印13個* +2 執行結果 +2 7個空白 +2 6個空白 +2 +2 +2

主題:字元金字塔 – 正金字塔 利用迴圈印出 「 * 」,逐行增 加印出個數,直到印出7層金 字塔。 本題承接上次巢狀(nested)迴圈 的概念外,尚還利用到2個迴 圈概念 由於金字塔每行更為增加2顆 「 * 」,還有每行開頭空白數減 少1的問題。因此在迴圈外都 要考慮兩個更改的問題。 執行結果

主題:字元金字塔 – 正金字塔 執行結果 7個空白 6個空白

字元金字塔 – 正金字塔II :減少變數使用 (找出空白、*個數與i層關係) public class Charstar4_1b { public static void main(String[] args) { int level =7; for (int i = 0; i < level; i++) { for (int j = 0; j <= 7-i-1; j++) System.out.print(" "); for (int k = 0; k <= 2*i; k++) System.out.print("*"); System.out.println(""); }

主題:字元金字塔 – 正金字塔 II(找出空白、*個數與i層關係) i=? j=0~7-i-1 k=0~2*i 問題分析: 7個空白,印1個* : i=0 j=0~7-0-1 k=0~2*0 6個空白,印3個* : i=1 j=0~7-1-1 k=0~2*1 5個空白,印5個* : i=2 j=0~7-2-1 k=0~2*2 4個空白,印7個* : i=3 j=0~7-3-1 k=0~2*3 3個空白,印9個* : i=4 j=0~7-4-1 k=0~2*4 2個空白,印11個* : i=5 j=0~7-5-1 k=0~2*5 1個空白,印13個* : i=6 j=0~7-6-1 k=0~2*6 +2 執行結果 +2 7個空白 +2 6個空白 +2 +2 +2

主題:字元金字塔 III– 使用者自訂”字元”及”層數”金字塔 執行結果

第12周習題: * # ** ## *** ### **** 主題:輸入n層(n須為奇數)及”字元” , 印出n層三角形 (如下) 使用者自訂”字元”及”層數” 須能重複執行,直至輸入0層 繳交”設計歷程”檔及.java 輸入n層: 7 輸入字元: * 輸入n層: 5 輸入字元: # * ** *** **** # ## ###

第12周習題: * # ** ## *** ### **** 主題:輸入n層(n須為奇數)及”字元” , 印出n層三角形 (如下) 使用者自訂”字元”及”層數” 須能重複執行,直至輸入0層 繳交”設計歷程”檔及.java 輸入n層: 7 輸入字元: * 輸入n層: 5 輸入字元: # * ** *** **** # ## ###

臺北市立大學 資訊科學系(含碩士班) 賴阿福 陣列(array)基本概念 臺北市立大學 資訊科學系(含碩士班) 賴阿福

利用大量變數,處理大量資料? 有何缺點及問題??

例子:輸入100筆整數資料,要求出平均數,如何做?若找最大值、要求變異數,如何做? 討論: (1)需100行讀取資料之敘述 (2)須很長的累加運算敘述,需很長運算 式解平均數,需100行找最大值、處理變 異數之敘述。 (3)極為暴力方式(brute force) (4)沒有彈性,例如要處理1000筆?Big Data? 問題剖析:資料記錄存放問題! 不可以只用大量變數而已。 input.nextInt(x1); input.nextInt(x2); … input.nextInt(x100); avg=(x1+x2+…+x100)/100; Var= (x1-avg)* (x1-avg); Var=(x2-avg) (x2-avg); Var=(x100-avg) (x100-avg); //最後變異數結果敘述

體驗處理10筆資料 如果輸入100筆整數資 料? code長度? 彈性?效率? 如何改善? if (max<x2) max=x2; else max=max; if (max<x2) max=x2; else max=max; max= (max<x2) ? x2:max;

輸入10筆整數資料(改用迴圈,求出平均數及最大值(未用陣列) import java.util.Scanner; public class without_array { public static void main(String[] args) { Scanner input = new Scanner(System.in); int sc = 0, n=1, total=0, max=0; float mean; while (n<=10) { System.out.print("輸入第"+n+"筆分數:"); sc=input.nextInt(); total=total+sc; max=(max<sc)?sc:max; n++; } mean=total/10; System.out.println("最大值: "+max); System.out.println("平均數: "+mean); }//main }//class 輸入10筆整數資料,求出平均數及最大值! 若要再求變異數,如何做?(impossible) 之後再求min ,如何做?(impossible) 後續印出10筆整數資料,如何做?(String)

用字串存放輸入資料:字串連結 import java.util.Scanner; public class without_array2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int sc = 0, n=1, total=0, max=0; float mean; String data=""; while (n<=10) { System.out.print("輸入第"+n+"筆分數:"); sc=input.nextInt(); data=data+"第"+n+"筆分數:"+sc+"\n"; total=total+sc; max=(max<sc)?sc:max; n++; } mean=total/10; System.out.println("\n最大值: "+max); System.out.println("平均數: "+mean); System.out.println(data); }//main }//class

利用多個變數,處理資料(未使用陣列) 任何時候,若再多一筆資 料,需再增加程式碼,求 max、mean敘述都須修改 程式。 皆是序列(Sequence),無 法使用迴圈,缺乏自動化 機制。 屬於暴力法。 x1 x2 x3 . X9 x10 mean max

陣列(array):物以類聚 相同型態(ex. int, double…)的元素所形成有序的有限集合 陣列的元素被存放在連續的記憶體

陣列 以一名稱代表一序列資料的集合,陣列命名與變數命 名相同 以索引(index)/註標(subscript) 來控制某一元素存取 宣告 索引可用變數,因此可用迴圈控制變數,再控制陣列存取 索引由0開始。 宣告 Int [] x=new int[100]; //索引:0~99,長度: 100 陣列長度(陣列的屬性);x.length 可在宣告時給予初值(不用指定長度) int [] sc={20,30,40}; String [] diagres={"體重過輕Underweight","正常Normal","過重Overweight"}; x[0] x[1] x[2] . x[8] x[9] mean max

陣列的特性 定義:相同型態(ex. int, double…)的元素所形成有序的有 限集合 以索引值(index) 與 值(value) 來表示其對應關係。 通常陣列的元素被存放在連續的記憶體上,可以支援直 接存取。 陣列元素存取時,將元素的索引/註標(Index/Subscript) 以位址函數(Address Function)計算出(對應)記憶體位址, 再存取記憶體中的內容(元素的值)。 以索引存取陣列元素之值(value) i=8; x[i]=100; 存: x[8]=100; //將100存入x[8] 取: System.out.print (x[8]); //取x[8] y=x[8]+x[9]; //取x[8]、x[9] x[7]=x[8]+x[9]; x[0] x[1] x[2] . x[8] x[9] mean max

陣列存取 SC[0] SC[1] SC[6] SC[7] SC[8] SC[9] 8 30 12 取出 存入 SC[1]=30; x 12 x=SC[8]; 結果 SC[1] 30 12

陣列存取 SC[6] … 30 取出、運算、再存入 SC[6]=SC[6]+20; 結果 SC[6] … 50

陣列應用:處理10筆資料

應用陣列存放10筆資料,then處理 未提供輸入資料 public class Tendata_array0{ public static void main(String[] args){ int [] x={70,90,55,66,12,27,34,47,80,100}; int mean=0,max=0,i=0, sum=0, flunk=0; for(i=0;i<x.length;i++) { System.out.println("x["+i+"] :"+x[i]); sum=sum+x[i]; max=(max<x[i])?x[i]:max; if (x[i]<60) flunk++;//不及格人數 } mean=sum/10;//平均數 System.out.println("陣列長度: "+x.length); System.out.println("mean = "+mean); System.out.println("max = "+max); System.out.println("不及格人數: "+flunk); }//main }//class x[0] x[1] x[2] . x[8] x[9] mean max 70 90 55 80 100 未提供輸入資料

import java.util.Scanner; public class Tendata_array1{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int [] x=new int[10]; int mean=0,max=0,i=0, sum=0, flunk=0; while (i<=9) { System.out.print("input data for x["+i+"] :"); x[i]=input.nextInt(); i++;} System.out.print("\n"); for(i=0;i<x.length;i++) { System.out.println("x["+i+"] :"+x[i]); sum=sum+x[i]; max=(max<x[i])?x[i]:max; if (x[i]<60) flunk++; } mean=sum/10; System.out.println("mean = "+mean); System.out.println("max = "+max); System.out.println("不及格人數: "+flunk); }//main }//class

宣告陣列 輸入10筆資料: i=0:第1筆放入x[0] i=1:第2筆放入x[1] i=9:第10筆放入x[9] 分析10筆資料: import java.util.Scanner; public class Tendata_array1{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int [] x=new int[10]; int mean=0,max=0,i=0, sum=0, flunk=0; while (i<=9) { System.out.print("input data for x["+i+"] :"); x[i]=input.nextInt(); i++;} System.out.print("\n"); for(i=0;i<x.length;i++) { System.out.println("x["+i+"] :"+x[i]); sum=sum+x[i]; max=(max<x[i])?x[i]:max; if (x[i]<60) flunk++; } mean=sum/10; System.out.println("mean = "+mean); System.out.println("max = "+max); System.out.println("不及格人數: "+flunk); }//main }//class 宣告陣列 輸入10筆資料: i=0:第1筆放入x[0] i=1:第2筆放入x[1] i=9:第10筆放入x[9] 分析10筆資料: 印出10筆資料 加總 找最大值 算出不及格人數

運用陣列存放BMI狀態 運用陣列存放weekname

運用陣列存放BMI狀態 diagres [0] diagres [1] diagres [2] 體重過輕Underweight import java.util.Scanner; public class BMI_array { public static void main(String[] args) { String ok="Y"; System.out.println("==========歡迎量測體位=========="); Scanner input = new Scanner(System.in); double height, weight; String [] diagres={"體重過輕Underweight","正常Normal","過重Overweight"}; int status; while (ok.toUpperCase().equals("Y")) { System.out.print("輸入身高:"); height = input.nextDouble(); System.out.print("輸入體重:"); weight = input.nextDouble(); double bmi = Math.round((weight/(height*height) )*100)/100.0; if (bmi < 18.5) status = 0; else if (bmi < 24) status = 1; //(bmi>=18.5 && bmi < 24) else status = 2; System.out.println("BMI:"+bmi+",狀態: "+diagres[status]); System.out.print("(繼續(Y/N):"); ok= input.next().toUpperCase(); }//while System.out.println("==========bye bye=========="); }//main }//class 運用陣列存放BMI狀態 String [] diagres={"體重過輕Underweight","正常Normal","過重Overweight"}; int status; if (bmi < 18.5) status = 0; else if (bmi < 24) status = 1; //(bmi>=18.5 && bmi < 24) else status = 2; System.out.println("BMI:"+bmi+",狀態: "+diagres[status]); 體重過輕Underweight 正常Normal 過重Overweight diagres [0] diagres [1] diagres [2] RAM

運用陣列存放 weekname,看步 道好處? Sunday Monday Tuesday weekname[0] weekname[1] weekname[2] weekname[6]

import java.util.Scanner; public class weekname_3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); String [] weekname= {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; int week = 0; while (week>=0) { System.out.print("輸入星期幾?"); week = input.nextInt(); if (week >= 0 && week <=7) { System.out.println(weekname[week]); } //if else System.out.println("無法判讀\n"); }//while }//main }//class

平行陣列(Parallel Arrays)

陣列應用:求等第

陣列應用:求等第i import java.util.Scanner; public class scorerank_array { public static void main(String[] args) { Scanner input = new Scanner(System.in); int score = 0; String [] rank= {"壬","辛","庚","己","戊","丁","丙","乙","甲","優","優"}; while (score>=0) { System.out.print("輸入分數(整數, -1:end):"); score = input.nextInt(); //100~90優 89~80甲 79~70乙 69~60丙 59~50丁 49~40戊 39~30己 29~20庚 19~10辛 9~0壬 if (score >= 0) System.out.println("等第:"+rank[score/10]); else System.out.println("無法判讀, bye!\n"); }//while }//main }//class

陣列應用:求等第(1) Score = 0  0/10 == 0 Score = 9  9 / 10 = 0 Rank[0] 1 2 3 4 5 6 7 8 9 10 壬 辛 庚 己 戊 丁 丙 乙 甲 優 Score = 0  0/10 == 0 Score = 9  9 / 10 = 0 Score = 15  15 / 10 = 1 Score = 89  89 / 10 = 8 Score = 95  95 / 10 = 9 Score = 100  100 / 10 = 10 …… *透過Score/10取得對應等第陣列索引,及Score/10計算結果為整數,作為索引(index) *以空間換取時間,if 之selection 分支結構幾乎可忽略

陣列應用:求等第ii import java.util.Scanner; public class scorerank_array_2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int score = 0; String [] rank= {"優","優","甲","乙","丙","丁","戊","己","庚","辛","壬"}; while (score>=0) { System.out.print("輸入分數(整數, -1:end):"); score = input.nextInt(); //100~90優 89~80甲 79~70乙 69~60丙 59~50丁 49~40戊 39~30己 29~20庚 19~10辛 9~0壬 if (score<=100 && score >= 0) System.out.println("等第:"+rank[10-(int)Math.floor(score/10)]); else if (score>100) System.out.println("無法判讀!\n"); else System.out.println("bye!\n"); }//while }//main }//class

陣列應用:求等第(2) Score = 100  10 - (100/10) == 0 1 2 3 4 5 6 7 8 9 10 優 甲 乙 丙 丁 戊 己 庚 辛 壬 Score = 100  10 - (100/10) == 0 Score = 95  10 – (int)Math.floor(95 / 10) = 1 Score = 89  10 - Math. floor(89 / 10) = 2 Score = 9  10 - Math. floor(9 / 10) = 10 Score = 0  10 - Math. floor(0/10) = 10 …… *不同運算式,產生不同索引值,因此等第在陣列排列不同 *(int)Math.floor(95 / 10) Math.floor(95 / 10) : double type (int): type casting, convert double to int

第周習題 (任選一題,亦可全做):將陣列加入第四周程式 習題A:輸入個人淨所得,求其應繳稅額 (陣列存放”稅率”) 說明: (1)先上網搜尋個人淨所得之稅率資訊(須呈現於設計歷程檔 中); (2)請繳交.java及設計歷程檔(.DOCX)。 習題B:輸入個人生日,求其星座及個性(陣列存放”星座資訊”) 說明: (1)先上網搜尋12星座資訊(須呈現於設計歷程檔中); (2)例如: 假設處女座日期:8月23日~9月22日 輸入生日月份:9 輸入生日日期:1 結果:你的生日是9月1日,屬於處女座,個性:為人仔細,作 事認真,對於是非善惡,判斷分明。 習題C:將BMI診斷分成六層次(陣列存放”六診斷層次”)

例子:輸入100筆整數資料,要求出平均數,如何做?若要求變異數,如何做? (c) scanf(“%d\n”, &x1); scanf(“%d”, &x2); … scanf(“%d”, &x100); avg=(x1+x2+…+x100)/100; Var+=(x1-avg)^2; Var+=(x2-avg)^2; Var+=(x100-avg)^2; //最後變異數結果敘 述 int x[100], i, avg=0; for(i=0;i<100;i++) scanf(“%d”, x[i]); avg=avg+x[i]; avg=avg/100;

Review switch case

改為5等第

改變運算式 (score-50)/10

質數: 不用boolean時 int prime; import java.util.Scanner; public class prime_0 { static Scanner input = new Scanner(System.in); public static void main(String[] args) { System.out.println("====輸入>=2整數,判斷是否為質數?====="); int n=3, i; String dif; //boolean prime; int prime; System.out.print("輸入>=2整數:"); n = input.nextInt(); i=2; //prime=true; prime=0; while (i<=n-1) { if (n%i==0) {prime=1; //prime=false; System.out.println(n+"可被"+i+"整除。"); break;} else System.out.println(n+"不可被"+i+"整除。"); ++i; } if (prime==0) dif="是質數!"; else dif="不是質數!"; System.out.println(n+dif); }//main }//class 質數: 不用boolean時

Debug :輸入奇數n,求S=1+3+5+.........+n 處理輸入錯誤 import java.util.Scanner; public class loop_debug_1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n=7,i=0, s=0; System.out.println("輸入奇數n,求S=1+3+5+.........+n\n"); while (n>=1) { System.out.print("輸入奇數(-1:end):"); n = input.nextInt(); if (n%2==0) { System.out.println("輸入錯誤,須為奇數!"); continue;} for(i=1;i<=n;++i) s=s+i; System.out.println("1+3+5+...+"+n+"="+s); }//while }//main }//class 處理輸入錯誤