本程序實現:從鍵盤輸入 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)。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 返回值確保讀取成功。