最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++中的一維數(shù)組和二維數(shù)組

 更新時(shí)間:2015年09月12日 16:13:21   投稿:goldensun  
這篇文章主要介紹了詳解C++中的一維數(shù)組和二維數(shù)組,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++一維數(shù)組
定義一維數(shù)組

定義一維數(shù)組的一般格式為:
    類型標(biāo)識符  數(shù)組名[常量表達(dá)式];
例如:

  int a[10];


它表示數(shù)組名為a,此數(shù)組為整型,有10個(gè)元素。

關(guān)于一維數(shù)組的幾點(diǎn)說明:
1) 數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識符定名規(guī)則。

2) 用方括號括起來的常量表達(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á)式中可以包括常量、常變量和符號常量,但不能包含變量。也就是說,C++不允許對數(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í)分別對數(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) 在對全部數(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é)果如下:


【例】編寫程序,用起泡法對10個(gè)數(shù)排序(按由小到大順序)。

起泡法的思路是:將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前頭。見圖5.2。然后進(jìn)行第2趟比較,對余下的前面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é)生的序號和課程的序號兩個(gè)因素,在數(shù)學(xué)上以S3,4表示。在C++中以s[3][4]表示,它代表數(shù)據(jù)73。
定義二維數(shù)組

定義二維數(shù)組的一般形式為:
    類型標(biāo)識符 數(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++對二維數(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)存中先順序存放第一行的元素,再存放第二行的元素。圖表示對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表示對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 />

復(fù)制代碼 代碼如下:
a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]

二維數(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ù)組的范圍。

請嚴(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ù)組的初始化

可以用下面的方法對二維數(shù)組初始化:
1) 分行給二維數(shù)組賦初值。如

   int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};


這種賦初值方法比較直觀,把第1個(gè)花括號內(nèi)的數(shù)據(jù)賦給第1行的元素,第2個(gè)花括號內(nèi)的數(shù)據(jù)賦給第2行的元素……即按行賦初值。

2) 可以將所有數(shù)據(jù)寫在一個(gè)花括號內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如

  int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};


效果與前相同。但以第1種方法為好,一行對一行,界限清楚。用第2種方法如果數(shù)據(jù)多,寫成一大片,容易遺漏,也不易檢查。

3) 可以對部分元素賦初值。如:

  int a[3][4]={{1},{5},{9}};


它的作用是只對各行第1列的元素賦初值,其余元素值自動(dòng)置為0。賦初值后數(shù)組各元素為:

1 0 0 0
5 0 0 0
9 0 0 0


也可以對各行中的某一元素賦初值:

  int a[3][4]={{1},{0,6},{0,0,11}};


初始化后的數(shù)組元素如下:

1 0 0 0
0 6 0 0
0 0 11 0


這種方法對非0元素少時(shí)比較方便,不必將所有的0都寫出來,只需輸入少量數(shù)據(jù)。也可以只對某幾行元素賦初值:

  int a[3][4]={{1},{5,6}};


數(shù)組元素為:

1 0 0 0
5 6 0 0
0 0 0 0


第3行不賦初值。也可以對第2行不賦初值:

  int a[3][4]={{1},{},{9}};

4) 如果對全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時(shí)對第一維的長度可以不指定,但第二維的長度不能省。如:

  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ù)分配存儲空間,一共12個(gè)數(shù)據(jù),每行4列,當(dāng)然可確定為3行。

在定義時(shí)也可以只對部分元素賦初值而省略第一維的長度,但應(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è)方括號的方式,對數(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è)元素的值,以及其所在的行號和列號。

開始時(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; //記下該元素的行號i
      colum=j;//記下該元素的列號j
     }
  cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
  return 0;
}

輸出結(jié)果為

max=56,row=0,colum=3

 

