1 / 27

陣列

7. 陣列. 向量 (vector) 就是典型的一維陣列,而更高維的矩陣,例如矩陣 (matrix) 和張量 (tensor) 則分別是二維和三維的陣列。. 陣列. 7.1  一維陣列 7.2  將陣列當成函數的參數 7.3  二維陣列 7.4  將二維陣列當成函數的參數. 一維陣列. double Temperature [600]; int Record [52]; char Name [15]; 我們常把陣列長度以整數常數 (const int) 的型式另外宣告: const int RecordSize = 600;

quanda
Télécharger la présentation

陣列

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. 7 陣列 向量 (vector) 就是典型的一維陣列,而更高維的矩陣,例如矩陣 (matrix) 和張量 (tensor) 則分別是二維和三維的陣列。

  2. 陣列 • 7.1 一維陣列 • 7.2 將陣列當成函數的參數 • 7.3 二維陣列 • 7.4 將二維陣列當成函數的參數

  3. 一維陣列 double Temperature [600]; int Record [52]; char Name [15]; • 我們常把陣列長度以整數常數 (const int) 的型式另外宣告: const int RecordSize = 600; double Temp [RecordSize]; • 注意上述陣列長度必需為const int,不能是int,因為陣列長度在編譯時必需確定。

  4. 一維陣列: 宣告的時候可以同時完成初始化的動作 double Temp[5] = {48.4, 39.8, 40.5, 42.6, 41.2}; int Scope[] = {82, 78, 62, 69}; char Name[] = {'L','u','l','u'};

  5. 一維陣列各元素在記憶體內的配置情況 const int Size = 5; double Pressure[Size]; P[0] = 3.2; P[3] = P[0]*2.0;

  6. 陣列元件的下標表示法配合 for 迴圈 const int Size = 5; double Average, Sum = 0; for (int i = 0; i < Size; i++) Sum += P[i]; Average = Sum / double(Size);

  7. 陣列元件的下標表示法配合 for 迴圈計算其最大的元素值 double Max; Max = P[0]; for (int i = 1; i < Size; i++ ) if (Max < P[i]) Max = P[i];

  8. 將陣列當成函數的參數 cout << Average(P, Size) << endl; cout << MaxElem(P, Size) << endl; • 其中Size為先前宣告過的const int,代表陣列的長度。 • 函數的原型則寫成: double Average(double [], int); double MaxElem(double [], int); • 相當於是傳位址 (pass by address,或稱為call by address,「以位址呼叫」的意思),而不是傳值 (pass by value),在函數中對陣列的任何更動都直接作用在原陣列上。

  9. 範例程式 ArrayFnc.cpp 使用陣列名稱當成函數參數來傳遞

  10. 操作結果

  11. Fibonacci 數列 • 它所產生的是以下的固定數列: 1 1 2 3 5 8 13 21 .................

  12. 使用 static局 部變數的特性來避免重複計算相同的陣列元素 範例程式 Fibo.cpp : 產生Fibonacci 數列

  13. 程式 Fibo.cpp 操作結果

  14. 二維陣列 • 亦稱為矩陣 (matrix) 或是表 (table)。例如 • 在C++ 中宣告成: double M[2][3]; • 如果加上初始化數據,則可以寫做: double M[2][3] = { {1.8, 4.9, 6.8},{6.2, 2.1, 3.4}}; double M[2][3] = { 1.8, 4.9, 6.8,6.2, 2.1, 3.4}; double M[][3] = { 1.8, 4.9, 6.8, 6.2, 2.1, 3.4};

  15. 二維陣列各元素在記憶體內的配置情況 • 在電腦內部這些資料是以「列」的次序儲存:

  16. 偏移量 • 對於一個m×n大小的矩陣M而言,M[i][j] 所在的位址相當於從 M[0][0] 算起,偏移量 (offset) 為 (i × n + j ) 個單位 的地方。

  17. 使用迴圈計算二維陣列平均值 const int Row = 2; const int Col = 3; double A[Row][Col]; • 給定初始值後,可以使用下列迴圈計算其平均值: double Sum = 0, Average; for (int i = 0; i < Row; i++) for (int j = 0; j < Col; j++) Sum += A[i][j]; Average = Sum / double(Row*Col);

  18. 矩陣元素的兩個下標與迥圈的關係 • 外圍迴圈是以逐列 (row) 的次序運作,而內圈以逐行 (column) 的次序演算。

  19. 將二維陣列當成函數的參數 • 例如,函數的原型 (prototype) 是 double MatrixAvg(double [ ][Col]); 或是 double MatrixAvg(double A[ ][Col]); 而函數的呼叫則使用下列敘述: cout << MatrixAvg(A);

  20. 範例程式 Array2Fnc.cpp

  21. 操作結果

  22. 三維陣列(tensor) • 對於一個m×n×p大小的張量T而言,元素T[i][j][k]所在的位址相當於從T[0][0][0]算起,偏移量 (offset) 為 (i × n × p + j × p + k ) 個單位的地方。

More Related