Microsoft PowerPoint - CH07 Arrays and Vectors [相容模式]

Similar documents
Microsoft PowerPoint - C_Structure.ppt

Ch7_小組研討問題

Microsoft PowerPoint - Class5.pptx

CHAPTER VC#

Excel VBA Excel Visual Basic for Application

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

Microsoft PowerPoint - 13_指標、資料傳遞2.pptx

第3章.doc

新版 明解C++入門編

untitled

資料結構之C語言重點複習

Microsoft PowerPoint - Class2.pptx

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Microsoft PowerPoint - CH02 Introduction to C++ Programming_輸入與輸出 [相容模式]

untitled

C/C++语言 - C/C++数据

Microsoft Word - ACL chapter02-5ed.docx

CC213

C 語言—陣列及字串

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

untitled

FY.DOC

C 1

Microsoft PowerPoint - string_kruse [兼容模式]

!249 第 八講 進階指標 講師 : 李根逸 (Ken-Yi Lee),

C/C++ - 字符输入输出和字符确认

105A 資管一程式設計實驗 06 函式定義謝明哲老師 2 程式設計實驗 6.3: 自行定義一個可以接受兩個整數並傳回其最大公因數的函式, 接著利用該函式自 行定義一個可以接受兩個整數並傳回其最小公倍數函式 // gcd_fcn.cpp int gcd(int m,

Microsoft Word - administrative-law-08.doc

C/C++ - 文件IO

台北好客講堂

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

具 备 充 分 的 战 力 总 之, 在 这 样 的 状 态 下, 库 帕 细 胞 也 没 有 办 法 完 全 杀 死 病 毒 于 是 便 对 在 脾 脏 的 巨 噬 细 胞 下 达 召 集 令, 总 动 员 要 打 败 敌 人, 结 果 形 成 脾 脏 肿 胀 当 脾 脏 也 无 法 防 止 时,

Scott Effective C++ C++ C++ Roger Orr OR/2 ISO C++ Effective Modern C++ C++ C++ Scoot 42 Bart Vandewoestyne C++ C++ Scott Effective Modern C++ Damien

ebook39-5

Microsoft PowerPoint - 04-array_pointer.ppt


C C

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204]

C/C++基礎程式設計班

jQuery實戰手冊

Microsoft PowerPoint - Bronson-v3-ch07.ppt [相容模式]

新・解きながら学ぶJava

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Microsoft PowerPoint - chap10.ppt

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

untitled

C/C++语言 - 运算符、表达式和语句

3.1 num = 3 ch = 'C' 2

Microsoft PowerPoint - 08_陣列與函式.pptx

untitled

Microsoft PowerPoint - VB14.ppt

Microsoft Word - ch04三校.doc

CC213

山东建筑大学学分制管理规定(试行)

第一章

<4D F736F F D20CCABB1A3CAD9A3A A3A BAC5B8BDBCFE3836CAC0BCCDD0D0C8CBC9EDD2E2CDE2C9CBBAA6B1A3CFD5A3A843BFEEA3A9CCF5BFEE2E646F63>

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

C/C++程序设计 - 字符串与格式化输入/输出

< F20B4F2D3A1D7F7D2B5>

腊八粥的来历 南宋陆游诗云 今朝佛粥更相馈 反觉江村节 物新 说的就是腊八粥 可见 腊八节 吃 腊八 粥 的风俗 由来已久 每逢腊八这一天 不论是朝 廷 官府 寺院还是黎民百姓家都要做腊八粥 这一 天 人们还要祭祀祖先 众神并庆祝丰收 后来 逐 渐演变成吃腊八粥祝来年五谷丰登 对于腊八粥的来历说法也

IO

PowerPoint 簡報

ex

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

C/C++ Programming

untitled

ACI pdf

C/C++ - 函数

C++11概要 ライブラリ編

