Download
1 / 27

陣列 - PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on

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;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 陣列 ' - quanda


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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;

    double Temp [RecordSize];

  • 注意上述陣列長度必需為const int,不能是int,因為陣列長度在編譯時必需確定。


一維陣列: 宣告的時候可以同時完成初始化的動作

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'};


一維陣列各元素在記憶體內的配置情況

const int Size = 5;

double Pressure[Size];

P[0] = 3.2;

P[3] = P[0]*2.0;


陣列元件的下標表示法配合 for 迴圈

const int Size = 5;

double Average, Sum = 0;

for (int i = 0; i < Size; i++)

Sum += P[i];

Average = Sum / double(Size);


陣列元件的下標表示法配合 for 迴圈計算其最大的元素值

double Max;

Max = P[0];

for (int i = 1; i < Size; i++ )

if (Max < P[i]) Max = P[i];


將陣列當成函數的參數

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),在函數中對陣列的任何更動都直接作用在原陣列上。


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



Fibonacci
Fibonacci 數列

  • 它所產生的是以下的固定數列:

    1 1 2 3 5 8 13 21 .................


Fibo cpp fibonacci

使用 static局 部變數的特性來避免重複計算相同的陣列元素

範例程式 Fibo.cpp : 產生Fibonacci 數列


Fibo cpp
程式 Fibo.cpp 操作結果


二維陣列

  • 亦稱為矩陣 (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};


二維陣列各元素在記憶體內的配置情況

  • 在電腦內部這些資料是以「列」的次序儲存:


偏移量

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

    (i × n + j ) 個單位

    的地方。


使用迴圈計算二維陣列平均值

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


矩陣元素的兩個下標與迥圈的關係

  • 外圍迴圈是以逐列 (row) 的次序運作,而內圈以逐行 (column) 的次序演算。


將二維陣列當成函數的參數

  • 例如,函數的原型 (prototype) 是

    double MatrixAvg(double [ ][Col]);

    或是

    double MatrixAvg(double A[ ][Col]);

    而函數的呼叫則使用下列敘述:

    cout << MatrixAvg(A);


Array2fnc cpp
範例程式 Array2Fnc.cpp



Tensor
三維陣列(tensor)

  • 對於一個m×n×p大小的張量T而言,元素T[i][j][k]所在的位址相當於從T[0][0][0]算起,偏移量 (offset) 為

    (i × n × p + j × p + k ) 個單位的地方。


ad