更新時(shí)間:2020-05-08 來(lái)源:黑馬程序員 瀏覽量:
二維數(shù)組的定義與初始化
在實(shí)際的工作中,僅僅使用一維數(shù)組是遠(yuǎn)遠(yuǎn)不夠的,例如,一個(gè)學(xué)習(xí)小組有5個(gè)人,每個(gè)人有3門課的考試成績(jī),如果使用一維數(shù)組解決是很麻煩的。這時(shí),可以使用二維數(shù)組,維數(shù)組的定義方式與一維數(shù)組類似,其語(yǔ)法格式如下:
類型說(shuō)明符 數(shù)組名[常量表達(dá)式1] [常量表達(dá)式2];
在上述語(yǔ)法格式中,“常量表達(dá)式1”被稱為行下標(biāo),“常量表達(dá)式2”被稱為列下標(biāo)。
例如,定義一個(gè)3行4列的二維數(shù)組,具體如下:
int a[3][4];
在上述定義的二維數(shù)組中,共包含3*4個(gè)元素,即12個(gè)元素。接下來(lái),通過(guò)一張圖來(lái)描述二維數(shù)組a的元素分布情況。
從圖中可以看出,二維數(shù)組a是按行進(jìn)行存放的,先存放a行,再存放a[1行、a2行,并且每行有4個(gè)元素,也是依次存放的。
完成二維數(shù)組的定義后,需要對(duì)二維數(shù)組進(jìn)行初始化,初始化二維數(shù)組的方式有4種,具體如下。
(1)按行給二維數(shù)組賦初值。例如:
int a[2][3] = {{1,2,3},{4,5,6}};
在上述代碼中,等號(hào)后面有一對(duì)大括號(hào),大括號(hào)中的第1對(duì)括號(hào)代表的是第1行的數(shù)組元素,第2對(duì)括號(hào)代表的是第2行的數(shù)組元素。
(2)將所有的數(shù)組元素按行順序?qū)懺?個(gè)大括號(hào)內(nèi)。例如
int a[2][3] = {1,2,3,4,5,6};
在上述代碼中,二維數(shù)組a共有兩行,每行有3個(gè)元素,其中,第1行的元素依次為1、2、3,第2行元素依次為4、5、6。
(3)對(duì)部分?jǐn)?shù)組元素賦初值。例如:
int b[3][4] = {{1},{4,3},{2,1,2}};
在上述代碼中,只為數(shù)組b中的部分元素進(jìn)行了賦值,對(duì)于沒(méi)有賦值的元素,系統(tǒng)會(huì)自動(dòng)賦值為0,數(shù)組b中元素的存儲(chǔ)方式如下所示。
(4)如果對(duì)全部數(shù)組元素置初值,則二維數(shù)組的第1個(gè)下標(biāo)可省略,但第2個(gè)下標(biāo)不能省略。例如
int a[2][3] = {1,2,3,4,5,6};
可以寫為
int a[][3] = {1,2,3,4,5,6};
系統(tǒng)會(huì)根據(jù)固定的列數(shù),將后邊的數(shù)值進(jìn)行劃分,自動(dòng)將行數(shù)定為2。
二維數(shù)組的引用
二維數(shù)組的引用方式同一維數(shù)組的引用方式一樣,也是通過(guò)數(shù)組名和下標(biāo)的方式來(lái)引用數(shù)組元素,其語(yǔ)法格式如下:
數(shù)組名[下標(biāo)] [下標(biāo)];
在上述語(yǔ)法格式中,下標(biāo)值應(yīng)該在已定義的數(shù)組的大小范圍內(nèi),例如,下面這種情況就是錯(cuò)誤的。
int a[3][ 4]; //定義a為3行4列的二維數(shù)組
a[3][4]=3; //對(duì)數(shù)組a第3行第4列元素賦值,出錯(cuò)
在上述代碼中,數(shù)組a可用的行下標(biāo)范圍是0~2,列下標(biāo)是0~3,a[3][4]超出了數(shù)組的下標(biāo)范圍。為了幫助讀者更好地掌握二維數(shù)組的引用,接下來(lái),通過(guò)一個(gè)案例來(lái)演示二維數(shù)組的遍歷。
#include<stdio.h>
void main() {
//申明并初始化數(shù)組
int array[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
for (int i = 0; i < 3; i++) //循環(huán)遍歷
{
for (int j = 0; j < 4; j++) //循環(huán)遍歷
{
printf("[%d][%d]: %d", i, j, array[i][j]);
}
printf("\n"); //每行添加換行字符
}
}
運(yùn)行結(jié)果如下
在上圖中定義了一個(gè)二維數(shù)組aray,該數(shù)組有3行4列。當(dāng)使用嵌套for循環(huán)遍歷二維數(shù)組元素時(shí),外層for循環(huán)用于變量數(shù)組的行元素,內(nèi)層for循環(huán)用于遍歷數(shù)組的列元素。從圖中可以看出,程序依次將數(shù)組aray中的元素輸出了。
二維數(shù)組的應(yīng)用
熟悉了二維數(shù)組的定義和引用,接下來(lái)定義一個(gè)二維數(shù)組 StuScore[5][3],用來(lái)存放5名同學(xué)3門課程的成績(jī),并定義變量m表示學(xué)生,n表示第幾門成績(jī),aver表示每名同學(xué)3門課程的平均成績(jī),sum表示每名同學(xué)3門課的總成績(jī),具體如下案例所示:
#include<stdio.h>
void main(int argc, char *argv[])
{
int StuScore[5][3] = {
//張同學(xué)
{88, 70, 90},
//王同學(xué)
{80, 80, 60},
//李同學(xué)
{89, 60, 85},
//趙同學(xué)
{80, 75, 78},
//周同學(xué)
{70, 80, 80}
};
int m = 0, n = 0;
int nStuTotalScore = 0;
int nMathTotalScore = 0;
int nChineseTotalScore = 0;
int nEnglishToatalScore = 0;
printf("個(gè)人總成績(jī):\n");
for (m = 0; m < 5; m++) {
nStuTotalScore = 0;
for (n = 0; n < 3; n++) {
nStuTotalScore += StuScore[m][n];
switch (n)
{
case 0:
{
nMathTotalScore += StuScore[m][n];
break;
}
case 1:
{
nChineseTotalScore += StuScore[m][1];
break;
}
case 2:
{
nEnglishToatalScore += StuScore[m][2];
}
}
}
switch (m)
{
case 0:
{
printf("張同學(xué):%d\n", nStuTotalScore);
break;
}
case 1:
{
printf("王同學(xué):%d\n", nStuTotalScore);
break;
}
case 2:
{
printf("李同學(xué):%d\n", nStuTotalScore);
break;
}
case 3:
{
printf("趙同學(xué):%d\n", nStuTotalScore);
break;
}
case 4:
{
printf("周同學(xué):%d\n", nStuTotalScore);
break;
}
}
}
printf("小組數(shù)學(xué)總分: %d 小組數(shù)學(xué)平均分:%.2f\n",
nMathTotalScore, (double)nMathTotalScore / 5);
printf("小組語(yǔ)文學(xué)總分: %d 小組語(yǔ)文平均分:%.2f\n",
nChineseTotalScore, (double)nChineseTotalScore / 5);
printf("小組英語(yǔ)總分: %d 小組英語(yǔ)平均分:%.2f\n",
nEnglishToatalScore, (double)nEnglishToatalScore / 5);
}
運(yùn)行結(jié)果如下
上面案例中實(shí)現(xiàn)了計(jì)算小組各科平均分的功能。其中,第415行代碼定義了一個(gè)二維數(shù)組,用來(lái)存儲(chǔ)小組中每個(gè)成員的各科成績(jī)。第25~45行代碼通過(guò)遍歷列下標(biāo)獲取每個(gè)小組不同學(xué)科的總分,第46~74行代碼通過(guò)遍歷行下標(biāo)獲取每個(gè)小組成員的總分,最后將小組不同學(xué)科的總分和平均分輸出。以上我們介紹了C++二維數(shù)據(jù)的定義和用法,如果想學(xué)習(xí)C++可以了解黑馬程序員C++培訓(xùn)課程。
猜你喜歡