正文 第20章 數組2(1 / 1)

一維數組隻有一個下標,而實際問題中有很多量是二維的甚至多維的,因此C語言允許構造多維數組。多維數組元素有多個下標,以標識它在數組中的位置。本節隻介紹二維數組,多維數組可由二維數組類推而得到。

定義二維數組的語法格式為:

數據類型數組名[常量表達式1][常量表達式2];

其中“常量表達式1”表示第一維下標(行標)的長度,“常量表達式2”表示第二維下標(列標)的長度。二維數組占用字節數=行標×列標×sizeof(數據類型)。例如:intarray[3][4];說明了一個3行4列的數組,數組名為array,其元素值的類型為整型,該數組共有3×4個元素,占用24個字節,各個數組元素下標如下所示:

array[0][0]array[0][1]array[0][2]array[0][3]

array[1][0]array[1][1]array[1][2]array[1][3]

array[2][0]array[2][1]array[2][2]array[2][3]

二維數組在概念上是二維的,即其下標在兩個方向變化,元素在數組中的位置也處於一個平麵之中,而不是像一維數組隻是一個方向,但其內存卻是按一維線性排列的。如何在一維存儲器中存放二維數組?有兩種方式:一種是按行存儲,即元素放完一行之後順次放入下一行,C語言的二維數組正是按行排列的;另一種是按列存儲,即放完一列之後再順次放入下一列,例如FORTRAN語言。

二維數組的初始化也是在類型說明時給各元素賦以初值。二維數組可按行分段賦值,也可按行連續賦值。例如對數組array[3][4]:

(1)按行分段賦值可以寫為:

intarray[3][4]={{85,74,92,65},{71,59,85,90},{76,63,70,77}};

(2)按行連續賦值可寫為:

intarray[3][4]={85,74,92,65,71,59,85,90,76,63,70,77};

這兩種賦初值的結果是完全相同的。

建議讀者使用按行分段賦值,這樣書寫程序清晰明了,不易出錯。

對於二維數組初始化賦值還需要注意以下幾點規定:

(1)可以隻對部分元素賦初值,未賦初值的元素自動取0值。

例如:intarray[3][4]={{1,2},{3},{4,5,6}},賦值後的各元素值為1,2,0,3,0,0,4,5,6。

(2)如對全部元素賦初值,則第一維的長度可以不給出。

例如:intarray[3][4]={0,1,2,3,4,5,6,7,8,9,10,11},等價於intarray[][4]={0,1,2,3,4,5,6,7,8,9,10,11}。

[例75]編寫程序,求出一個3×4的矩陣中最大元素的值及其所在行、列的位置。

#include

#defineM3

#defineN4

voidmain()

{inti,j,max,row,column;

intarray[M][N];

row=column=0;

printf("inputvalues:\n");

for(i=0;i

#defineSNO4/*設學號從1開始*/

#defineCOURSE4/*四門課程考試成績*/

#defineSUM5/*總分位於第6列*/

#defineAVG6/*平均成績位於第7列*/

voidmain()

{inti,j,sum,avg;

intstu[SNO+1][AVG+1];

printf("inputscores:\n");

printf("Math\tEnglish\tPhysics\tC\tSum\tAvg\n");

for(i=1;i