您的位置:首页 > 其它

矩阵的乘法

2014-05-26 17:27 190 查看
/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2014 年 5 月 26 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*问题描述:输入两个矩阵。输出矩阵乘法运算的结果,如果不能进行矩阵乘法运算,则输出一行“Error”。
如果第1个矩阵的行数和列数为 n1, m1,第2个矩阵的行数和列数为 n2, m2。
矩阵乘法运算规则为:
矩阵1的第1行的m1个元素与矩阵2的第1列的n2个元素依次相乘的和为结果矩阵的第1行的第1个元素
矩阵1的第2行的m1个元素与矩阵2的第1列的n2个元素依次相乘的和为结果矩阵的第2行的第1个元素
……
矩阵1的第n1行的……
*输入描述: Input
输入n组数据
每组数据的输入格式如下:
第1行输入两个整数 n1, m1(1<=n1<=100,1<=m1<=100),分别代表第1个矩阵的行数和列数。
接下来输入n1行数据,每行m1个float数,表示输入第1个矩阵的各元素的值。
下一行输入两个整数 n2, m2(1<=n2<=100,1<=m2<=100),分别代表第2个矩阵的行数和列数。
接下来输入n2行数据,每行m2个float数,表示输入第2个矩阵的各元素的值。

*程序输出:Output
每组数据输出一个结果矩阵
每组输出数据中间有一空行
结果矩阵元素为浮点数,要求输出为小数点后2位
元素与元素之间隔一空格
*问题分析:
*算法设计:
*/
#include<iostream>
#include<iomanip>
using namespace std;
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<=n1; i++)
for(int j=1; j<=m2; j++)
{
sum=0;
for(int k=1; k<=m1; k++)
{
sum+=a[i][k]*b[k][j];
}
c[i][j]=sum;
}
}
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];
}


运行结果:



心得体会:。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息