06.一維數(shù)組和多維數(shù)組

1.數(shù)組

本節(jié)介紹數(shù)組的使用,首先我們要搞明白什么是數(shù)組呢挎狸?數(shù)組就是能夠存放一系列具有相同數(shù)據(jù)類型的數(shù)據(jù)元素的集合扣汪,在計(jì)算機(jī)中表示為內(nèi)存地址連續(xù)的一片空間。

Paste_Image.png

從圖中可以看出锨匆,計(jì)算機(jī)給我們的數(shù)組分配的是地址連續(xù)的空間崭别,而且我們的數(shù)組名稱a,其實(shí)也就是一個指針變量恐锣,它指向的是我們數(shù)組的首元素的地址茅主。下面引入下表的概念,什么是下表呢土榴?可以看到诀姚,我們已經(jīng)向計(jì)算機(jī)申請了一片地址,但是我們該如何訪問它們呢鞭衩,聰明的你也許會發(fā)現(xiàn)剛剛我們說a是數(shù)組的首地址学搜,所以去除a地址中的元素就能訪問數(shù)組的第一個元素了,不錯论衍,但是我們還沒有介紹指針的概念瑞佩,那么怎么訪問第二個,第三個...數(shù)組元素呢坯台?我們通過數(shù)組下表來實(shí)現(xiàn)炬丸,比如說a[0]表示第一個元素,a[1]表示第二個元素 ... 這里我們的下表統(tǒng)一的從0開始。這樣一來我們就能夠通過下表訪問所有的數(shù)組元素了稠炬。
需要強(qiáng)調(diào)的是數(shù)組的大小總是比下表最大值多一焕阿,舉例說明

int a[7];//我們聲明了一個整型的數(shù)組,數(shù)組規(guī)模為7首启,也就是最多放7個元素 

雖然我們定義是使用了a[7]但是注意暮屡,這里的7只表示我們數(shù)組的規(guī)模,具體的7個元素毅桃,對應(yīng)著數(shù)組下表a[0] a[1] a[2] a[3] a[4] a[5] a[6]褒纲,注意沒有a[7]喲。那么如果我們一不小心钥飞,使用了數(shù)組規(guī)模以內(nèi)的下表會怎么樣呢莺掠?這時系統(tǒng)會提示錯誤,也就是我們說的越界訪問读宙,系統(tǒng)是不允許的彻秆,就好比你家的羊走到了別人家的田地里吃草,這是不允許的结闸。
下面給出一個數(shù)組使用的例子

還記得講switch語句的時候的那個例子么唇兑, 輸入一個整數(shù),輸入星期幾“蚬溃現(xiàn)在我們用數(shù)組實(shí)現(xiàn)幔亥,體會一下數(shù)組的感覺。

#include<iostream>
#include<string>
using namespace std;
int main(){
    int n;
    string days[7] = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
    cout << "please input a number between 1 and 7: " << endl;
    cin >> n;
    cout << "今天是 " << days[n - 1]<<endl;
}
Paste_Image.png

這里我們使用了一個string類型的數(shù)組察纯,盡管string不是基本的數(shù)據(jù)類型帕棉,但是同樣可以構(gòu)成數(shù)組。上面這個例子的數(shù)組用法十分常見饼记,這樣做可以巧妙的避開了復(fù)雜的分支結(jié)構(gòu)香伴,使得我們的程序看上去更加清晰明了。
我們的數(shù)組的聲明形式是什么樣子的呢具则?聲明一個數(shù)組即纲,首先要給出我們數(shù)組的數(shù)據(jù)類型,也就是你數(shù)組里面打算存放什么類型的數(shù)據(jù)博肋,比如int類型, 然后就是我們的數(shù)組名和中括號以及我們的數(shù)組的規(guī)模a[7]低斋,也就是告訴計(jì)算機(jī)我們需要多少個元素空間。
所以聲明語句為 int a[7];我們多舉幾個例子匪凡,體會一下膊畴。

int days[7];
char letters[26];
string names[10];
float scores[5];

還有一點(diǎn)需要注意,就是在聲明的時候病游,我們中括號內(nèi)的數(shù)組規(guī)模一定要是一個常量唇跨,不能是變量,盡管變量代表一個具體的值,也不可以买猖。

int n =5;
int a[n];//這是不合法的

以上我們介紹的是一維數(shù)組的情況改橘,那么什么是多維數(shù)組呢?

2.多維數(shù)組

首先簡單介紹一下維數(shù)的概念玉控,類比數(shù)學(xué)很好理解飞主,我們的直線是一維的,平面是二維的高诺,空間幾何是三維的既棺。當(dāng)然我們生活的空間就是三維的。一般化的定義就是說懒叛,獨(dú)立向量的個數(shù),有幾個獨(dú)立向量耽梅,就是幾維薛窥。好了那么如何理解二維數(shù)組呢,我可以這么理解眼姐,二維數(shù)組是兩個一維數(shù)組的嵌套诅迷。
看下圖

Paste_Image.png

我們聲明了一個3x3的數(shù)組b,其實(shí)就是聲明了一個規(guī)模為3的一維數(shù)組b众旗,只不過b中的每個元素又都是一個規(guī)模為3的一維數(shù)組罢杉。
很好理解吧。換一個角度考慮問題贡歧,學(xué)過矩陣的童鞋都知道滩租,二維數(shù)組對應(yīng)著二維矩陣。矩陣的每個元素也是有下表的利朵,所以我們通過數(shù)組下表來表示每個元素律想,其中第一個下表表示行數(shù),第二個下表表示列數(shù)绍弟。

Paste_Image.png

下面給出二維數(shù)組的一個例子