牧 者 心 聲 要 因 心 懷 平 而 作 惡 要 謹 慎 言 行 免 得 舌 頭 犯 罪 ; 惡 人 時 候 要 用 嚼 環 勒 住 口 ( 詩 三 十 九 1) 今 天 社 會 和 教 會 裏 極 其 渴 望 人 能 以 具 體 行 動 勉 勵 走 善 良 正 直 路 作 好 榜 樣 ; 可 惜

01

The golden pins of the PCI card can be oxidized after months or years

Microsoft Word - ch doc

Microsoft Word - 第3章.doc

本章內容 2-1 陣列及陣列位址的計算一維陣列位址計算多維陣列位址計算 2-2 一維陣列的基本運算讀取 寫入 複製 輸出 插入資料 刪除 2-3 二維陣列及矩陣的儲存與運算矩陣輸出 矩陣轉置 矩陣相加 矩陣相乘 2-4 字串 ( 字元陣列 ) 計算字串長度 字串複製 字串比較 子字串擷取 2

jQuery實戰手冊

投影片 1

epub 33-8

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

Transcription:

CH7 陣列與向量 Array and Vectors 課程名稱 : 資管一程式設計任課教師 : 謝明哲單位職稱 : 台東大學資管系副教授電子郵件 :hmz@nttu.edu.tw hmz@nttu.edu.tw 2016 1

Outline 什麼是陣列? 陣列的運用 排序方式 多維陣列 hmz@nttu.edu.tw 2016 2

什麼是陣列? hmz@nttu.edu.tw 2016 3

陣列 (array) 是一群具有相同型態的元素集合起來的特殊型態, 每一個元素都有一個索引值 (index) 作為存取的依據 宣告時, 在陣列名稱後加上中括號 [ ], 中括號內可以寫上此陣列的大小 宣告方式 : 資料型別陣列名稱 [ 長度 ]; 或資料型別陣列名稱 [ 長度 ]={ 初始值 0, 初始值 1,, 初始值 n-1}; 可略 hmz@nttu.edu.tw 2016 4

ex. int a[10]; // 宣告陣列 a 為 10 個整數空間 float f[20]; // 宣告陣列 f 為 20 個浮點數空間 char str[40]; // 宣告陣列 str 為 40 個字元空間 注意 : 因為陣列是連續的儲存單元, 所以每個單元都是相同的型態!! hmz@nttu.edu.tw 2016 5

陣列的運用 hmz@nttu.edu.tw 2016 6

字元陣列的宣告及應用 : 輸入 6 個字元, 以相反順序列印出來 char str[6]; cout<< input 6 characters string: ; for(int i=0;i<6;i++) cin>>str[i]; cout<<endl; for(int i=5;i>=0;i--) cout<<str[i]; hmz@nttu.edu.tw 2016 7

整數陣列的宣告初值設定及使用 : 求出 5 人中的最高與最低成績 int score[5] = {87,88,91,76,99}; int max,min; max=min=score[0]; for(int i=1;i<5;i++){ if (score[i]>max) max=score[i]; if (score[i]<min) min=score[i]; } hmz@nttu.edu.tw 2016 8

模擬丟骰子 6000 次並統計各點出現次數 int freq[7]={0}; for(int i=0;i<6000;i++) { int die = rand( )%6+1; freq[die]++; } for (int i=1;i<=6;i++) cout<<i<< : <<freq[i]<<endl; [0] [1] [2] [3] [4] [5] [6] 如果擲出骰子的骰子數為 1, 則 freq[1]+1 其它可依此類推 hmz@nttu.edu.tw 2016 9

排序方式 hmz@nttu.edu.tw 2016 10

兩種常用的排序演算法 : 1. 選擇排序 Selection sort 2. 泡沫排序 Bubble sort hmz@nttu.edu.tw 2016 11

Selection sort 步驟 1: 一開始整個數列歸類為未排序 步驟 2: 從未排序的數列中, 挑選出最小的數, 並與第一個元素的位置互換, 並將此最小的數, 歸類為已排序數列 步驟 3: 重複步驟 2, 直到所有的數都歸到已排列數列中 hmz@nttu.edu.tw 2016 12

