詳解C++中的一維數(shù)組和二維數(shù)組
C++一維數(shù)組
定義一維數(shù)組
定義一維數(shù)組的一般格式為:
類型標(biāo)識(shí)符 數(shù)組名[常量表達(dá)式];
例如:
int a[10];
它表示數(shù)組名為a,此數(shù)組為整型,有10個(gè)元素。
關(guān)于一維數(shù)組的幾點(diǎn)說明:
1) 數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。
2) 用方括號(hào)括起來的常量表達(dá)式表示下標(biāo)值,如下面的寫法是合法的:
int a[10]; int a[2*5]; int a[n*2]; //假設(shè)前面已定義了n為常變量
3) 常量表達(dá)式的值表示元素的個(gè)數(shù),即數(shù)組長度。例如,在“int a[10];”中,10表示a數(shù)組有10個(gè)元素,下標(biāo)從0開始,這10個(gè)元素是: a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7], a[8],a[9]。注意最后一個(gè)元素是a[9]而不是a[10]。
4) 常量表達(dá)式中可以包括常量、常變量和符號(hào)常量,但不能包含變量。也就是說,C++不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的大小不依賴于程序運(yùn)行過程中變量的值。例如,下面這樣定義數(shù)組是不行的:
int n; cin>>n; //輸入a數(shù)組的長度 int a[n]; //企圖根據(jù)n的值決定數(shù)組的長度
如果把第1,2行改為下面一行就合法了:
const int n=5;
引用一維數(shù)組的元素
數(shù)組必須先定義,然后使用。只能逐個(gè)引用數(shù)組元素的值而不能一次引用整個(gè)數(shù)組中的全部元素的值。
數(shù)組元素的表示形式為:
數(shù)組名[下標(biāo)]
下標(biāo)可以是整型常量或整型表達(dá)式。例如:
a[0]= a[5]+ a[7]- a[2*3]
【例】數(shù)組元素的引用。
#include <iostream> using namespace std; int main( ) { int i, a[10]; for (i=0;i<=9;i++) a[i]=i; for (i=9;i>=0;i--) cout<<a[i]<<" "; cout<<endl; return 0; }
運(yùn)行結(jié)果如下:
9 8 7 6 5 4 3 2 1 0
程序使a[0]~a[9]的值為0~9,然后按逆序輸出。
一維數(shù)組的初始化
1) 在定義數(shù)組時(shí)分別對(duì)數(shù)組元素賦予初值。例如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
2) 可以只給一部分元素賦值。例如:
int a[10]={0,1,2,3,4};
3) 如果想使一個(gè)數(shù)組中全部元素值為1,可以寫成:
int a[10]={1,1,1,1,1,1,1,1,1,1};
不能寫成
int a[10]={1*10};
不能給數(shù)組整體賦初值。
4) 在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長度。例如:
int a[5]={1,2,3,4,5};
可以寫成
int a[]={1,2,3,4,5};
一維數(shù)組程序舉例
【例】用數(shù)組來處理求Fibonacci數(shù)列問題。
可以用20個(gè)元素代表數(shù)列中的20個(gè)數(shù),從第3個(gè)數(shù)開始,可以直接用表達(dá)式f[i]=f[i-2]+f[i-1]求出各數(shù)。程序如下:
#include <iostream> #include <iomanip> using namespace std; int main( ) { int i; int f[20]={1,1}; //f[0]=1,f[1]=1 for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; //在i的值為2時(shí),f[2]=f[0]+f[1],依此類推 for(i=0;i<20;i++) //此循環(huán)的作用是輸出20個(gè)數(shù) { if(i%5==0) cout<<endl; //控制換行,每行輸出5個(gè)數(shù)據(jù) cout<<setw(8)<<f[i]; //每個(gè)數(shù)據(jù)輸出時(shí)占8列寬度 } cout<<endl; //最后執(zhí)行一次換行 return 0; }
運(yùn)行結(jié)果如下:
【例】編寫程序,用起泡法對(duì)10個(gè)數(shù)排序(按由小到大順序)。
起泡法的思路是:將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前頭。見圖5.2。然后進(jìn)行第2趟比較,對(duì)余下的前面5個(gè)數(shù)按上法進(jìn)行比較,見圖。
可以推知,如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較(和交換)。在第1趟中要進(jìn)行n-1次兩兩比較,在第j趟中要進(jìn)行n-j次兩兩比較。
根據(jù)以上思路寫出程序,今設(shè)n=10,本例定義數(shù)組長度為11,a[0]不用,只用a[1]~a[10],以符合人們的習(xí)慣。從前面的敘述可知,應(yīng)該進(jìn)行9趟比較和交換。
#include <iostream> using namespace std; int main( ) { int a[11]; int i, j, t; cout<<"input 10 numbers :"<<endl; for (i=1;i<11;i++) //輸入a[1]~a[10] cin>>a[i]; cout<<endl; for (j=1;j<=9;j++) //共進(jìn)行9趟比較 for(i=1;i<=10-j;i++)//在每趟中要進(jìn)行(10-j)次兩兩比較 if (a[i]>a[i+1]) //如果前面的數(shù)大于后面的數(shù) { t=a[i];a[i]=a[i+1];a[i+1]=t; }//交換兩個(gè)數(shù)的位置, 使小數(shù)上浮 cout<<"the sorted numbers :"<<endl; for(i=1;i<11;i++) //輸出10個(gè)數(shù) cout<<a[i]<<" "; cout<<endl; return 0; }
運(yùn)行情況如下:
input 10 numbers: 3 5 9 11 33 6 -9 -76 100 123↙ the sorted numbers: -76 -9 3 5 6 9 11 33 100 123
C++二維數(shù)組
具有兩個(gè)下標(biāo)的數(shù)組稱為二維數(shù)組。有些數(shù)據(jù)要依賴于兩個(gè)因素才能惟一地確定,例如有3個(gè)學(xué)生,每個(gè)學(xué)生有4門課的成績,顯然,成績數(shù)據(jù)是一個(gè)二維表,如書中表所示。
想表示第3個(gè)學(xué)生第4門課的成績,就需要指出學(xué)生的序號(hào)和課程的序號(hào)兩個(gè)因素,在數(shù)學(xué)上以S3,4表示。在C++中以s[3][4]表示,它代表數(shù)據(jù)73。
定義二維數(shù)組
定義二維數(shù)組的一般形式為:
類型標(biāo)識(shí)符 數(shù)組名[常量表達(dá)式][常量表達(dá)式];
例如:
float a[3][4], b[5][10];
定義a為3×4(3行4列)的單精度數(shù)組,b為5×10(5行10列)的單精度數(shù)組。注意不能寫成“float a[3,4], b[5,10];”。C++對(duì)二維數(shù)組采用這樣的定義方式,使我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如,可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有3個(gè)元素:a[0],a[1],a[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組,見圖5.4。a[0],a[1],a[2]是3個(gè)一維數(shù)組的名字。
上面定義的二維數(shù)組可以理解為定義了3個(gè)一維數(shù)組,即相當(dāng)于:
float a[0][4], a[1][4], a[2][4];
此處把a(bǔ)[0],a[1],a[2]作一維數(shù)組名。C++的這種處理方法在數(shù)組初始化和用指針表示時(shí)顯得很方便,這在以后會(huì)體會(huì)到。
C++中,二維數(shù)組中元素排列的順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。圖表示對(duì)a[3][4]數(shù)組存放的順序。
上面定義的二維數(shù)組可以理解為定義了3個(gè)一維數(shù)組,即相當(dāng)于:
float a[0][4], a[1][4], a[2][4];
此處把a(bǔ)[0],a[1],a[2]作一維數(shù)組名。C++的這種處理方法在數(shù)組初始化和用指針表示時(shí)顯得很方便,這在以后會(huì)體會(huì)到。
C++中,二維數(shù)組中元素排列的順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。圖5.5表示對(duì)a[3][4]數(shù)組存放的順序。
C++允許使用多維數(shù)組。有了二維數(shù)組的基礎(chǔ),再掌握多維數(shù)組是不困難的。例如,定義三維數(shù)組的方法是:
float a[2][3][4];
定義float型三維數(shù)組a,它有2×3×4=24個(gè)元素。多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。例如,上述三維數(shù)組的元素排列順序?yàn)椋?br />
二維數(shù)組的引用
二維數(shù)組的元素的表示形式為:
數(shù)組名 [下標(biāo)][下標(biāo)]
如:
a[2][3]
下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]。不要寫成a[2,3],a[2-1,2*2-1]形式。
數(shù)組元素是左值,可以出現(xiàn)在表達(dá)式中,也可以被賦值,例如:
b[1][2]=a[2][3]/2;
在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。常出現(xiàn)的錯(cuò)誤是:
int a[3][4]; //定義3行4列的數(shù)組 ┆ a[3][4]=15; //引用a[3][4]元素
定義a為3×4的數(shù)組,它可用的行下標(biāo)值最大為2,列坐標(biāo)值最大為3。最多可以用到a[2][3],a[3][4]就超過了數(shù)組的范圍。
請(qǐng)嚴(yán)格區(qū)分在定義數(shù)組時(shí)用的a[3][4]和引用元素時(shí)的a[3][4]的區(qū)別。前者a[3][4]用來定義數(shù)組的維數(shù)和各維的大小,后者a[3][4]中的3和4是下標(biāo)值,a[3][4]代表某一個(gè)元素。
二維數(shù)組的初始化
可以用下面的方法對(duì)二維數(shù)組初始化:
1) 分行給二維數(shù)組賦初值。如
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
這種賦初值方法比較直觀,把第1個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第1行的元素,第2個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第2行的元素……即按行賦初值。
2) 可以將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
效果與前相同。但以第1種方法為好,一行對(duì)一行,界限清楚。用第2種方法如果數(shù)據(jù)多,寫成一大片,容易遺漏,也不易檢查。
3) 可以對(duì)部分元素賦初值。如:
int a[3][4]={{1},{5},{9}};
它的作用是只對(duì)各行第1列的元素賦初值,其余元素值自動(dòng)置為0。賦初值后數(shù)組各元素為:
1 0 0 0 5 0 0 0 9 0 0 0
也可以對(duì)各行中的某一元素賦初值:
int a[3][4]={{1},{0,6},{0,0,11}};
初始化后的數(shù)組元素如下:
1 0 0 0 0 6 0 0 0 0 11 0
這種方法對(duì)非0元素少時(shí)比較方便,不必將所有的0都寫出來,只需輸入少量數(shù)據(jù)。也可以只對(duì)某幾行元素賦初值:
int a[3][4]={{1},{5,6}};
數(shù)組元素為:
1 0 0 0 5 6 0 0 0 0 0 0
第3行不賦初值。也可以對(duì)第2行不賦初值:
int a[3][4]={{1},{},{9}};
4) 如果對(duì)全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時(shí)對(duì)第一維的長度可以不指定,但第二維的長度不能省。如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
可以寫成
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
系統(tǒng)會(huì)根據(jù)數(shù)據(jù)總個(gè)數(shù)分配存儲(chǔ)空間,一共12個(gè)數(shù)據(jù),每行4列,當(dāng)然可確定為3行。
在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長度,但應(yīng)分行賦初值。如
int a[][4]={{0,0,3},{},{0,10}};
這樣的寫法,能通知編譯系統(tǒng): 數(shù)組共有3行。數(shù)組各元素為:
0 0 3 0 0 0 0 0 0 10 0 0
C++在定義數(shù)組和表示數(shù)組元素時(shí)采用a[][]這種兩個(gè)方括號(hào)的方式,對(duì)數(shù)組初始化時(shí)十分有用,它使概念清楚,使用方便,不易出錯(cuò)。
二維數(shù)組程序舉例
【例】將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。例如:
程序如下:
#include <iostream> using namespace std; int main( ) { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; cout<<"array a:"<<endl; for (i=0;i<=1;i++) { for (j=0;j<=2;j++) { cout<<a[i][j]<<" "; b[j][i]=a[i][j]; } cout<<endl; } cout<<"array b:"<<endl; for (i=0;i<=2;i++) { for(j=0;j<=1;j++) cout<<b[i][j]<<" "; cout<<endl; } return 0; }
運(yùn)行結(jié)果如下:
array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6
【例】有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。
開始時(shí)把a(bǔ)[0][0]的值賦給變量max,然后讓下一個(gè)元素與它比較,將二者中值大者保存在max中,然后再讓下一個(gè)元素與新的max比,直到最后一個(gè)元素比完為止。max最后的值就是數(shù)組所有元素中的最大值。程序如下:
#include <iostream> using namespace std; int main( ) { int i,j,row=0,colum=0,max; int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}}; max=a[0][0];//使max開始時(shí)取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 { max=a[i][j]; //max將取該元素的值 row=i; //記下該元素的行號(hào)i colum=j;//記下該元素的列號(hào)j } cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl; return 0; }
輸出結(jié)果為
max=56,row=0,colum=3
- C++?使用?new?創(chuàng)建二維數(shù)組實(shí)例
- c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié)
- C++二維數(shù)組螺旋加密信息
- C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解
- C++ 二維數(shù)組參數(shù)傳遞的實(shí)現(xiàn)方法
- C++二維數(shù)組中的查找算法示例
- C++中指針指向二維數(shù)組實(shí)例詳解
- C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實(shí)例代碼
- C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總
- C++中的不規(guī)則二維數(shù)組實(shí)現(xiàn)代碼
相關(guān)文章
C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10C++中實(shí)現(xiàn)子進(jìn)程執(zhí)行和管道通信詳解
在這篇博客中,我們將深入探索如何在 C++ 程序中實(shí)現(xiàn)子進(jìn)程的創(chuàng)建與執(zhí)行,以及父子進(jìn)程間的管道通信,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01Objective-C不帶加減號(hào)的方法實(shí)例
顯而易見的事實(shí)是,Objective-C 中,+ 表示類方法,- 表示實(shí)例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號(hào)的相關(guān)資料,需要的朋友可以參考下2021-06-06C語言實(shí)現(xiàn)簡易停車場(chǎng)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易停車場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法示例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C語言平衡二叉樹的相關(guān)定義與使用技巧,需要的朋友可以參考下2018-01-01