#include<iostream>
#include<string>
using namespace std;
int main(){
    int scores[3][2] = { { 80, 92 }, { 85, 91 }, {90,98} };//描述三個童鞋的語文和數(shù)學(xué)成績
    for (int i = 0; i < 3; i++){
        cout << "同學(xué)" << i + 1 << "的語文成績:" << scores[i][0] << " 數(shù)學(xué)成績: " << scores[i][1] << endl;
    }
    return 0;
}
Paste_Image.png

三維及以上維數(shù)的數(shù)組與此類似技即。
下面說明一下數(shù)組的初始化
在聲明數(shù)組的時候就可以對數(shù)組初始化
int scores[3][2] = { { 80, 92 }, { 85, 91 }, {90,98} };
仔細(xì)觀察,這樣是很規(guī)范的樟遣,因?yàn)槲覀兺ㄟ^括號進(jìn)行了劃分而叼。
那么把括號去掉行不行呢?
int scores[3][2] = { 80, 92 , 85, 91 , 90,98 };
我們不妨跑一下試試

#include<iostream>
#include<string>
using namespace std;
int main(){
   int scores[3][2] = { 80, 92, 85, 91, 90, 98 };//描述三個童鞋的語文和數(shù)學(xué)成績
   for (int i = 0; i < 3; i++){
       cout << "同學(xué)" << i + 1 << "的語文成績:" << scores[i][0] << " 數(shù)學(xué)成績: " << scores[i][1] << endl;
   }
   return 0;
}
Paste_Image.png

結(jié)果是一樣的豹悬。所以在我們沒有特殊說明的情況下葵陵,系統(tǒng)會優(yōu)先選擇最低維進(jìn)行填充,即最右面的一維屿衅。本例看做3行2列的話埃难,就先填充第一行,也就是先選擇2個給第一行,再選2個給第二行涡尘。忍弛。。
當(dāng)然如果初始化的數(shù)據(jù)一樣考抄,比如說把成績初始值設(shè)為80细疚,該怎么做呢?

int scores[3][2] = { 80川梅, };

#include<iostream>
#include<string>
using namespace std;
int main(){
    int scores[3][2] = { 80,};//描述三個童鞋的語文和數(shù)學(xué)成績
    for (int i = 0; i < 3; i++){
        cout << "同學(xué)" << i + 1 << "的語文成績:" << scores[i][0] << " 數(shù)學(xué)成績: " << scores[i][1] << endl;
    }
    return 0;
}
Paste_Image.png

哎呀疯兼,和我們想要的結(jié)果不一樣,會發(fā)現(xiàn)贫途,如果沒有明確給出值的話吧彪,系統(tǒng)默認(rèn)初始化為0 那么如何達(dá)到全都是80的效果呢?對了丢早,使用我們講過的循環(huán)姨裸,這里顯然for循環(huán)比較合適。

#include<iostream>
#include<string>
using namespace std;
int main(){
    int scores[3][2] = { 80,};//描述三個童鞋的語文和數(shù)學(xué)成績
    for (int i = 0; i < 3; i++){
        scores[i][0] = 80;
        scores[i][1] = 80;
    }
    for (int i = 0; i < 3; i++){
        cout << "同學(xué)" << i + 1 << "的語文成績:" << scores[i][0] << " 數(shù)學(xué)成績: " << scores[i][1] << endl;
    }
    return 0;
}
Paste_Image.png

好了怨酝,數(shù)組就介紹這么多傀缩,大家多應(yīng)用,熟能生巧农猬。記住合理使用數(shù)組能簡化程序結(jié)構(gòu)喲赡艰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斤葱,隨后出現(xiàn)的幾起案子慷垮,更是在濱河造成了極大的恐慌,老刑警劉巖揍堕,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件换帜,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹤啡,警方通過查閱死者的電腦和手機(jī)惯驼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來递瑰,“玉大人祟牲,你說我怎么就攤上這事《恫浚” “怎么了说贝?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慎颗。 經(jīng)常有香客問我乡恕,道長言询,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任傲宜,我火速辦了婚禮运杭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘函卒。我一直安慰自己辆憔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布报嵌。 她就那樣靜靜地躺著虱咧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锚国。 梳的紋絲不亂的頭發(fā)上腕巡,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音血筑,去河邊找鬼逸雹。 笑死,一個胖子當(dāng)著我的面吹牛云挟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播转质,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼园欣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了休蟹?” 一聲冷哼從身側(cè)響起沸枯,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赂弓,沒想到半個月后绑榴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盈魁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年翔怎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杨耙。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赤套,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊膜,到底是詐尸還是另有隱情容握,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布车柠,位于F島的核電站剔氏,受9級特大地震影響塑猖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谈跛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一羊苟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧币旧,春花似錦践险、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鳍刷,卻和暖如春占遥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背输瓜。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工瓦胎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尤揣。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓搔啊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親北戏。 傳聞我的和親對象是個殘疾皇子负芋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一嗜愈。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)旧蛾; ...
    朱森閱讀 3,440評論 3 44
  • 謹(jǐn)記 每個人心中都有一片海,自己不揚(yáng)帆蠕嫁,沒人幫您啟航锨天,久了就是一片死海。人生剃毒,就是一場自己與自己的較量:讓積極打敗...
    長風(fēng)留言閱讀 7,952評論 6 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法病袄,類相關(guān)的語法,內(nèi)部類的語法赘阀,繼承相關(guān)的語法陪拘,異常的語法,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • hly6105閱讀 159評論 0 0
  • ——現(xiàn)實(shí)的情況是如果一個男人沒有掙錢的野心和能力纤壁,匆匆進(jìn)入戀愛左刽,那一定會因?yàn)闆]有足夠的經(jīng)濟(jì)基礎(chǔ)去支撐他們極力奢求的...
    靜聽旁白閱讀 190評論 0 2