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

C語言實現矩陣轉置的完整指南與代碼示例

     編輯:C 語言問答

矩陣轉置基礎概念

矩陣轉置是將矩陣的行與列互換操作。若原矩陣為 m×n,轉置後變為 n×m。這是線性代數與科學計算中的基礎運算,C語言通過二維數組即可高效實現。

核心代碼實現

// Transpose
#include <stdio.h>
#define MAX 20

int m, n;

void transpose(double a[][MAX], double b[][MAX]) {
    int i, j;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            b[j][i] = a[i][j];
        }
    }
}

int main() {
    int i, j;
    double a[MAX][MAX], b[MAX][MAX];

    puts("Please input the dimensions of the matrix (e.g., 2 3):");
    scanf("%d %d", &m, &n);

    puts("Enter the matrix elements row by row:");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%lf", &a[i][j]);
        }
    }

    transpose(a, b);

    puts("The Transpose result:");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            // 整數顯示為整數,浮點數保留小數
            if (b[i][j] - (int)b[i][j] != 0)
                printf("%lf ", b[i][j]);
            else
                printf("%d ", (int)b[i][j]);
        }
        puts("");
    }
    return 0;
}

關鍵點解析

  • 動態維度:使用全局變量 m, n 記錄實際輸入的行列數,避免固定 MAX 造成資源浪費。
  • 轉置邏輯:b[j][i] = a[i][j] 完成行列互換,注意循環邊界用實際維度 m, n 而非 MAX。
  • 輸出格式化:判斷小數部分是否為零,決定用 %d 或 %lf 輸出,提升可讀性。

常見錯誤與優化建議

  1. 原代碼中轉置函數循環至 MAX 會導致未初始化區域被複製,已修正為 m, n。
  2. 建議加入輸入合法性檢查(如 m, n > 0 且 <= MAX)。
  3. 大型矩陣可改用動態內存分配(malloc/free)突破 MAX 限制。

擴展應用

矩陣轉置是矩陣乘法、協方差計算、圖像處理(如旋轉90度)等演算法的基石。掌握此操作有助於理解更複雜的數值計算庫(如 BLAS、Eigen)的底層邏輯。

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