C基礎5 陣列和字串

2021-10-06 20:47:29 字數 3764 閱讀 1802

0.陣列型別 是 由多個元素的組合。

這多個元素的資料型別必須完全一樣。

1.陣列是乙個構造型別,也是最基礎的構造型別了。

2.陣列的個數如下

char a[5]

; char 是所有元素的資料型別。全部都是char

a是陣列名,a是常量(但是不能執行a++

/a--

/++a/

--a)

[5] 陣列有五個成員,分別是:

a[0] a[

1] a[

2] a[

3] a[4]

//2020-8-27 上次聽別人講,陣列也可以認為是指標,

//因為他代表的也是位址,但是他不可以像指標一樣進行加減的操作。

3.陣列在記憶體上是連續的.

4.陣列不會對越界進行檢查

a[5]

=10;/*編譯器不會包錯誤,但是記憶體已經越界了

( 因為char a[5] 最大是a[4])

這個在《c陷阱與缺陷》講解的比較清晰

*/5.陣列名就是陣列的首位址

(這個很類似指標,所以有時候,也講 陣列是指標)

6.a+

1&a+

1&a[0]

+1 移動的為對應型別的大小。

陣列賦值:

1.定義時候賦值

int a[5]

=;

int a[5]

=;int a[5]

=;

int a=

;//陣列大小根據初始化的元素的個數決定

2.先定義後賦值

int a[5]

;for

(i=0

; i<

5; i++)

遍歷:

for(i=0

; i<

sizeof

(a)/

sizeof

(a[0])

; i++

)

練習:

1.從終端上輸入10元素,將這十個元素排序(冒泡)

輸入:10301

53448

16100

25 輸出:145

8101625

3034

100

氣泡排序:

拿相鄰的兩個元素進行比較,如果前面的元素大於後面的

元素,讓這兩個元素進行交換位置,否則不交換。

2.快速排序(對氣泡排序的優化)

原理(個人):以第乙個數作為軸線,從右向左比較如果後者小就二者交換,如果遇到

交換就變換方向,從左向右比較,如果左側值大於軸線值則交換,並在此改變比較方向。

第一輪比較的結果為軸線左邊的全部小於軸線值,軸線右邊的全部大於軸線值。然後遞迴

再從左側選出軸線,從右側選出軸線,依次比較即可。

1.選擇軸值,一般是選取第乙個元素的關鍵碼。有乙個快排的最壞情況就是如果待

排序元素是正序或者逆序,就會將除軸值以外的元素分到軸值的一邊。

2.劃分

①、設定劃分區間:i=first,j=end

②、執行右側掃瞄,直到r[j]小於軸值,將r[j]與r[i]交換,i++

③、執行左側掃瞄,直到r[i]大於軸值,將r[i]與r[j]交換,j–

④、重複二到三直到i=j,確定看軸值的所在位置,返回該位置

注意:1.陣列名是常量 杜絕a++

; 可以a+

12.陣列不會對越界檢查

練習:1.從終端上輸入10元素,將這十個元素排序(冒泡)

輸入:10301

53448

16100

25

輸出:145

8101625

3034

100

氣泡排序:

拿相鄰的兩個元素進行比較,如果前面的元素大於後面的

元素,讓這兩個元素進行交換位置,否則不交換。

int i,j;

i 比較的趟數 n-1

; j 同一趟內比較的次數 n-1

- i

2.使用選擇排序

每次從陣列中取出第乙個元素和後面每乙個元素進行比較,

迴圈一次後找到最小數的下標,然後迴圈一輪後進行數值的

交換,直到所有的數都被遍歷一遍。

int i,j;

i 比較的趟數 n-1

; j 同一趟內比較的次數 起始條件i+

1 結束條件n

int [2]

; int a[3]

[2];

||行數 列數

a[0] 行 a[0]

[0] a[0]

[1] a[1]

a[1]

[0] a[1]

[1] a[2]

a[2]

[0] a[2]

[1]

初始化1.定義時初始化

int a[3]

[2]=

; int a[3]

[2]=

,,};

int a[3]

[2]=

; int a[3]

[2]=

,,};

int a[

2]=,

,};

注意:1.行號可以省略,列號不能省略

2.二維陣列名也是乙個常量,它不能做如下操作a++

2.先定義後初始化

int a[3]

[2];

for(i=

0;i<

3;i++

)

練習:1.列印楊輝三角(前10行)

1111211

3311

4641

151010

51

int a[10]

[10]2.輸入12個數,找到最大數的橫座標和縱座標

int [4]

[3];

char a[3]

; a[

0] a[

1] a[2]

賦值方式

char a=

; char b[10]

="hello";

遍歷方式

for(i=0

; i<

10; i++

)puts(""

);printf

("%s\n"

,a);

//%s遇到'\0'才會結束

練習:1.拷貝strcpy //將乙個陣列的內容拷貝到另外乙個陣列中

2.追加strcat //將乙個陣列的內容追加到另外乙個陣列的尾部

3.比較strcmp

4.長度strlen

char a[10]

[10];

char a[

10]=,

,};for

(i=0

; i<

3; i++

)for

(i=0

; i<

3; i++

)puts(""

);}

2020-8-27

回首再看這一章,陳旭,你發現了什麼?

陣列是使用最多的乙個了。

在後面的結構體中,在結構體中加入陣列元素,也是非常的常見的一種思路。我需要做什麼?我可能需要先學習一段時間了,這樣是最好的選擇。

5 陣列和字串

陣列就是在記憶體中連續的相同型別的變數空間 同乙個陣列所有的成員都是相同的資料型別,同時所有的成員在記憶體中的位址是連續的。乙個陣列可以分解為多個陣列元素 這些陣列元素可以是基本資料型別或構造型別。按陣列元素型別的不同,陣列可分為 數值陣列 字元陣列 指標陣列 結構陣列等類別。通常情況下,陣列元素下...

C 基礎之字元陣列和字串

無意中發現了乙個很有意思的技術型別小品文系列,通過大牛指導菜鳥的方式,講解講c 知識,有的很基礎卻是開發中容易忽略的地方。elminster的專欄 solmyr 的小品文系列之一 字串放在 至此,給出鏈結,原文就不貼了,總結並擴充套件一下方便以後回顧。字元陣列 char 是元素為字元變數的陣列,字串...

C 基礎之字元陣列和字串

無意中發現了乙個很有意思的技術型別小品文系列,通過大牛指導菜鳥的方式,講解講c 知識,有的很基礎卻是開發中容易忽略的地方。elminster的專欄 solmyr 的小品文系列之一 字串放在 至此,給出鏈結,原文就不貼了,總結並擴充套件一下方便以後回顧。字元陣列 char 是元素為字元變數的陣列,字串...