C++编程练习:6-矩阵相乘

背景

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。

描述

输入两个矩阵,输出它们的乘积。无意义时输出error。

输入格式

每个矩阵:
一行,两个数,表示矩阵的行数、列数。
后面若干行,这个矩阵每一项的值。
方式:通过键盘输入

输出格式

输出相乘的结果。
方式:通过屏幕输出

测试样例

输入

2 3
1 2 3
4 5 6
3 2
1 4
2 5
3 6

输出

14 32
32 77

参考程序:

#include<iostream>
using namespace std;
int main()
{
    int *A,*B,*C;
    int a1,a2,b1,b2,c1,c2;
    int i,j,k;
    cin>>a1>>a2;
    A=new int[a1*a2];
    for(i=0;i<a1;i++)
    {
        for(j=0;j<a2;j++)
            cin>>A[i*a2+j];
    }
    cin>>b1>>b2;
    B=new int[b1*b2];
    for(i=0;i<b1;i++)
    {
        for(j=0;j<b2;j++)
            cin>>B[i*b2+j];
    }
    if(a2!=b1)
    {
        cout<<"error"<<endl;
    }
    else
    {
        c1=a1;
        c2=b2;
        C=new int[c1*c2];
        for(i=0;i<c1;i++)
            for(j=0;j<c2;j++)
            {
                C[i*c2+j]=0;
                for(k=0;k<a2;k++)
                C[i*c2+j]=C[i*c2+j]+A[i*a2+k]*B[k*b2+j];
            }
        for(i=0;i<c1;i++)
        {
            for(j=0;j<c2;j++)
            {cout<<C[i*c2+j]<<" ";}
            cout<<endl;
        }
            
    }
    return 0;
}


如程序有错误或者你有什么建议,欢迎你的留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章