首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言二維數組求最大最小值及下標的初始化陷阱

     編輯:程式設計疑難解答

錯誤代碼片段

int max = 0, min = 0; // 錯誤初始化
for (int i = 0; i < r; i++) {
    for (int j = 0; j < c; j++) {
        scanf("%d", &a[i][j]);
        if (min > a[i][j]) { min = a[i][j]; min_i = i; min_j = j; }
        if (max < a[i][j]) { max = a[i][j]; max_i = i; max_j = j; }
    }
}

問題分析

將 max 和 min 初始化為 0 導致:

  • 全正數數組:min 永遠為 0(實際最小值 > 0)
  • 全負數數組:max 永遠為 0(實際最大值 < 0)

正確初始化方式

// 讀取第一個元素後初始化
scanf("%d", &a[0][0]);
int max = a[0][0], min = a[0][0];
int max_i = 0, max_j = 0, min_i = 0, min_j = 0;

// 從第二個元素開始比較
for (int i = 0; i < r; i++) {
    for (int j = 0; j < c; j++) {
        if (i == 0 && j == 0) continue; // 跳過第一個
        scanf("%d", &a[i][j]);
        if (a[i][j] > max) { max = a[i][j]; max_i = i; max_j = j; }
        if (a[i][j] < min) { min = a[i][j]; min_i = i; min_j = j; }
    }
}

通用模式

bool first = true;
for (...) {
    for (...) {
        scanf("%d", &val);
        if (first) {
            max = min = val;
            max_i = min_i = i;
            max_j = min_j = j;
            first = false;
        } else {
            if (val > max) { max = val; max_i = i; max_j = j; }
            if (val < min) { min = val; min_i = i; min_j = j; }
        }
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved