C++ 指针实现矩阵相乘

C++基础学习 专栏收录该内容
12 篇文章 0 订阅

题目内容:

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

编写主程序,输入两个矩阵,调用函数计算它们的乘积,在主函数中输出计算结果。每个矩阵的元素总个数不超过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;
}
  • 1
    点赞
  • 0
    评论
  • 18
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

薛铁钢

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值