數組(Array)是一系列相同類型的數據的集合,可以是一維的、二維的、多維的;最常用的是一維數組和二維數組,多維數組較少用到。
對數組的總結
1) 數組的定義格式為:
type arrayName[length]
type 為數據類型,arrayName 為數組名,length 為數組長度。 需要注意的是:
-
數組長度 length 最好是整數或者常量表達式,例如 10、20*4 等,這樣在所有編譯器下都能運行通過;如果 length 中包含了變量,例如 n、4*m 等,在某些編譯器下就會報錯,我們已在《C語言變長數組》一節專門討論了這點。
-
數組在內存中占用一段連續的空間,數組名表示的是這段內存空間的首地址。
2) 訪問數組中某個元素的格式為:
arrayName[index]
index 為數組下標。注意 index 的值必須大於等於零,並且小於數組長度,否則會發生數組越界,出現意想不到的錯誤,我們已在《C語言數組的靜態性、越界以及溢出》一節重點討論過。
3) 可以對數組中的單個元素賦值,也可以整體賦值,例如:
// 對單個元素賦值
int a[3];
a[0] = 3;
a[1] = 100;
a[2] = 34;
// 整體賦值(不指明數組長度)
float b[] = { 23.3, 100.00, 10, 0.34 };
// 整體賦值(指明數組長度)
int m[10] = { 100, 30, 234 };
// 字符數組賦值
char str1[] = "http://c.biancheng.net";
// 將數組所有元素都初始化為0
int arr[10] = {0};
char str2[20] = {0};
數組應用舉例
【示例1】求一個整型數組中的最大值和最小值。
#include <stdio.h>
int main(){
int a[10] = {0}, max, min, i;
//從控制台獲取用戶輸入並賦值給數組元素
for(i=0; i<10; i++){
scanf("%d", &a[i]);
}
//假設a[0]是最大值也是最小值
max = a[0], min = a[0];
for(i=1; i<10; i++){
if(a[i] > max){
max = a[i];
}
if(a[i] < min){
min = a[i];
}
}
printf("The max is %d, The min is %d\n", max, min);
return 0;
}
運行結果:
2 123 45 100 575 240 799 710 10 90↙
The max is 799, The min is 2
這段代碼有兩點需要說明:
1) 從控制台獲取數組元素時,我們一次性輸入10個整數才按下回車鍵,而不是每輸入一個整數就按一次回車鍵,這正是利用了標准輸入緩沖區。
關於緩沖區的知識,我們已在《C語言緩沖區(緩存)詳解》和《結合C語言緩沖區談scanf()函數》兩節進行了詳細講解。
2) 要想求得數組中的最大值和最小值,就得循環比較數組中的所有元素,並設置兩個變量 max 和 min 來接收。以最大值為例,開始循環之前,先假設第0個元素是最大值(當然你也可以假設第1、2、3 個元素),然後用 max 和數組中剩余的元素進行比較,如果某個元素的值比 max 大,就用這個元素的值替換 max 的值,等把所有元素遍歷完了,max 中就是最大值了。
關於排序和查找
學完了數組,有兩個重要的知識點要求大家掌握,那就是排序(Sort)和查找(Search),比如:
-
給你 10 個打亂順序的整數,要能夠按照從小到大或者從大到小的順序輸出;
-
給定一個字符串 str1,以及一個子串 str2,要能夠判斷 str2 是否在 str1 中。
排序和查找的方法有很多種,我們把它們設置成了單獨的一章進行講解,請查看:C語言排序和查找