C 二維陣列

2021-07-26 16:04:42 字數 4386 閱讀 1796

c++二維陣列_微學苑

具有兩個下標的陣列稱為二維陣列。有些資料要依賴於兩個因素才能惟一地確定,例如有3個學生,每個學生有4門課的成績,顯然,成績資料是乙個二維表,如書中表5.1所示。

表5.1 學生成績資料表

學生序號

課程1課程2

課程3課程4

課程5學生1

8578

9996

88學生2

7689

7597

75學生3

6492

907356

想表示第3個學生第4門課的成績,就需要指出學生的序號和課程的序號兩個因素,在數學上以s3,4表示。在c++中以s[3][4]表示,它代表資料73。

定義二維陣列的一般形式為:

型別識別符號 陣列名[常量表示式][常量表示式];

例如:float a[3][4], b[5][10];

定義a為3×4(3行4列)的單精度陣列,b為5×10(5行10列)的單精度陣列。注意不能寫成「float a[3,4], b[5,10];」。c++對二維陣列採用這樣的定義方式,使我們可以把二維陣列看作是一種特殊的一維陣列:它的元素又是乙個一維陣列。例如,可以把a看作是乙個一維陣列,它有3個元素:a[0],a[1],a[2],每個元素又是乙個包含4個元素的一維陣列,見圖5.4。a[0],a[1],a[2]是3個一維陣列的名字。

圖5.4

上面定義的二維陣列可以理解為定義了3個一維陣列,即相當於:

float a[0][4], a[1][4], a[2][4];

此處把a[0],a[1],a[2]作一維陣列名。c++的這種處理方法在陣列初始化和用指標表示時顯得很方便,這在以後會體會到。

c++中,二維陣列中元素排列的順序是:按行存放,即在記憶體中先順序存放第一行的元素,再存放第二行的元素。圖5.5表示對a[3][4]陣列存放的順序。

圖5.5

c++允許使用多維陣列。有了二維陣列的基礎,再掌握多維陣列是不困難的。例如,定義三維陣列的方法是:

float a[2][3][4];

定義float型三維陣列a,它有2×3×4=24個元素。多維陣列元素在記憶體中的排列順序:第一維的下標變化最慢,最右邊的下標變化最快。例如,上述三維陣列的元素排列順序為:

a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]

二維陣列的元素的表示形式為:

陣列名 [下標][下標]

如:a[2][3]

下標可以是整型表示式,如a[2-1][2*2-1]。不要寫成a[2,3],a[2-1,2*2-1]形式。

陣列元素是左值,可以出現在表示式中,也可以被賦值,例如:

b[1][2]=a[2][3]/2;

在使用陣列元素時,應該注意下標值應在已定義的陣列大小的範圍內。常出現的錯誤是:

int a[3][4];  //定義3行4列的陣列

┆a[3][4]=15; //引用a[3][4]元素

定義a為3×4的陣列,它可用的行下標值最大為2,列座標值最大為3。最多可以用到a[2][3],a[3][4]就超過了陣列的範圍。

請嚴格區分在定義陣列時用的a[3][4]和引用元素時的a[3][4]的區別。前者a[3][4]用來定義陣列的維數和各維的大小,後者a[3][4]中的3和4是下標值,a[3][4]代表某乙個元素。

可以用下面的方法對二維陣列初始化:

1) 分行給二維陣列賦初值。如

int a[3][4]=,,};

這種賦初值方法比較直觀,把第1個花括號內的資料賦給第1行的元素,第2個花括號內的資料賦給第2行的元素……即按行賦初值。

2) 可以將所有資料寫在乙個花括號內,按陣列排列的順序對各元素賦初值。如

int a[3][4]=;

效果與前相同。但以第1種方法為好,一行對一行,界限清楚。用第2種方法如果資料多,寫成一大片,容易遺漏,也不易檢查。

3) 可以對部分元素賦初值。如:

int a[3][4]=,,};

它的作用是只對各行第1列的元素賦初值,其餘元素值自動置為0。賦初值後陣列各元素為:

1  0  0  0

5  0  0  0

9  0  0  0

也可以對各行中的某一元素賦初值:

int a[3][4]=,,};

初始化後的陣列元素如下:

1  0  0  0

0  6  0  0

0  0 11  0

這種方法對非0元素少時比較方便,不必將所有的0都寫出來,只需輸入少量資料。也可以只對某幾行元素賦初值:

int a[3][4]=,};

陣列元素為:

1  0  0  0

5  6  0  0

0  0  0  0

第3行不賦初值。也可以對第2行不賦初值:

int a[3][4]=,{},};

4) 如果對全部元素都賦初值(即提供全部初始資料),則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。如:

int a[3][4]=;

可以寫成

int a[4]=;

系統會根據資料總個數分配儲存空間,一共12個資料,每行4列,當然可確定為3行。

在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。如

int a[4]=,{},};

這樣的寫法,能通知編譯系統: 陣列共有3行。陣列各元素為:

0  0  3  0

0  0  0  0

0 10 0  0

c++在定義陣列和表示陣列元素時採用a這種兩個方括號的方式,對陣列初始化時十分有用,它使概念清楚,使用方便,不易出錯。

【例5.4】將乙個二維陣列行和列元素互換,存到另乙個二維陣列中。例如:

程式如下:

複製純文字新視窗

#include

using

namespace std;

intmain()

,};int b[3][

2],i,j;

cout<<

「array a:」

0;i<=

1;i++)

cout<}cout<<

「array b:」

0;i<=

2;i++)

return0;

}

#include using namespace std;

int main( )

,}; int b[3][2],i,j;

cout<<"array a:"《執行結果如下:

array a:

1  2  3

4  5  6

array b:

1  4

2  5

3  6

【例5.5】有乙個3×4的矩陣,要求程式設計序求出其中值最大的那個元素的值,以及其所在的行號和列號。

開始時把a[0][0]的值賦給變數max,然後讓下乙個元素與它比較,將二者中值大者儲存在max中,然後再讓下乙個元素與新的max比,直到最後乙個元素比完為止。max最後的值就是陣列所有元素中的最大值。程式如下:

複製純文字新視窗

#include

using

namespace std;

intmain()

,,};

max=a[0][

0];//使max開始時取a[0][0]的值

for(i=

0;i<=

2;i++)

//從第0行~第2行

for(j=

0;j<=

3;j++)

//從第0列~第3列

if(a[i][j]>max)

//如果某元素大於max

cout<<

「max=」

<「,row=」

<「,colum=」

}#include using namespace std;

int main( )

,,};

max=a[0][0];//使max開始時取a[0][0]的值

for (i=0;i<=2;i++)//從第0行~第2行

for (j=0;j<=3;j++) //從第0列~第3列

if (a[i][j]>max) //如果某元素大於max

cout<<"max="《輸出結果為

max=56,row=0,colum=3

C 二維陣列

c 二維陣列 微學苑 具有兩個下標的陣列稱為二維陣列。有些資料要依賴於兩個因素才能惟一地確定,例如有3個學生,每個學生有4門課的成績,顯然,成績資料是乙個二維表,如書中表5.1所示。表5.1 學生成績資料表 學生序號 課程1課程2 課程3課程4 課程5學生1 8578 9996 88學生2 7689...

C 二維陣列

在c 中int myint是宣告乙個交錯陣列,宣告c 二維陣列是這麼宣告int classclsarrat2d 輸出陣列每一維的下限和上限 for inti 0 i myint.rank i i,myint.getlowerbound i myint.getupperbound i 遍歷,輸出二維陣...

C 二維陣列

規則二維陣列 int a new int 2,4 定義乙個2行4列的二維陣列 定義和初始化 int arr new int 2,5 console.writeline 規則二維陣列的輸出 for int i 0 i 2 i console.writeline console.writeline 不規...