在C語言中,將一個 N×N 的方陣進行轉置(行列互換)是常見的陣列操作。本文提供一個完整、可直接編譯執行的程式範例,並詳細解釋核心邏輯。
#define N 5
#include <stdio.h>
int main() {
int a[N][N] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
int i, j, temp;
printf("轉置前:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) printf("%4d", a[i][j]);
printf("\n");
}
// 核心轉置邏輯:只遍歷主對角線下方(或上方)的元素進行交換
for (i = 1; i < N; ++i) {
for (j = 0; j < i; ++j) {
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
printf("\n轉置後:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) printf("%4d", a[i][j]);
printf("\n");
}
return 0;
}
i 從 1 開始,內層 j 從 0 到 i-1。這確保只處理主對角線下方的元素,避免重複交換導致資料還原。temp 進行三步驟交換,這是標準的無額外空間交換法。i == j 時位於主對角線,轉置後位置不變,故迴圈設計天然跳過。程式會輸出轉置前後的矩陣對比,清晰驗證行列是否正確互換。