不等规模二维数组相乘

来源:互联网 发布:a站凉了知乎 编辑:程序博客网 时间:2024/05/06 23:59
/*建立一个类 SUM,实现 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]:指向乘积矩阵(2) 公有成员函数    构造函数:初始化成员数据。    析构函数:收回行指针。    void process():求矩阵的乘积。    void print():输出各二维数组(按行列形式)。(3) 在主程序中对该类进行测试。*/#include<iostream>using namespace std;const int m = 3;const int k = 4;const int n = 3;class SUM{private:    int A[m][k];    int B[k][n];    int(*C)[n];public:    SUM(int(*p1)[4], int(*p2)[3]);    void process();    void print();    ~SUM();};SUM::SUM(int(*p1)[4], int(*p2)[3]){    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 4; j++)        {            A[i][j] = *(*(p1 + 0) + j);        }        p1++;    }    for (int i = 0; i < 4; i++)    {        for (int j = 0; j < 3; j++)        {            B[i][j] = *(*(p2 + 0) + j);        }        p2++;    }    C = new int[4][3];}void SUM::process(){    //将二维数组转换为一维数组    int aa[12], bb[12];    int count_a = 0, count_b = 0;    for (int i = 0; i < 3; i++)    {        for (int j = 0; j < 4; j++)        {            aa[count_a] = A[i][j];            count_a++;        }    }    for (int i = 0; i < 4; i++)    {        for (int j = 0; j < 3; j++)        {            bb[count_b] = B[i][j];            count_b++;        }    }    //将一维数组相乘    int(*CC)[3];    CC = C;    for (int i = 0; i < 12; i++)    {        if (i % 3 == 0 && i != 0)            CC++;        *(*(CC + 0) + (i % 3)) = aa[i] * bb[i];    }}void SUM::print(){    for (int i = 0; i < 4; i++)    {        for (int j = 0; j < 3; j++)        {            cout << C[i][j] << '\t';        }        cout << endl;    }}SUM::~SUM(){    delete[]C;}int main(){    int cc[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };    int dd[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} };    SUM test(cc, dd);    test.process();    test.print();    system("pause");    return 0;}
原创粉丝点击