| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:帮忙看下哪里出错了
只看楼主 加入收藏
endless
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-8-3
收藏
 问题点数:0 回复次数:4 
帮忙看下哪里出错了
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<iostream>
using namespace std ;



class Matrix
{
public:
 Matrix(int,int);         //构造函数
 bool initialize(int,int);  //矩阵初始化
 bool create();             //矩阵的生成
 void output();             //输出矩阵各元素
 
 Matrix operator *(Matrix &M2); //重载矩阵与矩阵乘法运算
 double  average();//求矩阵的均值
private:
 int m_row;       //矩阵行数
 int m_col;       //矩阵列数
 double *m_pData;  //使用指针指向矩阵各元素
};
//构造函数
Matrix::Matrix(int r,int c)
{
  initialize(r,c);
}
//矩阵初始化函数
bool Matrix::initialize(int r,int c)
{
   m_row=r;
   m_col=c;
   m_pData=new double[r*c];
   for(int i=0;i<m_row*m_col;i++)
   {
      m_pData[i]=0;
   }
   return true;
}
//生成矩阵数据元素,创建新矩阵
bool Matrix::create()
{
  m_pData=new double[m_row*m_col];
 srand( (unsigned)time( NULL ) );
  for(int i=0;i<m_row*m_col;i++)
  {
     m_pData[i]=rand()%100+1;
      
  }
 return true;
}
//矩阵输出函数
void Matrix::output()
{
   int j=0;
   for(int i=0;i<m_row*m_col;i++)
   {
      cout<<m_pData[i]<<" ";
   j++;
   if(j==m_col) {j=0;cout<<"\n";}
   }
}
//重载矩阵与矩阵乘法运算
Matrix Matrix::operator *(Matrix &M2)
{
   Matrix M=*this;
   int j=0;
   for(int i=0;i<m_row*m_col;i++)
   {
      M.m_pData[i]=m_pData[i]*M2.m_pData[i+j*m_col];
      j++;
   if(j==M2.m_row) j=0;
   }
   return M2;
}
double  Matrix ::average()
{  double  sum=0,a_average=0 ; Matrix M=*this;
   for(int i=0;i<m_row*m_col;i++)
       sum=M.m_pData[i]+sum ;
       a_average=sum/(m_row*m_col) ;
       return   a_average ;
 
}





int main()
{
   Matrix a(2,2),b(2,2),c(2,2) ,d(2,2);
   a.create();
   a.output();
   cout<<"该矩阵的均值为  "<<a.average()<<endl;
   b.create();
   b.output();
   cout<<"该矩阵的均值为  "<<b.average()<<endl;
   c.create();
   c.output();
   cout<<"a,b两矩阵相乘的结果为"<<endl;
   c=b*a ;
   c.output();
 }
我这里有2个问题,一是rand()生成的3个矩阵元素相同,估计是程序太短,运行太快的缘故二是我重载的*法不成功,程序计算不出来..劳烦大家看一下..给个解决的方法,谢谢.
搜索更多相关主题的帖子: 矩阵 double private average include 
2008-08-12 09:19
elegant87
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-1-15
收藏
得分:0 
#include<ctime>
#include<cstdlib>
#include<iostream>

using namespace std ;

class Matrix
{
public:
       Matrix(int,int);         //构造函数
       bool initialize(int,int);  //矩阵初始化
       bool create();             //矩阵的生成
       void output();             //输出矩阵各元素
       Matrix operator *(Matrix &M2); //重载矩阵与矩阵乘法运算
       double  average();//求矩阵的均值
private:
        int m_row;       //矩阵行数
        int m_col;       //矩阵列数
        double *m_pData;  //使用指针指向矩阵各元素
};
//构造函数
Matrix::Matrix(int r,int c)
{
  initialize(r,c);
}
//矩阵初始化函数
bool Matrix::initialize(int r,int c)
{
   m_row=r;
   m_col=c;
   m_pData=new double[r*c];
   for(int i=0;i<m_row*m_col;i++)
   {
      m_pData[i]=0;
   }
   return true;
}
//生成矩阵数据元素,创建新矩阵
bool Matrix::create()
{
  m_pData=new double[m_row*m_col];
  srand( (unsigned)time( NULL ) );
  for(int i=0;i<m_row*m_col;i++)
  {
     m_pData[i]=rand()%100+1;
      
  }
  return true;
}
//矩阵输出函数
void Matrix::output()
{
   int j=0;
   for(int i=0;i<m_row*m_col;i++)
   {
      cout<<m_pData[i]<<" ";
      j++;
      if(j==m_col)
      {
         j=0;
         cout<<"\n";
      }
   }
}
//重载矩阵与矩阵乘法运算
Matrix Matrix::operator *(Matrix &M2)
{
   Matrix M=*this;
   int j=0;
   for(int i=0;i<m_row*m_col;i++)
   {
      M.m_pData[i]=m_pData[i]*M2.m_pData[i+j*m_col];
      j++;
   if(j==M2.m_row) j=0;
   }
   return M2;
}
double  Matrix ::average()
{  
   double  sum=0,a_average=0 ; Matrix M=*this;
   for(int i=0;i<m_row*m_col;i++)
       sum=M.m_pData[i]+sum ;
   a_average=sum/(m_row*m_col) ;
   return  a_average ;

}

int main()
{
   Matrix a(2,2),b(2,2),c(2,2) ,d(2,2);
   a.create();
   a.output();
   cout<<"该矩阵的均值为  "<<a.average()<<endl;
   b.create();
   b.output();
   cout<<"该矩阵的均值为  "<<b.average()<<endl;
   c.create();
   c.output();
   cout<<"a,b两矩阵相乘的结果为"<<endl;
   c=b*a ;
   c.output();
   system("pause");
   return 0;
}
2008-08-12 15:45
elegant87
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-1-15
收藏
得分:0 
将*重载函数改为:
Matrix Matrix::operator *(Matrix &M2)
{
   int j=0;
   for(int i=0;i<m_row*m_col;i++)
   {
      m_pData[i]*=M2.m_pData[i+j*m_col];
      ++j;
   if(j==M2.m_row)
      j=0;
   }
   return *this;
}
这个算法不是很对吧!
2008-08-12 16:04
endless
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-8-3
收藏
得分:0 
回复 3# elegant87 的帖子
根据你提供的方法改过了程序。
     运行是出现了一个警告如下:
 warning C4715: 'Matrix::operator*' : not all control paths return a value  
 计算出来的数值并不正确.能再帮我看一下吗,谢谢.
2008-08-12 17:29
hoda
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-8-12
收藏
得分:0 
srand 在程序启动时,使用一次即可!
不能重复使用,除非你有需要!否则
就很有可能重复!
2008-08-12 21:36
快速回复:帮忙看下哪里出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027658 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved