C++ 指针实现矩阵相乘

题目内容:

编写函数,使用指针传递和指针运算,实现两个矩阵的乘积。

编写主程序,输入两个矩阵,调用函数计算它们的乘积,在主函数中输出计算结果。每个矩阵的元素总个数不超过100,但行数、列数不定。矩阵元素为整数。

输入格式:

先输入两个整数,表示矩阵的行数和列数,然后按行输入第一个矩阵的元素。

再输入两个整数,表示第二个矩阵的行数和列数,然后按行输入第二个矩阵的元素。

输入保证第一个矩阵的列数和第二个矩阵的行数相等。

输出格式:

两个矩阵的乘积,按行、列显示,每行末尾无空格。

输入样例:

2 3

1 1 0

2 1 1

3 2

1 2

2 1

1 0

输出样例:

3 3

5 5

#include <iostream>

using namespace std;
void cul(int **a,int **b,int **c,int m,int n,int x,int y)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<y;j++)
        {
            for(int k=0;k<n;k++)
            {
                 c[i][j]+=a[i][k]*b[k][j];
                 //cout<<a[i][k]<<"*"<<b[k][j]<<endl;
            }
        }
    }
}
int main()
{
    int **a,**b,**c;//指向指针的指针
    int m,n,x,y;
    //第一个数组
    cin>>m>>n;//m行n列
    a=new int *[m];
    for(int i=0;i<m;i++)
        a[i]=new int[n];//a的每一行都是一个长度为n的一维数组
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            cin>>*(*(a+i)+j);
    }

    //第二个数组
    cin>>x>>y;
    b=new int *[x];//int指针数组
    for(int i=0;i<x;i++)
        b[i]=new int[y];
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
            cin>>*(*(b+i)+j);
    }

    //第三个数组,用来存放最终结果
    c=new int *[m];
    for(int i=0;i<m;i++)
        c[i]=new int[y];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<y;j++)
            *(*(c+i)+j)=0;
    }
    cul(a,b,c,m,n,x,y);//相乘

    for(int i=0;i<m;i++)
    {
        cout<<*(*(c+i)+0);
        for(int j=1;j<y;j++)
            cout<<" "<<*(*(c+i)+j);
        cout<<endl;
    }

    //释放空间
    for(int i=0;i<m;i++)
        delete []a[i];
    for(int i=0;i<x;i++)
        delete []b[i];
    for(int i=0;i<m;i++)
        delete []c[i];
    delete []a;delete []b;delete []c;
    return 0;
}
发布了11 篇原创文章 · 获赞 0 · 访问量 314

猜你喜欢

转载自blog.csdn.net/qiankendeNMY/article/details/105544252