陣列的學習與使用

2022-06-06 05:21:08 字數 3414 閱讀 8270

陣列

陣列的引入:

我們引入陣列的目的是為了處理更多的資料,處理更加複雜的問題。

處理更多的資料就讓我們聯想到輸入輸出資料,當輸入輸出多組資料時,可以用之前學過的cin>>…,cout<<…;scanf(),printf();來解決,但是資料多了,就會暴露繁冗不便的弊端,於是我們就引入了陣列。陣列又分為一維陣列,二維陣列,字元陣列等多種形式。

對於一維陣列:

陣列的定義要宣告在main函式之外,那樣陣列才能開得很大,如果在main函式之內,陣列稍大就會異常退出。

其定義格式為:型別識別符號 陣列名[常量表示式]

其陣列名命名規則須與變數名一致,常量表示式表示陣列元素的個數,絕對不能是變數。 陣列的初始化在定義時可以一起完成:

格式:型別識別符號 陣列名[常量表示式]=,可以通過此方式對陣列全部賦值,也可以賦值部分,值1,值2…代表先賦值前面的儲存單元,依次類推。如果對陣列所有元素均賦值為0,可簡寫為:{}。

需要注意的是下標範圍,不能越界,儲存元素從第乙個儲存單位開始儲存,例:int a[10];

第乙個儲存單位為a[0],最後乙個儲存單位為a[9],a[10]不屬於該陣列的空間範圍,超出陣列儲存單位(越界)的儲存元素未知。

當下標在陣列定義範圍內時,下標可以為任意值為整型的表示式,該表示式裡可以包含變數和函式呼叫,通過對陣列下標變數的處理來對陣列元素進行除錯處理,陣列元素可以像同型別的普通變數那樣使用,對其進行賦值、運算等操作。

陣列一般與迴圈結構結合使用,掌握好陣列與迴圈結構的結合才能讓我們更好地解決問題。例如寫入5組資料,可以結合迴圈結構:

for(int i = 1;i<=5;i++)

cin>>a[i];

當然陣列的使用也是有限制的,c++語言中只能逐個引用陣列元素,而不能一次引用整個陣列,例如:int a[100],b[100],a=b;這樣的寫法是非法的。如果要從陣列a中複製k個元素到b組中,可以引用:memcpy(b,a,sizeof(int)*k),當然(int)隨元素的資料型別而改變,如果是浮點數,寫為(double)。如果把陣列a中的元素全部複製到陣列b中,可使用memcpy(b,a,sizeof(a))。使用memcpy函式要包含在標頭檔案cstring中。

對於二維陣列:

一維陣列可以表示一行,那麼二維陣列便可以表示乙個面,即行與列。

其一般格式為:

資料型別 陣列名[常量表示式1][常量表示式2]

例int a[10][10];

其實質為10*10的正方形**,可儲存100個元素,其中第乙個下標表示行數,第二個下標表示列數,即第一行第一列表示為a[0][0],第m行n列表示為a[m-1][n-1]。

二維陣列的初始化:與一維陣列類似,可以將每一行分開寫在各自的括號裡,也可以把所有的資料寫到乙個括號裡,但是並不提倡這種做法,因為資料太多出錯率高且不易檢查。

對於字元陣列:

字元陣列是指元素為字元的陣列,用來存放字串行或字串。

字元與字串幾點區別:

字串有乙個結束符(『\n』),因此字串常量所佔的位元組數等於字串所佔位元組數加1。

字元常量由單引號括起來,字串常量由雙引號括起來。

字元常量只能是單個字元,字串常量可以是多個字元。

字元常量可以賦值給字串常量,反之則不行。

字串使用時,需要注意其輸入輸出形式:

輸入: scanf(「%s」,字串名稱);不可加取位址符&,輸入多個字串時,以空格隔開。當然如果遇到需要輸入一行字串時,可以考慮使用gets(字串名稱);但是gets只能輸入乙個字串,不像scanf以讀取空格為結束,而是以讀取到換行符為結束。兩者各有優點,依情況選取使用。

