首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言求解 4×4 矩陣最大最小值及主對角線元素和

     編輯:關於C語言

4×4 矩陣綜合操作

本程序實現:從鍵盤輸入 4×4 整數矩陣,查找最大/最小值及其坐標,計算主對角線與副對角線元素之和。

完整代碼

#include <stdio.h>

#define N 4

int main() {
    int a[N][N];
    int i, j;
    int max, min;
    int max_row, max_col, min_row, min_col;
    int sum_diag = 0;

    // 1. 輸入矩陣
    printf("請輸入 %dx%d 矩陣元素 (共 %d 個整數):\n", N, N, N*N);
    for (i = 0; i < N; ++i) {
        for (j = 0; j < N; ++j) {
            scanf("%d", &a[i][j]);
        }
    }

    // 2. 初始化最大最小值為第一個元素
    max = min = a[0][0];
    max_row = max_col = min_row = min_col = 0;

    // 3. 遍歷查找最大最小值及坐標
    for (i = 0; i < N; ++i) {
        for (j = 0; j < N; ++j) {
            if (a[i][j] > max) {
                max = a[i][j];
                max_row = i; max_col = j;
            }
            if (a[i][j] < min) {
                min = a[i][j];
                min_row = i; min_col = j;
            }
        }
    }

    // 4. 計算兩條對角線元素和
    // 主對角線: i == j
    // 副對角線: i + j == N - 1
    for (i = 0; i < N; ++i) {
        for (j = 0; j < N; ++j) {
            if (i == j || i + j == N - 1) {
                sum_diag += a[i][j];
            }
        }
    }
    // 注意:中心元素 (若 N 為奇數) 會被加兩次,題目通常要求「兩條對角線元素之和」即包含重疊。
    // 若要求不重複計算中心,需判斷 i==j && i+j==N-1 時只加一次。

    // 5. 輸出結果
    printf("最大值: %d, 位置: (%d, %d)\n", max, max_row, max_col);
    printf("最小值: %d, 位置: (%d, %d)\n", min, min_row, min_col);
    printf("兩條主對角線元素之和: %d\n", sum_diag);

    return 0;
}

關鍵邏輯解析

坐標記錄

使用 max_row, max_col 等變量在更新極值時同步記錄坐標。初始化為 (0,0) 配合首元素極值,避免未初始化風險。

對角線判斷條件

  • 主對角線:行索引等於列索引 (i == j),即 (0,0)、(1,1)、(2,2)、(3,3)。
  • 副對角線:行索引加列索引等於 N-1 (i + j == N - 1),即 (0,3)、(1,2)、(2,1)、(3,0)。

合並條件:if (i == j || i + j == N - 1)。4×4 矩陣無中心重疊元素,故無需去重。

測試示例

輸入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

輸出:
最大值: 16, 位置: (3, 3)
最小值: 1, 位置: (0, 0)
兩條主對角線元素之和: 68
// 計算: 主對角線 1+6+11+16=34, 副對角線 4+7+10+13=34, 總和 68

擴展建議

  • 使用 #define N 4 便於修改矩陣階數。
  • 輸入驗證:檢查 scanf 返回值確保讀取成功。
  • 若矩陣極大,考慮單次遍歷同時完成極值查找與對角線求和,減少遍歷次數(本題規模小無關緊要)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved