帮忙找个错,关于运算符重载矩阵乘法
时间:2011-12-01
来源:互联网
[code=C/C++][/code]
#include "stdafx.h"
#include<iostream.h>
class Matrix
{
public:
Matrix(int mm, int nn)//构造函数初始化data
{
m=mm;n=nn;
int i;
data=new double*[mm];
for(i=0;i<mm;i++)
data[i]=new double[nn];
} //构造M行N列的矩阵
Matrix(const Matrix &src) //重载拷贝构造函数
{
m=src.m;n=src.n;
int i,j;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
Matrix& operator=(const Matrix &src) //重载"="运算符
{
int i,j;
for(i=0;i<m;i++)
delete []data[i];
delete []data;
m=src.m;n=src.n;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
return *this;
}
~Matrix()//
{
for(int i=0;i<m;i++)
delete []data[i];
delete []data;
}
Matrix operator * (Matrix &m2); //矩阵乘法
void display();
void input();
private:
double **data;
int m,n;//矩阵的行数,列数
};//类定义结束
Matrix Matrix::operator *(Matrix &m2)//矩阵乘法的实现
{
Matrix m3(this->m,this->n);
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
for(int k=0;k<n;k++)
m3.data[i][j]+=data[i][k]*m2.data[k][j];
return m3;
}
void Matrix::input()
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>data[i][j];
}
void Matrix::display()
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
int main(int argc, char* argv[])
{
int x,y;
cout<<"行数:";
cin>>x;
cout<<"列数:";
cin>>y;
Matrix A(x,y);
cout<<"please input "<<x*y<<"numbers"<<endl;
A.input();
A.display();
cout<<"行数:";
cin>>x;
cout<<"列数:";
cin>>y;
Matrix B(x,y);
cout<<"please input "<<x*y<<"numbers"<<endl;
B.input();
B.display();
Matrix C(y,x);
C=A*B;
C.display();
return 0;
}
运行后得到的是这个样子:
-6.27744e+066 -6.27744e+066 -6.27744e+066
-6.27744e+066 -6.27744e+066 -6.27744e+066
-6.27744e+066 -6.27744e+066 -6.27744e+066
不知道哪里出问题了,这只是我程序的一部分,其他部分如加法、减法、矩阵转置都可以正常运行得到结果的~
#include "stdafx.h"
#include<iostream.h>
class Matrix
{
public:
Matrix(int mm, int nn)//构造函数初始化data
{
m=mm;n=nn;
int i;
data=new double*[mm];
for(i=0;i<mm;i++)
data[i]=new double[nn];
} //构造M行N列的矩阵
Matrix(const Matrix &src) //重载拷贝构造函数
{
m=src.m;n=src.n;
int i,j;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
Matrix& operator=(const Matrix &src) //重载"="运算符
{
int i,j;
for(i=0;i<m;i++)
delete []data[i];
delete []data;
m=src.m;n=src.n;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
return *this;
}
~Matrix()//
{
for(int i=0;i<m;i++)
delete []data[i];
delete []data;
}
Matrix operator * (Matrix &m2); //矩阵乘法
void display();
void input();
private:
double **data;
int m,n;//矩阵的行数,列数
};//类定义结束
Matrix Matrix::operator *(Matrix &m2)//矩阵乘法的实现
{
Matrix m3(this->m,this->n);
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
for(int k=0;k<n;k++)
m3.data[i][j]+=data[i][k]*m2.data[k][j];
return m3;
}
void Matrix::input()
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>data[i][j];
}
void Matrix::display()
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
int main(int argc, char* argv[])
{
int x,y;
cout<<"行数:";
cin>>x;
cout<<"列数:";
cin>>y;
Matrix A(x,y);
cout<<"please input "<<x*y<<"numbers"<<endl;
A.input();
A.display();
cout<<"行数:";
cin>>x;
cout<<"列数:";
cin>>y;
Matrix B(x,y);
cout<<"please input "<<x*y<<"numbers"<<endl;
B.input();
B.display();
Matrix C(y,x);
C=A*B;
C.display();
return 0;
}
运行后得到的是这个样子:
-6.27744e+066 -6.27744e+066 -6.27744e+066
-6.27744e+066 -6.27744e+066 -6.27744e+066
-6.27744e+066 -6.27744e+066 -6.27744e+066
不知道哪里出问题了,这只是我程序的一部分,其他部分如加法、减法、矩阵转置都可以正常运行得到结果的~
作者: Vampierty 发布时间: 2011-12-01
#include <iostream>
using namespace std;
//Matrix矩阵类
class Matrix
{
public:
Matrix(int mm, int nn)//构造函数初始化data
{
m=mm;n=nn;
int i,j;
data=new double*[mm];
for(i=0;i<mm;i++)
data[i]=new double[nn];
for(i=0;i<m;i++)//矩阵所有元素清零
for(j=0;j<n;j++)
data[i][j]=0.0;
} //构造M行N列的矩阵
Matrix(const Matrix &src) //重载拷贝构造函数
{
m=src.m;n=src.n;
int i,j;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
Matrix& operator=(const Matrix &src) //重载"="运算符
{
int i,j;
for(i=0;i<m;i++)
delete []data[i];
delete []data;
m=src.m;n=src.n;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
return *this;
}
~Matrix()//
{
for(int i=0;i<m;i++)
delete []data[i];
delete []data;
}
Matrix operator * (Matrix &m2); //矩阵乘法
void display();
void input();
private:
double **data;
int m,n;//矩阵的行数,列数
};//类定义结束
//矩阵*运算符重载
Matrix Matrix::operator *(Matrix &m2)//矩阵乘法的实现
{
Matrix m3(this->m,m2.n);
if(this->n!=m2.m)
{
cout<<"两矩阵无法进行乘法运算.\n"<<endl;
exit(0);
}
int i,j,k,l;
for(i=0;i<this->m;i++)
for(j=0;j<m2.n;j++)
{
for(k=0;k<this->n;k++)
for(l=0;l<m2.m;l++)
m3.data[i][j]+=this->data[i][k]*m2.data[l][j];
}
return m3;
}
//输入矩阵元素
void Matrix::input()
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>data[i][j];
}
//显示矩阵元素
void Matrix::display()
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
//主函数
int main(int argc, char* argv[])
{
int x,y;
cout<<"矩阵1行数:";
cin>>x;
cout<<"矩阵1列数:";
cin>>y;
Matrix A(x,y);
cout<<"please input "<<x*y<<" numbers"<<endl;
A.input();
A.display();
cout<<"矩阵2行数:";
cin>>x;
cout<<"矩阵2列数:";
cin>>y;
Matrix B(x,y);
cout<<"please input "<<x*y<<" numbers"<<endl;
B.input();
B.display();
Matrix C(y,x);
C=A*B;
C.display();
return 0;
}
using namespace std;
//Matrix矩阵类
class Matrix
{
public:
Matrix(int mm, int nn)//构造函数初始化data
{
m=mm;n=nn;
int i,j;
data=new double*[mm];
for(i=0;i<mm;i++)
data[i]=new double[nn];
for(i=0;i<m;i++)//矩阵所有元素清零
for(j=0;j<n;j++)
data[i][j]=0.0;
} //构造M行N列的矩阵
Matrix(const Matrix &src) //重载拷贝构造函数
{
m=src.m;n=src.n;
int i,j;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
Matrix& operator=(const Matrix &src) //重载"="运算符
{
int i,j;
for(i=0;i<m;i++)
delete []data[i];
delete []data;
m=src.m;n=src.n;
data=new double*[m];//动态建立二维数组
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
return *this;
}
~Matrix()//
{
for(int i=0;i<m;i++)
delete []data[i];
delete []data;
}
Matrix operator * (Matrix &m2); //矩阵乘法
void display();
void input();
private:
double **data;
int m,n;//矩阵的行数,列数
};//类定义结束
//矩阵*运算符重载
Matrix Matrix::operator *(Matrix &m2)//矩阵乘法的实现
{
Matrix m3(this->m,m2.n);
if(this->n!=m2.m)
{
cout<<"两矩阵无法进行乘法运算.\n"<<endl;
exit(0);
}
int i,j,k,l;
for(i=0;i<this->m;i++)
for(j=0;j<m2.n;j++)
{
for(k=0;k<this->n;k++)
for(l=0;l<m2.m;l++)
m3.data[i][j]+=this->data[i][k]*m2.data[l][j];
}
return m3;
}
//输入矩阵元素
void Matrix::input()
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>data[i][j];
}
//显示矩阵元素
void Matrix::display()
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
//主函数
int main(int argc, char* argv[])
{
int x,y;
cout<<"矩阵1行数:";
cin>>x;
cout<<"矩阵1列数:";
cin>>y;
Matrix A(x,y);
cout<<"please input "<<x*y<<" numbers"<<endl;
A.input();
A.display();
cout<<"矩阵2行数:";
cin>>x;
cout<<"矩阵2列数:";
cin>>y;
Matrix B(x,y);
cout<<"please input "<<x*y<<" numbers"<<endl;
B.input();
B.display();
Matrix C(y,x);
C=A*B;
C.display();
return 0;
}
作者: nuaazdh 发布时间: 2011-12-01
C/C++ code
楼主矩阵乘法规则没有弄清除吧
#include <iostream> using namespace std; //Matrix矩阵类 class Matrix { public: Matrix(int mm, int nn)//构造函数初始化data { m=mm;n=nn; int i,j; data=new double*[mm]; for(i=0;i<mm;i++) data[i]=new double[nn]; for(i=0;i<m;i++)//矩阵所有元素清零 for(j=0;j<n;j++) data[i][j]=0.0; } //构造M行N列的矩阵 Matrix(const Matrix &src) //重载拷贝构造函数 { m=src.m;n=src.n; int i,j; data=new double*[m];//动态建立二维数组 for(i=0;i<m;i++) data[i]=new double[n]; for(i=0;i<m;i++) for(j=0;j<n;j++) data[i][j]=src.data[i][j]; } Matrix& operator=(const Matrix &src) //重载"="运算符 { int i,j; for(i=0;i<m;i++) delete []data[i]; delete []data; m=src.m;n=src.n; data=new double*[m];//动态建立二维数组 for(i=0;i<m;i++) data[i]=new double[n]; for(i=0;i<m;i++) for(j=0;j<n;j++) data[i][j]=src.data[i][j]; return *this; } ~Matrix()// { for(int i=0;i<m;i++) delete []data[i]; delete []data; } Matrix operator * (Matrix &m2); //矩阵乘法 void display(); void input(); private: double **data; int m,n;//矩阵的行数,列数 };//类定义结束 //矩阵*运算符重载 Matrix Matrix::operator *(Matrix &m2)//矩阵乘法的实现 { Matrix m3(this->m,m2.n); if(this->n!=m2.m) { cout<<"两矩阵无法进行乘法运算.\n"<<endl; exit(0); } int i,j,k,l; for(i=0;i<this->m;i++) for(j=0;j<m2.n;j++) { for(k=0;k<this->n;k++) for(l=0;l<m2.m;l++) m3.data[i][j]+=this->data[i][k]*m2.data[l][j]; } return m3; } //输入矩阵元素 void Matrix::input() { for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>data[i][j]; } //显示矩阵元素 void Matrix::display() { int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cout<<data[i][j]<<" "; } cout<<endl; } } //主函数 int main(int argc, char* argv[]) { int x,y; cout<<"矩阵1行数:"; cin>>x; cout<<"矩阵1列数:"; cin>>y; Matrix A(x,y); cout<<"please input "<<x*y<<" numbers"<<endl; A.input(); A.display(); cout<<"矩阵2行数:"; cin>>x; cout<<"矩阵2列数:"; cin>>y; Matrix B(x,y); cout<<"please input "<<x*y<<" numbers"<<endl; B.input(); B.display(); Matrix C(y,x); C=A*B; C.display(); return 0; }
楼主矩阵乘法规则没有弄清除吧
作者: nuaazdh 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28