您的位置:首页 > 其它

oj程序调试--矩阵的乘法运算

2014-05-29 07:49 211 查看
<pre name="code" class="cpp">输入两个矩阵。输出矩阵乘法运算的结果,如果不能进行矩阵乘法运算,则输出一行“Error”。
如果第1个矩阵的行数和列数为 n1, m1(1<=n1<=100,1<=m1<=100),第2个矩阵的行数和列数为 n2, m2(1<=n2<=100,1<=m2<=100)。
矩阵乘法运算规则为:
矩阵1的第1行的m1个元素与矩阵2的第1列的n2个元素依次相乘的和为结果矩阵的第1行的第1个元素
矩阵1的第2行的m1个元素与矩阵2的第1列的n2个元素依次相乘的和为结果矩阵的第2行的第1个元素
……
矩阵1的第n1行的……
例如: n1=3,m1=2,n2=2,m2=3
1 2 3              1 2           1*1+2*3+3*5   1*2+2*4+3*6          22 28
4 5 6     *        3 4     =    4*1+5*3+6*5   4*2+5*4+6*6    =    49 64
                      5 6



* 程序的版权和版本声明部分:
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作    者:任子仪
* 完成日期:2014年 5月 29日
* 版 本 号:v12.1
* 输入描述:无
* 问题描述:。
* 程序输出:
* 问题分析:略
* 算法设计:略
*/

#include<iostream>
#include<iomanip>
using namespace std;
void input(float x[101][101],int n,int m)
{
    //行
    for(int i=1;i<=n;i++)
    {
        //列
        for(int j=1;j<=m;j++)
        cin>>x[i][j];
    }
}
void mulMatrix(float a[101][101],int n1,int m1,float b[101][101],int n2,int m2,float c[101][101])
{
     for(int i=1; i<=m1; i++)
     {
         for(int j=1; j<=n2; j++)
        {
            for(int k=1; k<=m1; k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
     }

}

int main()

{

    int n;

    float a[101][101],b[101][101],c[101][101];

    int n1,m1,n2,m2;

    void input(float x[101][101],int n,int m);

    void mulMatrix(float a[101][101],int n1,int m1,float b[101][101],int n2,int m2,float c[101][101]);

    cin>>n;

    while(n--)

    {

        cin>>n1>>m1;

        input(a,n1,m1);

        cin>>n2>>m2;

        input(b,n2,m2);

        if(m1!=n2)

        {

            cout<<"Error"<<endl;

            continue;

        }

        mulMatrix(a,n1,m1,b,n2,m2,c);

        cout<<setiosflags(ios::fixed);

        cout<<setprecision(2);

        for(int i=1; i<=n1; i++)

        {

            for(int j=1; j<=m2; j++)

                if(j!=m2)

                    cout<<c[i][j]<<' ';

                else

                    cout<<c[i][j];

            cout<<endl;

        }

        cout<<endl;

    }

    return 0;

}

示例图片:



心得体会:

void mulMatrix(float a[101][101],int n1,int m1,float b[101][101],int n2,int m2,float c[101][101])
{
    //float sum
     for(int i=1; i<=m1; i++)
     {
         for(int j=1; j<=n2; j++)
        {
            for(int k=1; k<=m1; k++)
            {
                sum+=a[i][k]*b[k][j];
            }
           // c[i][j]=sum;
        }
     }

}


void mulMatrix
函数与原文当中的函数感觉没区别啊,可是为什么这个就错了可是原文中的就对了呢????

花 了好长时间都没有弄对,最后想试试吧,结果对看。愁死了啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: