int arr[10] = {1,22,30,4,51,6,7,81,9,10};
for(i=1;i<10;i++) scanf("%d",&arr[i]); // 覆蓋初始值!
max=arr[0];
for(i=1;i<10;i++) if(max
scanf 迴圈從 i=1 開始,覆蓋了 arr[1]~arr[9],只剩 arr[0]=1 是初始值。若輸入同樣數字,輸出 81 僅是巧合。
正確版本:分離初始化與輸入
#include
int main() {
int arr[10];
int n = sizeof(arr)/sizeof(arr[0]);
// 方式一:靜態初始化 (無輸入)
// int arr[10] = {1,22,30,4,51,6,7,81,9,10};
// 方式二:鍵盤輸入
printf("請輸入 %d 個整數:", n);
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
// 尋找最大值
int max = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > max) max = arr[i];
printf("最大值:%d\n", max);
return 0;
}
進階:通用尋找最大值函式
int find_max(const int *arr, size_t n) {
if (n == 0) return INT_MIN; // 或錯誤碼
int max = arr[0];
for (size_t i = 1; i < n; i++)
if (arr[i] > max) max = arr[i];
return max;
}
教學重點
- 陣列初始化與輸入互斥,勿混淆。
- 迴圈邊界:
i=0; i 或 i=1; i (配合 max=arr[0])。
- 空陣列防禦:
n==0 情況處理。