或許有同學看過或聽過陣列是一串的變數,
不免心中有疑問,不就有變數可用了,為何還要有陣列?
因為若要處理「大量」的變數,
而又想有規則的去控制這些變數或數值,陣列剛好符合這需求。
比如,如果我們要讀入5個數字,並以相反順序列印出來。
照之前所學方法,可能作法如下:
main()
{ int a1, a2, a3, a4, a5;
scanf("%d %d %d %d %d", &a1, &a2, &a3, &a4, &a5);
printf("%d %d %d %d %d'', a5, a4, a3, a2, a1);
}
是不是蠻冗長和困難?
如果數量換成讀入50個數值,並反向印出,是不是更繁瑣呢?
譬如,撰寫一個撲克牌發牌程式,至少需宣告13個變數才夠用。
或如要處理一個班30人的學生成績,就得宣告30個變數來記錄。
陣列正是要簡化這情況的一種語法。
C提供的陣列結構,簡單來說,
就是向記憶體要求連續的位置,來放置一串的變數;
並使用索引,來存取這一個陣列的元素。
一維陣列的語法格式:
資料型態 陣列名稱 [
陣列大小 ]
例如:
float student[30];
表示宣告了一個名為 student 的陣列,
中括號內的數值,表示陣列中可使用的個數,也可稱為陣列索引。
所以,此陣列共有30個float型態的元素,也就是有30個可存浮點數的變數可以使用。
第一個陣列元素為 student[0],最後一個為 student[29]。
第一個陣列元素的索引值設定是零(0),
如下圖:
student[0] |
student[1] |
student[2] |
student[3] |
student[4] |
..... |
student[27] |
student[28] |
student[29] |
86.3 |
88.4 |
82.5 |
83.1 |
84.7 |
... |
87.2 |
81.5 |
90.3 |
也就是使用陣列運算時,索引值不能超過當初宣告的數值,
譬如使用student[30]、student[31]或 student[-1],都會造成錯誤。
而陣列索引,是控制陣列的一個重要關鍵。
我們可以使用迴圈重複結構,將陣列每個變數設定初始值,
範例1:
#include <stdio.h>
#include <stdlib.h>
main()
{
int array[10];
int n=0, i;
array[0]=10;
for(i=0; i<=10; i++){ /* 利用迴圈印出陣列
*/
printf("array[%d]=%d\n", i,
array[i]);
}
}
請問執行的結果為何?
陣列的初始化!
練習1: 請用上述範例概念,利用索引值,將此陣列存入10, 20, 30, 40, ..., 100
#include <stdio.h>
#include <stdlib.h>
main()
{
int array[10];
int n=0, i;
/*
for(i=0; i<=10; i++){
//如何利用迴圈,將數值放入陣列...
}
*/
for(i=0; i<10; i++){ //利用迴圈印出陣列
printf("array[%d]=%d\n", i,
array[i]);
}
}
請修改上述程式碼,讓陣列可印出其要求?
練習:
#include
<stdio.h>
main()
{
int array[5];
int i;
for(i=0; i<=4; ++i) scanf("%d", &array[i]);
for(i=4; i>=0; --i) printf("%d", array[i]);
printf("\n");
}
請分別輸入5個整數,空格隔開,最後按Enter後,看看結果會發生什麼?
- 實作1:
請寫一個程式,輸入數列個數,
按照數入的數字,輸出此數字個數的數列長度(1 1 2 3
5 8 13 ...)
測資一:
Input serial number: 2
1 1
測資二:
Input serial number: 5
1 1 2 3 5
- 實作2:
檢查陣列中,是否有和為零的情況。