亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

  int a[10];


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

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

2) 用方括號括起來的常量表達式表示下標(biāo)值,如下面的寫法是合法的:

  int a[10];
  int a[2*5];
  int a[n*2]; //假設(shè)前面已定義了n為常變量

3) 常量表達式的值表示元素的個數(shù),即數(shù)組長度。例如,在“int a[10];”中,10表示a數(shù)組有10個元素,下標(biāo)從0開始,這10個元素是: a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7], a[8],a[9]。注意最后一個元素是a[9]而不是a[10]。

4) 常量表達式中可以包括常量、常變量和符號常量,但不能包含變量。也就是說,C++不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組的大小不依賴于程序運行過程中變量的值。例如,下面這樣定義數(shù)組是不行的:

  int n;
  cin>>n; //輸入a數(shù)組的長度
  int a[n]; //企圖根據(jù)n的值決定數(shù)組的長度


如果把第1,2行改為下面一行就合法了:

  const int n=5;


引用一維數(shù)組的元素

數(shù)組必須先定義,然后使用。只能逐個引用數(shù)組元素的值而不能一次引用整個數(shù)組中的全部元素的值。

數(shù)組元素的表示形式為:
    數(shù)組名[下標(biāo)]
下標(biāo)可以是整型常量或整型表達式。例如:

  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;
}

運行結(jié)果如下:

9 8 7 6 5 4 3 2 1 0

程序使a[0]~a[9]的值為0~9,然后按逆序輸出。
一維數(shù)組的初始化

1) 在定義數(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) 如果想使一個數(shù)組中全部元素值為1,可以寫成:

  int a[10]={1,1,1,1,1,1,1,1,1,1};


不能寫成

  int a[10]={1*10};


不能給數(shù)組整體賦初值。

4) 在對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。例如:

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


可以寫成

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


一維數(shù)組程序舉例

【例】用數(shù)組來處理求Fibonacci數(shù)列問題。

可以用20個元素代表數(shù)列中的20個數(shù),從第3個數(shù)開始,可以直接用表達式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時,f[2]=f[0]+f[1],依此類推
  for(i=0;i<20;i++) //此循環(huán)的作用是輸出20個數(shù)
  {
   if(i%5==0) cout<<endl; //控制換行,每行輸出5個數(shù)據(jù)
   cout<<setw(8)<<f[i]; //每個數(shù)據(jù)輸出時占8列寬度
  }
  cout<<endl; //最后執(zhí)行一次換行
  return 0;
}

運行結(jié)果如下:


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

起泡法的思路是:將相鄰兩個數(shù)比較,將小的調(diào)到前頭。見圖5.2。然后進行第2趟比較,對余下的前面5個數(shù)按上法進行比較,見圖。



可以推知,如果有n個數(shù),則要進行n-1趟比較(和交換)。在第1趟中要進行n-1次兩兩比較,在第j趟中要進行n-j次兩兩比較。

根據(jù)以上思路寫出程序,今設(shè)n=10,本例定義數(shù)組長度為11,a[0]不用,只用a[1]~a[10],以符合人們的習(xí)慣。從前面的敘述可知,應(yīng)該進行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++) //共進行9趟比較
   for(i=1;i<=10-j;i++)//在每趟中要進行(10-j)次兩兩比較
     if (a[i]>a[i+1]) //如果前面的數(shù)大于后面的數(shù)
     {
      t=a[i];a[i]=a[i+1];a[i+1]=t;
     }//交換兩個數(shù)的位置, 使小數(shù)上浮
  cout<<"the sorted numbers :"<<endl;
  for(i=1;i<11;i++) //輸出10個數(shù)
   cout<<a[i]<<" ";
  cout<<endl;
  return 0;
}

運行情況如下:

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ù)組
具有兩個下標(biāo)的數(shù)組稱為二維數(shù)組。有些數(shù)據(jù)要依賴于兩個因素才能惟一地確定,例如有3個學(xué)生,每個學(xué)生有4門課的成績,顯然,成績數(shù)據(jù)是一個二維表,如書中表所示。


想表示第3個學(xué)生第4門課的成績,就需要指出學(xué)生的序號和課程的序號兩個因素,在數(shù)學(xué)上以S3,4表示。在C++中以s[3][4]表示,它代表數(shù)據(jù)73。
定義二維數(shù)組

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

  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ù)組:它的元素又是一個一維數(shù)組。例如,可以把a看作是一個一維數(shù)組,它有3個元素:a[0],a[1],a[2],每個元素又是一個包含4個元素的一維數(shù)組,見圖5.4。a[0],a[1],a[2]是3個一維數(shù)組的名字。


