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

  • Post author:
  • Post category:其他




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;
}



版权声明:本文为xskukuku原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。