N = 5 Run 1: 19 7 35 40 19 7 13 0 1 2 3 4 hmz@nttu.edu.tw 2016 13

Run 2: 7 35 40 19 13 Run 3: 7 13 40 35 19 Run 4: 7 13 19 40 35 7 13 19 35 40 hmz@nttu.edu.tw 2016 14

for (int i=0; i<n; i++) { for (int j=i+1; j<n; j++) if (A[i]>A[j]) swap(a[i], A[j]); } hmz@nttu.edu.tw 2016 15

Bubble sort 步驟 1: 一開始整個數列歸類為未排序 步驟 2: 從未排序的數列中的第一個數開始看, 如果前面的數比後面的數, 就往後推 在這過程中, 最大的數會被推到未排列數列中的最後一個位置, 將該最大的數歸類到已排序的數列中 步驟 3: 重複步驟 2, 直到沒有往後推的動作為止 hmz@nttu.edu.tw 2016 16

N = 5 Run 1: 7 39 39 6 92 6 92 hmz@nttu.edu.tw 2016 17

Run 2: 7 3 6 2 9 Run 3: 3 6 2 7 9 Run 4: 3 2 6 7 9 2 3 6 7 9 hmz@nttu.edu.tw 2016 18

void bubblesort (int x[ ], int n) { for (int i=0;i<n-1;i++) for (int j=0;j<n-1-i;j++) if (x[j+1] < x[j]) swap(x[j], x[j+1]); } hmz@nttu.edu.tw 2016 19

多維陣列 hmz@nttu.edu.tw 2016 20

語法 : 型別陣列名 [n][m]; 或型別陣列名 [n][m]={{ },{ },,{ }}; 範例 : // 宣告一個 2x4 整數二維陣列 int a[2][4]; // 宣告一個 2x4 整數二維陣列, 並設定初始值 int a[2][4] = { {0,1,2,3}, {4,5,6,7} }; hmz@nttu.edu.tw 2016 21

0 1 2 3 a[2][4] = a[0][0] a[0][1] a[0][2] a[0][3] 4 5 6 7 a[1][0] a[1][1] a[1][2] a[1][3] hmz@nttu.edu.tw 2016 22

轉換矩陣 void transporse(int A[][2], int n) { for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) swap(a[i][j], A[j][i]) } void main() { int x[][2] = { {1, 2}, {3, 4}}; transpose(x, 2); } 1 2 3 3 4 2 hmz@nttu.edu.tw 2016 23

使用指標傳遞矩陣 ( 傳址呼叫法 ) void transporse(int *ptra, int n) { for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) swap(*(ptra+i*n+j), *(ptra+j*n+i)); } void main() { int X[][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11} }; int *ptrx = &X[0][0]; transpose(prtx, 3); } 記憶體位址 X[][3] 內容 prta+0 0 ptra+1 1 ptra+2 2 ptra+3 3 ptra+4 4 ptra+5 5 ptra+6 6 ptra+7 7 ptra+8 8 ptra+9 9 ptra+10 10 ptra+11 11 hmz@nttu.edu.tw 2016 24

標準樣版函式庫 STL Standard Template Library hmz@nttu.edu.tw 2016 25

STL vector 物件 (template 類別 ) #include <vector> using std::vector; 使用 vector 類別宣告一維陣列 (vector 物件 ) vector<int> x(5); // 5 個整數未設定初始值 vector<int> y(8,0); // 8 個整數初始值為 0 vector<int> z(y); // 以 y 初始 z,z 為 y 的複製 hmz@nttu.edu.tw 2016 26

vector 物件的運算 設定 x = y; 相等 if (x==y) cout<< x ==y ; 長度 for(int i=0;i<x.size( );i++) cin>>x[i]; 加入元素 x.push_back(0); // 在 x 末尾添加元素 0 hmz@nttu.edu.tw 2016 27

