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

C++ 矩陣運算課程設計:加減乘除轉置完整實現

     編輯:程式設計綜合問答

需求

  • 二維數組存儲矩陣
  • 輸入/輸出矩陣
  • 加減乘除(維度檢查)
  • 轉置

核心代碼

#include <iostream>
#include <vector>
using namespace std;

using Matrix = vector<vector<double>>;

Matrix readMatrix(int r, int c) {
    Matrix m(r, vector<double>(c));
    for (int i = 0; i < r; ++i)
        for (int j = 0; j < c; ++j)
            cin >> m[i][j];
    return m;
}

void printMatrix(const Matrix& m) {
    for (auto& row : m) {
        for (auto v : row) cout << v << '\t';
        cout << '\n';
    }
}

Matrix add(const Matrix& a, const Matrix& b) {
    int r = a.size(), c = a[0].size();
    Matrix res(r, vector<double>(c));
    for (int i = 0; i < r; ++i)
        for (int j = 0; j < c; ++j)
            res[i][j] = a[i][j] + b[i][j];
    return res;
}

Matrix mul(const Matrix& a, const Matrix& b) {
    int r = a.size(), c = b[0].size(), k = a[0].size();
    Matrix res(r, vector<double>(c, 0));
    for (int i = 0; i < r; ++i)
        for (int j = 0; j < c; ++j)
            for (int p = 0; p < k; ++p)
                res[i][j] += a[i][p] * b[p][j];
    return res;
}

Matrix transpose(const Matrix& a) {
    int r = a.size(), c = a[0].size();
    Matrix res(c, vector<double>(r));
    for (int i = 0; i < r; ++i)
        for (int j = 0; j < c; ++j)
            res[j][i] = a[i][j];
    return res;
}

主程序邏輯

int main() {
    int r1, c1, r2, c2;
    cout << "Matrix A rows cols: "; cin >> r1 >> c1;
    auto A = readMatrix(r1, c1);
    cout << "Matrix B rows cols: "; cin >> r2 >> c2;
    auto B = readMatrix(r2, c2);

    if (r1 == r2 && c1 == c2) {
        cout << "A+B:\n"; printMatrix(add(A,B));
        cout << "A-B:\n"; printMatrix(sub(A,B)); // 類似 add
    }
    if (c1 == r2) {
        cout << "A*B:\n"; printMatrix(mul(A,B));
    }
    cout << "A^T:\n"; printMatrix(transpose(A));
    cout << "B^T:\n"; printMatrix(transpose(B));
    return 0;
}

進階:運算符重載

struct Mat {
    vector<vector<double>> d;
    Mat(int r, int c) : d(r, vector<double>(c)) {}
    Mat operator+(const Mat& o) const { return add(d, o.d); }
    Mat operator*(const Mat& o) const { return mul(d, o.d); }
    Mat T() const { return transpose(d); }
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved