1 / 36

陣列 Array

陣列 Array. chapter 3. 陣列的觀念. 陣列是指一群變數之集合,具有 相同名稱 相同資料型態 若要存取陣列中的變數 , 我們只需要透過陣列的編號 ( 註標 、 索引 ) 來指定變數即可 陣列與變數的功能都是用來儲存資料 每一個變數只能儲存一項資料,而陣列可以同時連續儲放多項資料, 陣列一次可宣告很多個變數,而不用一個一個宣告 陣列可以少寫許多行程式,並且搭配迴圈可重複執行相同指令運算. 陣列的觀念. p3-2. 【 說明 】 A 陣列表示內共有 5 個陣列元素 ,也就是有 5 個變數 ,分別為 A[0] 、 A[1] 、 A[2]……A[4]

Download Presentation

陣列 Array

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 陣列Array chapter 3 德明科技大學資訊科技系

  2. 陣列的觀念 • 陣列是指一群變數之集合,具有 • 相同名稱 • 相同資料型態 • 若要存取陣列中的變數, 我們只需要透過陣列的編號(註標、索引)來指定變數即可 • 陣列與變數的功能都是用來儲存資料 • 每一個變數只能儲存一項資料,而陣列可以同時連續儲放多項資料, • 陣列一次可宣告很多個變數,而不用一個一個宣告 • 陣列可以少寫許多行程式,並且搭配迴圈可重複執行相同指令運算 德明科技大學資訊科技系

  3. 陣列的觀念 p3-2 • 【說明】 • A陣列表示內共有5個陣列元素,也就是有5個變數,分別為A[0]、A[1]、A[2]……A[4] • (2)每一個陣列元素可以存放一筆資料 • (3)陣列內容的存取,通常是以迴圈指令配合輸入或輸出指令來進行,如下片段程式 德明科技大學資訊科技系

  4. 陣列的宣告 p3-5 【語法】資料型態 陣列名稱[陣列大小];【說明】 (1)「陣列名稱」的命名規則和一般變數相同 (2)「陣列大小」必須是一數字 宣告一個A[3]的陣列: int A[3]; //宣告一維陣列A,共有A[0]、A[1]、A[2]三個元素此時,主記憶體就會即時配置3個位置 宣告三個變數(A,B,C)為整數型態 int A, B, C; 德明科技大學資訊科技系

  5. 使用陣列的優缺點 • 優點 • 利用索引值(Index)可以快速的存取資料 • 搭配迴圈一次可以處理大批的資料 • 較容易表達資料處理的技巧 • 缺點 • 資料新增刪除比較麻煩 • 記憶體配置在宣告陣列時就固定,缺乏彈性 • 欲避免陣列的缺點,一般使用動態記憶體配置,即指標的方式建置陣列 • 運作較為複雜,在鏈結串列時介紹 德明科技大學資訊科技系

  6. 陣列儲存方式 p3-7 【舉例】宣告一個A[3]的陣列,並分別儲存10, 20, 30 int A[3]; A[0]=10; //指把10指定給A陣列中的第0項的資料中 A[1]=20; A[2]=30; 【變化】陣列比變數有彈性,使用時索引可以是各種變化 如果變數 x=1,則A[x] = 20; 也可以用 A[x*2]=30; 如果B[0]=1,則A[B[0]]=20; 德明科技大學資訊科技系

  7. 【舉例】 請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 p3-7 未使用for迴圈演算法 德明科技大學資訊科技系

  8. 【舉例】 請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 int A[6]; p3-8 使用for迴圈演算法 德明科技大學資訊科技系

  9. 使用陣列的注意事項 p3-9 • 不能夠一次讀取或指定整個陣列的資料 • 寫一個程式,利用A陣列來存放數字10 直覺想法:以下的方法是錯誤 int A[10]; A=10; 不能直接指定給陣列名稱 德明科技大學資訊科技系

  10. 使用陣列的注意事項 • 用來指定某一項資料的索引不能超過陣列的註標範圍 例如:int A[50]; // 宣告一個陣列A其索引是從0~49 A[-1]=100; //索引是 –1,超出陣列A的範圍 A[50]=100; //索引是 50,超出陣列A的範圍 德明科技大學資訊科技系

  11. 陣列的初值設定 p3-10 在宣告陣列的同時並指定初值,其方法只要等號(=)在後面接著大括號,將初值寫在括號內,初值間以逗號隔開即可。 【語法】資料型別 陣列名稱[ ] ={陣列初值串列}; 德明科技大學資訊科技系

  12. 二維陣列的觀念 p3-11 【語法】資料型態 陣列名稱[M][N]; 【說明】M代表列數,N代表行數 【例如】int Score[4][5]; //列索引表示範圍: 0~3 共有4列 //行索引表示範圍: 0~4 共有5行 德明科技大學資訊科技系

  13. 多維陣列的觀念 p3-14 【語法】資料型態 陣列名稱[L][M][N]; 【說明】L代表二維陣列個數: M代表列數, N代表行數 【例如】int Score[3][4][5]; //二維陣列的個數: 0~2 共有3個二維陣列 //列索引表示範圍: 0~3 共有4列 //行索引表示範圍: 0~4 共有5行 【說明】此例子中Score陣列共有三個索引,故Score陣列是一個三維陣列。宣告Score是由3個(0~2)二維陣列,每個二維陣列包含4列(0~3),5行(0~4)組合而成的整數三維陣列。並且共計有3×4×5=60元素。 德明科技大學資訊科技系

  14. 德明科技大學資訊科技系

  15. 19 115 5 21 28 陣列在記憶體中的表示法 • 陣列 • 相同資料型態在記憶體內連續的空間 • 每個元素其實有自己的位址 • 宣告: int list[5]; 如果每個元素大小為 d 個bytes list[0] list[0] 的位址是 X list[1] list[1] 的位址是 X + 1 × d list[2] list[2] 的位址是 X + 2 × d : list[3] list[4] list[k] 的位址是 X + k × d 德明科技大學資訊科技系

  16. 一維陣列在記憶體中的表示法 p3-17 若陣列A有N個元素,其陣列的起始位址為Lo,並且索引值從0開始,d 為元素大小,則A[i]的起始位置為多少? 以C語言宣告方式:int A[N]; 令:Lo為起始位址 d為元素大小 則A[i]之位置計算 = Lo + i * d 德明科技大學資訊科技系

  17. 一維陣列在記憶體中的表示法 若陣列A的索引從L到U,其陣列的起始位址為Lo,d為元素大小,則A[i]的起始位置為多少? 宣告方式:A[L…U] 令:Lo為起始位址 d為元素大小 則A[i]之位置計算= Lo + (i-L) * d 德明科技大學資訊科技系

  18. 【舉例】假設每一個整數佔用2個byte,若A陣列的起始位址是100開始,則A[5]的起始位址為多少?【舉例】假設每一個整數佔用2個byte,若A陣列的起始位址是100開始,則A[5]的起始位址為多少? 令:Lo=100 d=2 則A[5]=100+5*2=100+10=110 【舉例】假設每一個整數佔用2個byte,若A[10]起始位址是200開始,則A[20]的位址為多少? 令:Lo=200 d=2 則A[20]=200+(20-10)*2=200+10*2=220 德明科技大學資訊科技系

  19. 有一整數陣列int A[60]; 則此陣列共佔多少位元組(設sizeof(int)=2)?若A[0]在記憶體中的位址為03C416,則元素A[20] 的位址為何?A陣列共佔 60 × 2 = 120 (bytes) A[20] 的位址 = A[0] 的位址 + 位移量= 03C416 + (20 – 0 ) × 2= 03C416 + 2816= 03EC16 A[39] 的位址 = A[0] 的位址 + 位移量= 03C416+ (39 – 0 ) × 2= 03C416+ 4E16= 041216 A[0] A[1] 位移量 A[2] ﹋ ﹋ ﹋ ﹋ A[20] ﹋ ﹋ ﹋ ﹋ A[59] 德明科技大學資訊科技系

  20. 練習 • 題目 • int A[1000],每個整數以2 bytes儲存資料。假設A[0]的地址是100116,請問A[i]的地址是? • float A[1000] ,每個實數以4 bytes儲存資料。假設A[100]的地址是101116,請問A[900]的地址是? • 在一維陣列的題目中,計算參數有 • 每個元素大小, ex: 2 or 4 • 起點位址, ex: A[0] • 目標元素, ex: A[i] or A[900] 德明科技大學資訊科技系

  21. 二維陣列在記憶體中的表示法 p3-19 宣告方式:A[0…M-1, 0…N-1] M代表列數(Row): 橫向;N代表行數(Column): 縱向,共M*N格 舉例:圖的儲存位置:A[1,4] △圖的儲存位置:A[2,1] 圖的儲存位置:A[M-1,N-2] • 將二維陣列儲存的邏輯位置轉換成實際在主記憶體的存儲方式 • 以列為主 • 以行為主 德明科技大學資訊科技系

  22. 以列為主 Row Major p3-20 • 以列為主的二維陣列要轉為一維陣列 • 將二維陣列「由上往下」一列一列讀入一維陣列 德明科技大學資訊科技系

  23. 以列為主 Row Major 令Lo為起始位址 d為元素大小 則A[i,j]的位置=Lo+[i*N+j]*d 德明科技大學資訊科技系

  24. 以行為主 Column Major p3-23 • 以行為主的二維陣列要轉為一維陣列 • 將二維陣列「由左往右」一行一行讀入一維陣列 德明科技大學資訊科技系

  25. 以行為主 Column Major 令Lo為起始位址 d為元素大小 則A[i,j]的位置=Lo+[j*M+i]*d 德明科技大學資訊科技系

  26. 二維陣列的四個題型 • p3-26 以下 德明科技大學資訊科技系

  27. 陣列的應用 • 需要多個相同型態的資料變數時,就是使用陣列的時機 • 多項式表示與計算 • 矩陣運算 • 矩陣表示 v • 矩陣轉置 v • 矩陣加法、減法、乘法 v • 稀疏矩陣 • 特殊矩陣(上三角、對角矩陣) 德明科技大學資訊科技系

  28. 矩陣 p3-34 • 數學上一個m x n的矩陣,包含m個列與n個行,正好由m x n的二維陣列所表示 • int A[2][3]; //可代表 2x3的矩陣 • 直接以兩層迴圈處理 • 數學上的矩陣有非常多的用途 • 在程式設計上大部分都以陣列為資料結構 德明科技大學資訊科技系

  29. 矩陣轉置 p3-35 • 一個矩陣Am × n,則矩陣B是A的轉置矩陣 • B矩陣的第i列第j行的元素等於A矩陣的第j列第i行的元素 • Bij=Aji 德明科技大學資訊科技系

  30. 矩陣轉置 演算法 德明科技大學資訊科技系

  31. 矩陣加法 p3-38 • 假設A,B都是(m × n)矩陣,則A與B可以相加並得到一個C矩陣(m × n • 在C矩陣上的第i列第j行的元素必定等於A矩陣的第i列第j行的元素加上B矩陣的第i列第j行的元素 • Cij= Aij+Bij 德明科技大學資訊科技系

  32. 矩陣加法 例如 演算法 德明科技大學資訊科技系

  33. 矩陣乘法 p3-42 • 假設A為(m × n)矩陣,而B為(n × p)矩陣,則A與B相乘得到C矩陣(m × p) • 在C矩陣上的第i列第j行的元素必定等於A矩陣的第i列乘上B矩陣的第j行 • 兩個向量的內積 德明科技大學資訊科技系

  34. 德明科技大學資訊科技系

  35. 德明科技大學資訊科技系

  36. 矩陣乘法 演算法 德明科技大學資訊科技系

More Related