Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
单元二:面向对象程序设计 任务二:借书卡程序设计.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
TQC+ 物件導向程式認證-JAVA.
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
程設一.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
程設一.
程式設計實作.
本周不辦理實作輔導 happy mother day!
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
控制流程 邏輯判斷 迴圈控制.
Class 2 流程控制-選擇敘述與迴圈.
物件導向程式設計 (Object-Oriented rogramming)
常用工具类.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第 7 章 陣列 (Array).
2018/11/27 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 一个编程实例
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
第三章 C# 基础知识.
Week 2: 程式設計概念與 演算法的效能評估
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Java 程式設計 講師:FrankLin.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Review 1~3.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
迴圈(重複性結構) for while do while.
C#快速導讀 流程控制.
判斷(選擇性敘述) if if else else if 條件運算子.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

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);

臺北市立大學 資訊科學系(含碩士班) 賴阿福 陣列(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); //最後變異數結果敘述

利用多個變數,處理資料(未使用陣列) 任何時候,若再多一筆資 料,需再增加程式碼,求 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 處理輸入錯誤