上面定義的二維數(shù)組可以理解為定義了3個一維數(shù)組,即相當(dāng)于:

  float a[0][4], a[1][4], a[2][4];


此處把a[0],a[1],a[2]作一維數(shù)組名。C++的這種處理方法在數(shù)組初始化和用指針表示時顯得很方便,這在以后會體會到。

C++中,二維數(shù)組中元素排列的順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。圖表示對a[3][4]數(shù)組存放的順序。

上面定義的二維數(shù)組可以理解為定義了3個一維數(shù)組,即相當(dāng)于:

  float a[0][4], a[1][4], a[2][4];


此處把a[0],a[1],a[2]作一維數(shù)組名。C++的這種處理方法在數(shù)組初始化和用指針表示時顯得很方便,這在以后會體會到。

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個元素。多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。例如,上述三維數(shù)組的元素排列順序為:

復(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)可以是整型表達式,如a[2-1][2*2-1]。不要寫成a[2,3],a[2-1,2*2-1]形式。

數(shù)組元素是左值,可以出現(xiàn)在表達式中,也可以被賦值,例如:

  b[1][2]=a[2][3]/2;


在使用數(shù)組元素時,應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。常出現(xiàn)的錯誤是:

  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ū)分在定義數(shù)組時用的a[3][4]和引用元素時的a[3][4]的區(qū)別。前者a[3][4]用來定義數(shù)組的維數(shù)和各維的大小,后者a[3][4]中的3和4是下標(biāo)值,a[3][4]代表某一個元素。
二維數(shù)組的初始化

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

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


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

2) 可以將所有數(shù)據(jù)寫在一個花括號內(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列的元素賦初值,其余元素值自動置為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元素少時比較方便,不必將所有的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ù)組時對第一維的長度可以不指定,但第二維的長度不能省。如:

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

在定義時也可以只對部分元素賦初值而省略第一維的長度,但應(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ù)組元素時采用a[][]這種兩個方括號的方式,對數(shù)組初始化時十分有用,它使概念清楚,使用方便,不易出錯。
二維數(shù)組程序舉例

【例】將一個二維數(shù)組行和列元素互換,存到另一個二維數(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;
}

運行結(jié)果如下:

array a:
 1 2 3
 4 5 6
array b:
 1 4
 2 5
 3 6

【例】有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。

開始時把a[0][0]的值賦給變量max,然后讓下一個元素與它比較,將二者中值大者保存在max中,然后再讓下一個元素與新的max比,直到最后一個元素比完為止。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開始時取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語言代碼詳細描述順序線性表

    C語言代碼詳細描述順序線性表

    這篇文章主要用代碼介紹了C語言線性表的順序線性表,對于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的朋友很有參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學(xué)習(xí)筆記

    C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學(xué)習(xí)筆記

    這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • C/C++中的內(nèi)存管理小結(jié)

    C/C++中的內(nèi)存管理小結(jié)

    這篇文章主要介紹了C/C++中的內(nèi)存管理小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C/C++編寫推箱子小游戲

    C/C++編寫推箱子小游戲

    這篇文章主要為大家詳細介紹了C/C++編寫推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++中實現(xiàn)子進程執(zhí)行和管道通信詳解

    C++中實現(xiàn)子進程執(zhí)行和管道通信詳解

    在這篇博客中,我們將深入探索如何在 C++ 程序中實現(xiàn)子進程的創(chuàng)建與執(zhí)行,以及父子進程間的管道通信,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Objective-C不帶加減號的方法實例

    Objective-C不帶加減號的方法實例

    顯而易見的事實是,Objective-C 中,+ 表示類方法,- 表示實例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語言實現(xiàn)簡易停車場管理系統(tǒng)

    C語言實現(xiàn)簡易停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實現(xiàn)方法示例

    C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實現(xiàn)方法示例

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實現(xiàn)方法,結(jié)合實例形式分析了C語言平衡二叉樹的相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-01-01
  • C++中的Reactor原理與實現(xiàn)

    C++中的Reactor原理與實現(xiàn)

    reactor設(shè)計模式是event-driven?architecture的一種實現(xiàn)方式,處理多個客戶端并發(fā)的向服務(wù)端請求服務(wù)的場景,每種服務(wù)在服務(wù)端可能由多個方法組成,這篇文章主要介紹了Reactor原理與實現(xiàn),需要的朋友可以參考下
    2022-07-07
  • Python HTTP服務(wù)搭建顯示本地文件

    Python HTTP服務(wù)搭建顯示本地文件

    這篇文章主要介紹了Python HTTP服務(wù)搭建顯示本地文件的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論