找回密码
 中文实名注册
搜索
查看: 342|回复: 0

C12第1章矩阵乘法

[复制链接]

731

主题

577

回帖

2万

积分

管理员

积分
24978
发表于 2025-8-20 15:07:32 | 显示全部楼层 |阅读模式

请输入矩阵A的行数和列数: 2 3
请输入2行3列的矩阵元素:
1 2 3
4 5 6
请输入矩阵B的行数和列数: 3 2
请输入3行2列的矩阵元素:
7 8
9 10
11 12
矩阵相乘的结果为2行2列矩阵:
58 64
139 154


[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;

// 定义矩阵结构体
struct matrix {
    int a[100][100];  // 存储矩阵元素,最大支持100×100
    int n, m;         // n为行数,m为列数
};

// 矩阵乘法函数
// 参数:A为n×m矩阵,B为m×p矩阵
// 返回:n×p的乘积矩阵
matrix matrix_mul(matrix A, matrix B) {
    matrix ret;
    ret.n = A.n;      // 结果矩阵行数 = A的行数
    ret.m = B.m;      // 结果矩阵列数 = B的列数
    
    // 初始化结果矩阵为0
    for (int i = 0; i < ret.n; i++) {
        for (int j = 0; j < ret.m; j++) {
            ret.a[i][j] = 0;
        }
    }
    
    // 矩阵乘法核心计算
    for (int i = 0; i < ret.n; i++) {       // 结果矩阵的行
        for (int j = 0; j < ret.m; j++) {   // 结果矩阵的列
            for (int k = 0; k < A.m; k++) { // 累加维度(A的列数=B的行数)
                ret.a[i][j] += A.a[i][k] * B.a[k][j];
            }
        }
    }
    return ret;
}

int main() {
    matrix A, B;
    
    // 输入矩阵A
    cout << "请输入矩阵A的行数和列数: ";
    cin >> A.n >> A.m;
    cout << "请输入" << A.n << "行" << A.m << "列的矩阵元素:" << endl;
    for (int i = 0; i < A.n; i++) {
        for (int j = 0; j < A.m; j++) {
            cin >> A.a[i][j];
        }
    }
    
    // 输入矩阵B
    cout << "请输入矩阵B的行数和列数: ";
    cin >> B.n >> B.m;
    cout << "请输入" << B.n << "行" << B.m << "列的矩阵元素:" << endl;
    for (int i = 0; i < B.n; i++) {
        for (int j = 0; j < B.m; j++) {
            cin >> B.a[i][j];
        }
    }
    
    // 检查矩阵乘法合法性
    if (A.m != B.n) {
        // 修复原代码错误:将未定义的STR改为具体错误信息
        cout << "错误:矩阵A的列数(" << A.m << ")与矩阵B的行数(" << B.n << ")不相等,无法相乘!" << endl;
    } else {
        // 计算并输出结果
        matrix C = matrix_mul(A, B);
        cout << "矩阵相乘的结果为" << C.n << "行" << C.m << "列矩阵:" << endl;
        for (int i = 0; i < C.n; i++) {
            for (int j = 0; j < C.m; j++) {
                if (j != C.m - 1) {
                    cout << C.a[i][j] << " ";
                } else {
                    cout << C.a[i][j] << endl;  // 每行最后一个元素后换行
                }
            }
        }
    }
    
    return 0;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

快速回复 返回顶部 返回列表