C++面向对象编程题 第37题

37.建立一个类 Matrix,实现 m 行 k 列矩阵与 k 行 n 列矩阵的乘积。设 A 为 m 行 k 列的矩阵, B 为 k 行 n列的矩阵,则 C=A×B。

具体要求如下:
const int m=3;
const int k=4;
const int n=3;

  1. 私有数据成员
  • int A[m][k]:存放 m 行 k 列矩阵。
  • int B[k][n]:存放 k 行 n 列矩阵
  • int (*C)[n]: 指向乘积矩阵
  1. 公有成员函数
  • 构造函数:初始化成员数据。
  • 析构函数:收回行指针。
  • void process():求矩阵的乘积。
  • void print();打印C矩阵
  1. 在主程序中对该类进行测试。
    int a[m][k]={
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };
	int b[k][n]={
        {3,2,1},
        {6,5,4},
        {9,8,7},
        {12,11,10}
    };

输出:
在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
const int m = 3;
const int k = 4;
const int n = 3;
class Matrix{
    int A[m][k],B[k][n],(*C)[n];
public:
    Matrix(int a[m][k],int b[k][n]){
        for(int i=0;i<m;i++){
            for(int j=0;j<k;j++){
                A[i][j]=a[i][j];
            }
        }
        for(int i=0;i<k;i++){
            for(int j=0;j<n;j++){
                B[i][j]=b[i][j];
            }
        }
        C = new int[m][n];
    }
    void process(){
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                C[i][j] = 0;
                for(int h=0;h<k;h++){
                    C[i][j]+=A[i][h]*B[h][j];
                }
            }
        }
    }
    void print(){
        cout<<"A:"<<endl;
        for(int i=0;i<m;i++){
            for(int j=0;j<k;j++){
                cout<<A[i][j]<<'\t';
            }
            cout<<endl;
        }
        cout<<"B:"<<endl;
        for(int i=0;i<k;i++){
            for(int j=0;j<n;j++){
                cout<<B[i][j]<<'\t';
            }
            cout<<endl;
        }
        cout<<"C:"<<endl;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                cout<<C[i][j]<<'\t';
            }
            cout<<endl;
        }
    }
    ~Matrix(){
        if(C)delete[]C;
    }
};
int main(){

    int a[m][k]={
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };
	int b[k][n]={
        {3,2,1},
        {6,5,4},
        {9,8,7},
        {12,11,10}
    };
	Matrix test(a,b);
	test.process();
	test.print();
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值