讀取末尾元素 cout<<x.back(); // 列印 x 末尾元素 讀取指定元素 cout<<x.at(0); // 列印 x 第 0 個元素 cout<<x[0]; // 列印 x 第 0 個元素 刪除末尾元素 x.pop_back(); // 刪除 x 末尾元素 清除所有元素 x.clear(); // 將 x 清空 hmz@nttu.edu.tw 2016 28

bubblesort() 的 vector 版 void bubblesort (vector<int>& x) { for (int i=0; i<n-1; i++) for (int j=0; j<x.size()-1-i; j++) if (x[j+1]<x[j]) swap(x[j], x[j+1]); } hmz@nttu.edu.tw 2016 29

STL 的 sort() 排序演算法 #include <algorithm> 宣告 Vector 物件 vector<grade> grade; 自行定義 < 的 operator 函式給 sort() 函式使用 bool operator<(const Grade &x, const Grade &y) { if (x.average < y.average) return true; else return false; } 使用 sort() 函式由小到大進行排序 sort(&grade[0], &grade[n]); //N=grade.size() hmz@nttu.edu.tw 2016 30

STL map 物件 (template 類別 ) #include <map> using std::map; 使用 map 類別宣告 < 座號, 姓名 > 映射物件 map<int, string> student; 加入 < 座號, 姓名 > 映射值 1. student.insert(pair<int, string>(1, 李誠 )); 2. student.insert( map<int, string>::value_type (1, 李誠 )); 3. student[1] = 李誠 ; hmz@nttu.edu.tw 2016 31

取得 map 的大小 cout<<student.size(); 由 key 尋找映射值 map<int, string>::iterator iter; iter = student.find(1); if (iter!= student.end()) cout << iter->first <<, << iter->second; else cout<< not find ; 刪除映射值 student.erase(iter); 清除所有映射值 student.clear(); hmz@nttu.edu.tw 2016 32

STL set 物件 (template 類別 ) #include <set> using std::set; 使用 set 類別宣告集合物件 set<int> s; 加入集合元素, 不可重複 for (int i=0;i<n;i++) s.insert(i); 列印所有集合元素 set<int>::iterator iter; for (iter=s.begin();iter!=s.end();iter++) cout<<*iter<<" "; hmz@nttu.edu.tw 2016 33

加入集合元素, 但不可重複 s.insert(3); 尋找集合元素 3 iter=s.find(3); if (iter!=s.end()) cout<<*iter; 刪除集合元素 3 s.erase(3); 判斷是否為空集合 if (s.empty()) cout<< 空集合 ; hmz@nttu.edu.tw 2016 34

樂活時間 為何哈佛飲食金字塔建議每天適量食用 健康油脂, 避免 不健康油脂? 為何哈佛飲食金字塔建議少吃紅肉 & 奶油? hmz@nttu.edu.tw 2016 35

不健康油脂, 包括存在於紅肉中的飽和脂肪酸和人造奶油 烘焙食品及油炸食品中的反式不飽和脂肪酸, 會增加 LDL 及三酸甘油酯 健康油脂, 主要是單元不飽和脂肪酸和多元不飽和脂肪酸 (polyunsaturated fat) 多存在於植物油與魚類中 ), 包括橄欖油 麻油 葵花籽油 葡萄籽油 油菜籽油 玉米油 大豆油 花生油及其他良好植物油, 可以提高 HDL, 保護肝臟及心血管功能的正常 hmz@nttu.edu.tw 2016 36

習題 hmz@nttu.edu.tw 2016 37

Ch7. Exercises 7.8 (6%) 7.9 (14%) 7.11(6%) 7.13(8%) 7.14(8%) 7.16(6%) 7.17(6%) 7.18(6%) 7.21 (6%) 7.31 (6%) 7.35 (6%) 7.36 (6%) 7.37 (6%) hmz@nttu.edu.tw 2016 38