#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;//输出相乘结果
    
}