以下程式碼試圖找出 3×4 矩陣中的最小值及其位置,但輸出結果錯誤:
#include <stdio.h>
int main() {
int a[3][4] = {{1,2,3,4},{9,8,7,6},{-1,-2,3,0}};
int i, j, row, col, min;
min = a[0][0]; // 初始化為第一個元素
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
if (a[i][j] < a[0][0]) { // 錯誤:永遠拿 a[0][0] 比較
min = a[i][j];
row = i;
col = j;
}
printf("min=%d, row=%d, col=%d\n", min, row, col);
return 0;
}
條件判斷 if (a[i][j] < a[0][0]) 永遠與「固定的第一個元素」比較,而非「目前找到的最小值」。導致:
row、col 保持未初始化狀態(亂碼)。a[0][0]=1,比它小的有 -1, -2, 0。迴圈最後一次符合條件的是 a[2][3]=0,故輸出 min=0, row=2, col=3,真正的最小值 -2 被略過。min = a[0][0];
row = 0; col = 0; // 同步記錄位置
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
if (a[i][j] < min) { // 改為與動態更新的 min 比較
min = a[i][j];
row = i;
col = j;
}
尋找極值時,比較對象必須是「目前的極值變數」,而非固定的陣列元素。 同理適用於最大值、總和等累積運算。