1.數(shù)組
本節(jié)介紹數(shù)組的使用,首先我們要搞明白什么是數(shù)組呢挎狸?數(shù)組就是能夠存放一系列具有相同數(shù)據(jù)類型的數(shù)據(jù)元素的集合扣汪,在計(jì)算機(jī)中表示為內(nèi)存地址連續(xù)的一片空間。
從圖中可以看出锨匆,計(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;
}
這里我們使用了一個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ù)組的嵌套诅迷。
看下圖
我們聲明了一個3x3的數(shù)組b,其實(shí)就是聲明了一個規(guī)模為3的一維數(shù)組b众旗,只不過b中的每個元素又都是一個規(guī)模為3的一維數(shù)組罢杉。
很好理解吧。換一個角度考慮問題贡歧,學(xué)過矩陣的童鞋都知道滩租,二維數(shù)組對應(yīng)著二維矩陣。矩陣的每個元素也是有下表的利朵,所以我們通過數(shù)組下表來表示每個元素律想,其中第一個下表表示行數(shù),第二個下表表示列數(shù)绍弟。
下面給出二維數(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;
}
三維及以上維數(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;
}
結(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;
}
哎呀疯兼,和我們想要的結(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;
}
好了怨酝,數(shù)組就介紹這么多傀缩,大家多應(yīng)用,熟能生巧农猬。記住合理使用數(shù)組能簡化程序結(jié)構(gòu)喲赡艰!