陣列元素是構成陣列的基本單位,本質上是變數。其表示格式為:陣列名[下標],其中下標僅能為整數常數或整數運算式(浮點數會自動截斷取整)。
// 正確:逐元素輸出
for (i = 0; i < 10; i++) printf("%d", a[i]);
// 錯誤:嘗試整體輸出
printf("%d", a); // 編譯錯誤
void main() {
int i, a[10];
for (i = 0; i < 10; i++)
a[i++] = 2 * i + 1; // 下標使用 i++ 運算式
for (i = 9; i >= 0; i--)
printf("%d", a[i]); // 逆序輸出奇數
printf("\n%d %d\n", a[5.2], a[5.8]); // 下標非整數自動取整,皆輸出 a[5]
}
程式展示:下標可為運算式(i++)、浮點數自動截斷(5.2 → 5、5.8 → 5)。
語法:static 型態 陣列名[常數運算式] = {值, 值...};
限制:僅靜態儲存類別(static、外部)陣列可初始化。
static int a[10] = {0,1,2,3,4}; → a[0]~a[4] 為 0~4,a[5]~a[9] 為 0static int a[10] = {1,1,1,1,1,1,1,1,1,1}; ✓static int a[10] = 1; ✗static int a[] = {1,2,3,4,5}; 自動推斷長度為 5void main() {
int i, max, a[10];
printf("input 10 numbers:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]); // 逐元素輸入
max = a[0];
for (i = 1; i < 10; i++)
if (a[i] > max) max = a[i];
printf("maximum=%d\n", max);
}
演算法:先假設首元素為最大值,逐一比較更新。
void main() {
int i, j, p, q, s, a[10];
printf("\n input 10 numbers:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
for (i = 0; i < 10; i++) {
p = i; q = a[i]; // 記錄目前位置與值
for (j = i + 1; j < 10; j++) // 尋找剩餘最大值
if (q < a[j]) { p = j; q = a[j]; }
if (i != p) { // 需交換
s = a[i];
a[i] = a[p];
a[p] = s;
}
printf("%d", a[i]); // 輸出已排序元素
}
}
邏輯解析:外層迴圈決定第 i 位置的最終值;內層在 i+1~9 尋找最大值及其索引 p;若 p ≠ i 則交換。單層迴圈完成輸入、排序、輸出三合一。