輸出:輸出時可使用puts(字串名稱);來輸出 ,輸出乙個字串和乙個換行符,例puts(a)等價於printf(「%s\n」,a)。

對於陣列的使用,在一維陣列上可用於多資料的輸入輸出,排序等;在二維陣列上我們也可以研究一些平面上的問題,計算鞍點,處理矩形,甚至可以做貪吃蛇、掃雷等二維平面小遊戲。

舉幾個經典的例子:

一、排序問題,可以分為氣泡排序,插入排序,選擇排序等。

氣泡排序:

for (int i=1; i<=n; ++i) cin>>a[i];                       //輸入數值

for (int j=1; j<=n-1; ++j) //冒泡法排序

for (int i=1; i<=n-j; ++i) //兩兩相比較

if (a[i]函式排序:如果是從小到大按順序排也可以使用函式sort();需要包含在標頭檔案#include 庫中,sort(a,a+n); //兩個引數分別為待排序陣列的首位址和尾位址。

倒置排序:

while(b!=0)

//利用此段將數字倒置,例1234變為4321.

二、對於二維陣列的使用,解決數學問題依然要了解公式或者尋求規律:

例如:正方形與長方形數量問題:

描述設有乙個n*m方格的棋盤(1≤m,n≤100)。

求出該棋盤中包含多少個正方形、多少個長方形(不包括正方形)。

例如:當n=2,m=3時

正方形的個數有8個;

即邊長為1的正方形有6個;

邊長為2的正方形有2個。

長方形的個數有10個

即21的長方形有4個

12的長方形有3個

31的長方形有2個

32的長方形有1個

借用公式:

#includeusing namespace std;

int main()

{ int n,m,i,x=0,y;

cin>>n>>m;

for(i=1;i<=n&&i<=m;i++)

x+=(n-i+1)*(m-i+1);

y=(n+1)*(m+1)*n*m/4;

cout《尋求規律:

#include#includeusing namespace std;

int main()

{ int a[100],b[100];

int n,m,g=0,h=0;

cin>>n>>m;

for(int i=0;i相對來說,還是公式法簡單一些,執行起來節約時間。很多東西都是需要我們尋求規律並結合公式來寫**的。

感悟:

學完陣列之後依然覺得數學思維的重要性,很多東西都是來找規律的,不同的規律,不同的想法編寫的**有難有易,執行起來也有所不同。

例如:求最大公約數,可以乙個個來試,也可以通過輾轉相除(歐幾里得演算法)來解決;查詢資料,可以逐個查詢,也可以通過折半(二分法)來查詢;排序問題更可以用氣泡排序來解決等。

好的規律,好的方法都可以更快更簡便的解決問題,我們現在解決問題的關鍵也是來找到規律,發現規律,很多時候寫**卡住的地方都是卡在了不知道怎麼解決問題,不懂得其中的規律。這也是以後要加強學習的地方。

C語言陣列的學習與使用

陣列 從語義上說就是資料的組合。元素 陣列內存放的單個資料 下標 陣列內的元素所對應在陣列的位置 越界 超出陣列下標的位置進行訪問 定義陣列的語法 陣列內的元素型別 陣列名 陣列的大小 例如int arr 10 陣列的遍歷及訪問陣列內的所有元素 遍歷輸出 int arr 10 int i 0 for...

C 基礎 陣列的認識 學習 與使用

博主近期要發布一些關於c 基礎的內容 比較適用於初學c 的同學,希望對大家有幫助 陣列 應用資料型別的其中一種 概念 儲存一組具有相同型別的資料結構 資料型別 中括號 陣列名 賦值 花括號括起來 裡面放值,逗號隔開多個值 int arr 索引,標記 console.writeline arr 0 動...

陣列與多維陣列的定義與使用

簡述 陣列是可以用於儲存多個相同型別的資料。陣列的定義分三步 建立物件 分配空間 賦值定義 int a 僅定義乙個陣列物件a。a newint 5 int b newint 5 5代表該陣列的長度 int c 在建立物件時就賦值,可以new int,因為數值時系統會自動根據數值長度分配空間使用 陣列...