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

C 語言判斷上三角矩陣:邊界檢查、迴圈條件與輸出邏輯修正

     編輯:程式設計綜合問答

輸入 n (1≤n≤6) 及 n×n 矩陣,判斷是否為上三角矩陣 (主對角線以下元素皆為 0)。原始代碼存在**陣列下標越界、迴圈邏輯反向、輸出重複**三大問題。

原始代碼問題分析


int a[6][6];
for(i=1; i<=n; i++) {           // ❌ 1-based 索引,n=6 時 a[6][6] 越界 (合法 0~5)
  for(j=1; j<=n; j++) scanf("%d", &a[i][j]);
}
for(i=1; i<=n; i++) {
  for(j=n; j>=i; j--) {         // ❌ 條件錯誤:應檢查 j < i (主對角線以下)
    if (a[i][j] = 0) {          // ❌ 單一等號 = 賦值,非比較 ==
      printf("NO"); break;
    } else printf("YES");       // ❌ 每個元素都輸出一次,應整體判斷後單一輸出
  }
}

修正版完整程式碼


#include 
#include 

int main() {
    int n, i, j;
    int a[6][6] = {0}; // 初始化為 0

    printf("Input n: ");
    if (scanf("%d", &n) != 1 || n < 1 || n > 6) {
        printf("Invalid n\n");
        return 1;
    }

    printf("Input array:\n");
    // ✅ 0-based 索引
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    // ✅ 判斷邏輯:主對角線以下 (行 > 列) 必須為 0
    bool isUpper = true;
    for (i = 0; i < n; i++) {
        for (j = 0; j < i; j++) { // j < i 即主對角線以下
            if (a[i][j] != 0) {   // ✅ 使用 != 比較
                isUpper = false;
                break;
            }
        }
        if (!isUpper) break;
    }

    // ✅ 單一輸出
    printf("%s\n", isUpper ? "YES" : "NO");
    return 0;
}

關鍵修正點總結

問題原寫法修正影響
陣列下標1-based (1~n)0-based (0~n-1)避免越界未定義行為
判斷區域j >= i (含對角線及以上)j < i (嚴格主對角線以下)符合上三角矩陣定義
比較運算子`=` (賦值)`!=` (不等於)邏輯正確性
輸出控制迴圈內每次輸出旗標法,迴圈後單一輸出輸出格式正確
布林型別無stdbool.h + bool語意清晰、可攜性佳

測試用例驗證


Input n: 3
Input array:
1 2 3
0 4 5
0 0 6
Output: YES

Input n: 3
Input array:
1 2 3
4 5 6
7 8 9
Output: NO  (a[1][0]=4 ≠ 0)

進階:支援任意大小動態分配


int **a = malloc(n * sizeof(int*));
for (i = 0; i < n; i++) a[i] = calloc(n, sizeof(int));
// ... 判斷邏輯相同 ...
for (i = 0; i < n; i++) free(a[i]);
free(a);

總結

C 語言矩陣題核心陷阱:**0-based 索引、正確判斷區域、賦值 vs 比較、單一輸出**。養成「先寫邊界、再寫邏輯、最後驗證輸出」習慣,即可避開 90% 陣列操作錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved