主题:[讨论]矩阵的加减乘转置逆运算,帮看看
#include<stdio.h>
#include<iostream,h>
#include<iomanip.h>
#include<stdib.h>
#define M //矩阵的行数
#define N //矩阵的列数
const MAXSIZE=1000;//假设非零元的个数的最大值为1000//
private:
int i,j,m,n,p,q;//矩阵的行下标和列下标//
int col,row;//矩阵的行和列
protected:
int E[][];//矩阵的运算
class Cpoint
{
int i,j,m,n;
public:
Cpoint(int vi,int vj,int vm,int vn)//运算符重载
{
i=vi;j=vj;m=vm;n=vn;
}
Cpoint(){i=0;j=0;m=0;n=0;}
void Print();
friend Cpoint operator+(Cpoint &);//用友元函数重载运算符
friend Cpoint operator-(Cpoint &);
friend Cpoint operator*(Cpoint &);
}
void Cpoint::Print()
{
cout<<"("<<i<<","<<j<<","<<m<<","<<n<<")\t";
}
//矩阵的转置
void transpose(ElemType A[][],ElemType E[][])
{
for(col=1;col<=M;++col)
{
for(row=1;row<=N;++cow)
A[col][cow]=E[row][col];
}
}
//矩阵的加法运算
Cpoint operator +(Cpoint &p,&q)//运算符的定义
{
if(i==m&&j==n)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p=i+m;
q=j+n;
}
return E[p][q];
}
}
//矩阵的减法运算
Cpoint operator -(Cpoint &p,&q)//运算符的定义
{
if(i==m&&j==n)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p=i-m;
q=j-n;
}
return E[p][q];
}
}
//矩阵的乘法运算
Cpoint operator *(Cpoint &p,&q)//运算符的定义
{
if(j==m)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p+=i*n;
q+=j*m;
}
return E[p][q];
}
}
void hanglieshi(float A[M][2*M],float B[N][2*N])
{
float t,x;
int k,T;
cout<<"输入矩阵的维数:\n";//行列相等的矩阵
cin>>T;
for(i=0;i<T;i++)
for(j=0;j<T;j++)
cin>>setw(5)<<B[i][j];
cout<<"原矩阵为\n";
for(i=0;i<T;i++)
{
for(j=0;j<T;j++)
cout<<setw(5)<<B[i][j];
cout<<'\n';
}
for(i=0;i<T;i++)
for(j=0;j<(2*T);j++)
{
if(j<T)
A[i][j]=B[i][j];
else if(j==T+i)
a[i][j]=1.0;
else
a[i][j]=0.0;
}
for(i=0;i<T;i++)
{
for(k=0;k<T;k++)
{
if(k!=0)
if(k!=1)
{
t=A[k][i]/A[i][i];
for(j=0;j<(2*T);j++)
{
x=A[i][j]*t;
A[k][j]=A[k][j]*x;
}
}
}
}
for(i=0;j<T;i++)
{
t=A[i][i];
for(j=0;j<(2*T);j++)
A[i][j]=A[i][j]/t;
}
for(i=0;i<T;i++)
y=y*A[i][i];//行列式
if(y==0)
cout<<"所输入的矩阵没有逆矩阵\n";
else
{
for(i=0;i<T;i++)
for(j=0;j<T;j++)
B[i][j]=A[i][j+T];
cout<<"逆矩阵为:\n";
for(i=0;i<T;i++)
{
for(j=0;j<T;j++)
cout<<setw(5)<<B[i][j];
cout<<'\n';
}
}
}
void main(void)
{
Cpoint A[i][j],B[m][n],E[p][q];//定义三个矩阵对象
cout<<"请输入i的值\n";
cin>>i;
cout<<"请输入j的值\n";
cout<<"请输入n的值\n";
cin>>n;
for(i=0;i<col;i++)
for(j=0;j<row;j++)
A[i][j].print;
for(m=0;m<col;m++)
for(n=0;n<row;n++)
B[m][n].print;
E[p][q]=A[i][j]+B[m][n];//矩阵相加,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相加结果
E[p][q]=A[i][j]-B[m][n];//矩阵相减,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相减结果
E[p][q]=A[i][j]*B[m][n];//矩阵相乘,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相乘结果
}
#include<iostream,h>
#include<iomanip.h>
#include<stdib.h>
#define M //矩阵的行数
#define N //矩阵的列数
const MAXSIZE=1000;//假设非零元的个数的最大值为1000//
private:
int i,j,m,n,p,q;//矩阵的行下标和列下标//
int col,row;//矩阵的行和列
protected:
int E[][];//矩阵的运算
class Cpoint
{
int i,j,m,n;
public:
Cpoint(int vi,int vj,int vm,int vn)//运算符重载
{
i=vi;j=vj;m=vm;n=vn;
}
Cpoint(){i=0;j=0;m=0;n=0;}
void Print();
friend Cpoint operator+(Cpoint &);//用友元函数重载运算符
friend Cpoint operator-(Cpoint &);
friend Cpoint operator*(Cpoint &);
}
void Cpoint::Print()
{
cout<<"("<<i<<","<<j<<","<<m<<","<<n<<")\t";
}
//矩阵的转置
void transpose(ElemType A[][],ElemType E[][])
{
for(col=1;col<=M;++col)
{
for(row=1;row<=N;++cow)
A[col][cow]=E[row][col];
}
}
//矩阵的加法运算
Cpoint operator +(Cpoint &p,&q)//运算符的定义
{
if(i==m&&j==n)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p=i+m;
q=j+n;
}
return E[p][q];
}
}
//矩阵的减法运算
Cpoint operator -(Cpoint &p,&q)//运算符的定义
{
if(i==m&&j==n)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p=i-m;
q=j-n;
}
return E[p][q];
}
}
//矩阵的乘法运算
Cpoint operator *(Cpoint &p,&q)//运算符的定义
{
if(j==m)
for(p=0;p<i;p++)
{
for(q=0;q<=j;q++)
{
p+=i*n;
q+=j*m;
}
return E[p][q];
}
}
void hanglieshi(float A[M][2*M],float B[N][2*N])
{
float t,x;
int k,T;
cout<<"输入矩阵的维数:\n";//行列相等的矩阵
cin>>T;
for(i=0;i<T;i++)
for(j=0;j<T;j++)
cin>>setw(5)<<B[i][j];
cout<<"原矩阵为\n";
for(i=0;i<T;i++)
{
for(j=0;j<T;j++)
cout<<setw(5)<<B[i][j];
cout<<'\n';
}
for(i=0;i<T;i++)
for(j=0;j<(2*T);j++)
{
if(j<T)
A[i][j]=B[i][j];
else if(j==T+i)
a[i][j]=1.0;
else
a[i][j]=0.0;
}
for(i=0;i<T;i++)
{
for(k=0;k<T;k++)
{
if(k!=0)
if(k!=1)
{
t=A[k][i]/A[i][i];
for(j=0;j<(2*T);j++)
{
x=A[i][j]*t;
A[k][j]=A[k][j]*x;
}
}
}
}
for(i=0;j<T;i++)
{
t=A[i][i];
for(j=0;j<(2*T);j++)
A[i][j]=A[i][j]/t;
}
for(i=0;i<T;i++)
y=y*A[i][i];//行列式
if(y==0)
cout<<"所输入的矩阵没有逆矩阵\n";
else
{
for(i=0;i<T;i++)
for(j=0;j<T;j++)
B[i][j]=A[i][j+T];
cout<<"逆矩阵为:\n";
for(i=0;i<T;i++)
{
for(j=0;j<T;j++)
cout<<setw(5)<<B[i][j];
cout<<'\n';
}
}
}
void main(void)
{
Cpoint A[i][j],B[m][n],E[p][q];//定义三个矩阵对象
cout<<"请输入i的值\n";
cin>>i;
cout<<"请输入j的值\n";
cout<<"请输入n的值\n";
cin>>n;
for(i=0;i<col;i++)
for(j=0;j<row;j++)
A[i][j].print;
for(m=0;m<col;m++)
for(n=0;n<row;n++)
B[m][n].print;
E[p][q]=A[i][j]+B[m][n];//矩阵相加,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相加结果
E[p][q]=A[i][j]-B[m][n];//矩阵相减,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相减结果
E[p][q]=A[i][j]*B[m][n];//矩阵相乘,结果给 E[p][q]
for(p=0;p<i;p++)
for(q=0;q<j;q++)
E[p][q].Print;//输出相乘结果
}