相關(guān)文章

  • C++求兩數(shù)之和并返回下標(biāo)詳解

    C++求兩數(shù)之和并返回下標(biāo)詳解

    這篇文章主要介紹了C++求兩數(shù)之和并返回下標(biāo)題目的代碼詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++深入講解類與封裝的概念與使用

    C++深入講解類與封裝的概念與使用

    我們都知道C++有三大特性:封裝、繼承、多態(tài),現(xiàn)在我們來總結(jié)一下封裝的相關(guān)知識與類的概念,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • C語言約瑟夫環(huán)的實(shí)現(xiàn)

    C語言約瑟夫環(huán)的實(shí)現(xiàn)

    這篇文章主要介紹了C語言約瑟夫環(huán)的實(shí)現(xiàn)的相關(guān)資料,這里主要是利用數(shù)據(jù)數(shù)據(jù)結(jié)果中循環(huán)鏈表來實(shí)現(xiàn),需要的朋友可以參考下
    2017-08-08
  • C++設(shè)計(jì)模式之CRTP的使用

    C++設(shè)計(jì)模式之CRTP的使用

    CRTP全稱是curious?recurring?template?pattern,即奇異遞歸模版模式,是一種c++的設(shè)計(jì)模式,精巧地結(jié)合了繼承和模板編程的技術(shù),下面就跟隨小編一起來學(xué)習(xí)一下CRTP的使用吧
    2023-10-10
  • c語言socket多線程編程限制客戶端連接數(shù)

    c語言socket多線程編程限制客戶端連接數(shù)

    這篇文章主要介紹了c語言socket多線程編程,可以限制客戶端連接數(shù),大家參考使用吧
    2013-12-12
  • C++讀取訪問權(quán)限沖突引發(fā)異常問題的原因分析

    C++讀取訪問權(quán)限沖突引發(fā)異常問題的原因分析

    C語言是一門通用計(jì)算機(jī)編程語言,廣泛應(yīng)用于底層開發(fā),最近在用C++寫代碼時(shí)經(jīng)常會(huì)遇到“引發(fā)了異常: 讀取訪問權(quán)限沖突,所以這篇文章主要給大家介紹了關(guān)于C++讀取訪問權(quán)限沖突引發(fā)異常問題的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 總結(jié)了24個(gè)C++的大坑,你能躲過幾個(gè)

    總結(jié)了24個(gè)C++的大坑,你能躲過幾個(gè)

    這篇文章主要介紹了總結(jié)了24個(gè)C++的大坑,你能躲過幾個(gè),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-05-05
  • C++設(shè)計(jì)模式之Static Factory模式詳解

    C++設(shè)計(jì)模式之Static Factory模式詳解

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之Static Factory模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C語言編程中從密碼文件獲取數(shù)據(jù)的函數(shù)總結(jié)

    C語言編程中從密碼文件獲取數(shù)據(jù)的函數(shù)總結(jié)

    這篇文章主要介紹了C語言編程中從密碼文件獲取數(shù)據(jù)的函數(shù)總結(jié),包括getpw()函數(shù)和getpwnam()函數(shù)以及getpwuid()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++ 組合 (Composition)的介紹與實(shí)例

    C++ 組合 (Composition)的介紹與實(shí)例

    這篇文章主要給大家介紹了關(guān)于C++ 組合(Composition)的相關(guān)資料,組合就是將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對單個(gè)對象和組合對象的使用具有一致性。需要的朋友可以參考下
    2021-05-05

最新評論

巨鹿县| 鲜城| 合肥市| 共和县| 五家渠市| 呈贡县| 绥芬河市| 嘉义县| 三亚市| 哈密市| 海盐县| 桑日县| 揭东县| 罗田县| 盱眙县| 梧州市| 横山县| 中方县| 德江县| 安图县| 安阳县| 潜江市| 松滋市| 万载县| 无极县| 紫金县| 临邑县| 武义县| 潍坊市| 怀化市| 瑞昌市| 花莲县| 宜兰县| 潮安县| 雷山县| 汽车| 山阴县| 迁西县| 和平区| 湘阴县| 西乡县|