指针与动态数组问题,求帮助
这是这个星期的实验题目,要求定义一个实数向量类Vector和一个矩阵类(Matrix),输出向量与矩阵,输出: 向量乘乘向量,矩阵乘矩阵,向量乘矩阵.下面是我写的代码:
# include<iostream.h>
# include<stdlib.h>
# include<time.h>
class matrix;//声明矩阵类
class vector//定义向量类
{
int m_cout;
int *m_pdata;
public:
friend vector mutliply(matrix &m,vector &v);//友元
vector(int n);
vector();
void show();
int multiply(vector &v);
~vector();
};
class matrix//定义矩阵类
{
int m_rows;
int m_cols;
float *m_pdata;
public:
friend vector mutliply(matrix &m,vector &v);
matrix(int r,int c);
matrix();
void show();
matrix multiply(matrix &m);
~matrix();
};
vector::vector(int n)//初始化向量,采用动态数组
{
int i;
m_pdata=new int[n];
m_cout=n;
for(i=0;i<n;i++)
m_pdata[i]=0;
for(i=0;i<n;i++)
{
m_pdata[i]=rand()%10+1;
}
}
int vector::multiply(vector &v)//输出向量乘向量结果
{
int i;
int sum=1;
for(i=0;i<m_cout;i++)
{
sum=sum*(v.m_pdata[i]);
}
cout<<"the number of vector is: "<<sum<<endl;
return 0;
}
void vector::show()//输出向量
{
int i;
cout<<"the vector is:"<<endl;
for(i=0;i<m_cout;i++)
{
cout<<m_pdata[i]<<" ";
}
cout<<endl;
}
vector::~vector()//析构函数,(用来删除动动态向量数组,这里可能是最后错误提示所在)
{
delete this->m_pdata;
}
matrix::matrix(int r,int c)//初始化矩阵(这里我是采用一维数组作为矩阵,数组大小为 矩阵行 乘以 矩阵列)
{
int i,j;
m_rows=r;
m_cols=c;
m_pdata=new float[r*c];
for(j=0;j<r*c;j++)
m_pdata[j]=0;
for(i=0;i<r*c;i++)
m_pdata[i]=float(rand()%10+1);
}
matrix matrix::multiply(matrix &m)//输出矩阵乘矩阵
{
int i,j,k;
float temp=0;
if(m_rows==m_cols)
{
cout<<"the new matrix is:"<<endl;
for(i=0;i<m_rows;i++)
{
for(k=0;k<m_rows;k++)
{
for(j=0;j<m_cols;j++)
{
temp=temp+(m_pdata[m_cols*i+j])*(m_pdata[m_cols*j+k]);
}
cout<<temp<<" ";
if(k==m_rows-1)
cout<<endl;
}
}
}
else
cout<<"can't jushuan"<<endl;
return m;
}
void matrix::show()//输出矩阵
{
int i;
cout<<"the matrix is:"<<endl;
for(i=0;i<m_rows*m_cols;i++)
{
cout<<m_pdata[i]<<" ";
if((i!=0)&&(i%m_cols-1==0))
cout<<endl;
}
cout<<endl;
}
matrix::~matrix()//析构函数(删除动态矩阵数组,这里可能是最后错误提示所在)
{
delete this->m_pdata;
}
vector mutliply(matrix &m,vector &v)//输出向量乘矩阵(这里输出的是乱码)
{
int i,j,k;
float temp=0;
k=m.m_cols;
if(m.m_cols==v.m_cout)
{
cout<<"the new vector is:"<<endl;
for(i=0;i<m.m_cols;i++)
{
for(j=0;j<v.m_cout;j++)
{
temp=temp+(v.m_pdata[j]) * (m.m_pdata[k*j+i]);
}
cout<<temp<<" ";
}
cout<<endl;
}
else
cout<<"can't jishuan"<<endl;
return v;
}
void main()
{
int a,b,d;
float i=0;
srand((unsigned)time(NULL));
cout<<"please input the vector cout and matrix row and col"<<endl;
cin>>a>>b>>d;
vector ab(a);
ab.show();
ab.multiply(ab);
matrix bc(b,d);
bc.show();
bc.multiply(bc);
mutliply(bc,ab);
}
这是我运行的结果:
从运行结果可以看出:
在输出矩阵时,排版有问题;
在输出向量乘矩阵时,乱码(小第找不原因所在,故求人帮助);
而且在程序结束时,会有错误提示,这个我想是析构函数的原因,但我打不错误所在.