C++ 大家看看我这个程序那里错了,我是初学者

2024-12-21 18:08:00
推荐回答(4个)
回答1:

#include
#include
using namespace std;
int c[3][3];
void Matadd();
void show(int c[3][3]); //返回类型与定义时不一致,已由int变为void

int a[3][3] = {{1,2,-1},
{-2,1,0},
{1,0,3}};
int b[3][3] = {{5,7,8},
{2,-2,4},
{1,1,1}};
int main()
{

Matadd();

show(c);
cout<<4;
return 0; //你少了这步
}
void Matadd(){

for (int i = 0;i < 3; i ++)
for (int j = 0;j < 3; j ++){
c[i][j] = a[i][j] + b[i][j];
}
}
void show(int c[][3])
{

for (int i = 0;i < 3; i ++)
{ for (int j = 0;j < 3; j ++)
cout< cout< }
}
你的问题还不少呢,上面的注释并不是所有你的错误,还有其他错误,因为说不清所以没打出来,你还犯了逻辑性错误,我顺手改了,你没有输出原来两个矩阵的数,这个你自己应该会吧。
从你的错误点来分析,你对函数的定义和用法比较模糊,建议去看看函数那章

回答2:

#include

using namespace std;

class CMatrix
{
public:
CMatrix(unsigned long m,unsigned long n);
CMatrix(CMatrix& A); // COPY构造函数,必须要。
CMatrix(){_m=0;_n=0;_data=NULL;}//无参数构造函数,必须要。
~CMatrix(){if(_data!=NULL)delete _data;}

void DisplayOnCMD();
bool SetCell(unsigned long x,unsigned long y,double data);
double GetCell(unsigned long x,unsigned long y);
unsigned long GetM(){return _m;}
unsigned long GetN(){return _n;}
CMatrix operator+(const CMatrix &A);
CMatrix operator=(const CMatrix &A);
private:
unsigned long _m,_n;
double* _data;
};

CMatrix::CMatrix(unsigned long m,unsigned long n)
{
_m=m;_n=n;
_data=new double[_m*_n];
for(int i=0;i<_m*_n;i++)
_data[i]=0;
}

CMatrix::CMatrix(CMatrix& A)
{
_m=A._m;_n=A._n;
_data=new double[_m*_n];
for(int i=0;i<_m*_n;i++)
_data[i]=A._data[i];
}

bool CMatrix::SetCell(unsigned long x,unsigned long y,double data)
{
if(_data==NULL)throw;
_data[x*_n+y]=data;

return true;
}

double CMatrix::GetCell(unsigned long x,unsigned long y)
{
if(_data==NULL)throw;
return _data[x*_n+y];
}

CMatrix CMatrix::operator+(const CMatrix &A)
{
CMatrix CMTemp(_m,_n);

for(int i=0;i<_m*_n;i++)
CMTemp._data[i]=_data[i]+A._data[i];

return CMTemp;
}

CMatrix CMatrix::operator=(const CMatrix &A)
{
if(&A==this)return *this;
if(_data==NULL)CMatrix(A);

for(int i=0;i<_m*_n;i++)
_data[i]=A._data[i];
return *this;
}

void CMatrix::DisplayOnCMD()
{
if(_data==NULL)return;
for(int i=0;i<_m*_n;i++)
{
if(i%_n==0)cout< cout<<_data[i]<<" ";
}
cout<}

int main(void)
{
unsigned long m,n;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;

CMatrix A(m,n);
CMatrix B(m,n);
CMatrix C(m,n);

for(int i=0;i for(int k=0;k {
A.SetCell(i,k,i+k);
B.SetCell(i,k,i+k*2);
}
cout<<"Auto Test:"< cout<<"A:";A.DisplayOnCMD();
cout<<"B:";B.DisplayOnCMD();
C=A+B;
cout<<"A+B=C,C:";C.DisplayOnCMD();

cout<<"A:";A.DisplayOnCMD();
cout<<"B:";B.DisplayOnCMD();
A.SetCell(1,2,100);
A.DisplayOnCMD();
cout< return 0;
}

回答3:

int Matadd(int a[][3],int b[][3]);
int show(int c[3][3]);

这2条不知道你想表达的是什么?

void Matadd();
void show();

调用时不需要使用void,这个是定义对象属性的。

太久不碰c++,语法大概还会有错,你看个意思
#include
using namespace std;
int a[3][3] = {{1,2,-1},
{-2,1,0},
{1,0,3}};
int b[3][3] = {{5,7,8},
{2,-2,4},
{1,1,1}};
int c[3][3];
int main()
{
show();
}

void Matadd(){
for (int i = 0;i < 3; i ++)
for (int j = 0;j < 3; j ++){
c[i][j] = a[i][j] + b[i][j];
}
}
void show(){
void Matadd();
for (int i = 0;i < 3; i ++)
for (int j = 0;j < 3; j ++){
cout< }
}

当然,这样就吧 int c[3][3]放在外面作为全局变量了,如果想用参数的话可以改一下函数声明和调用,我记得大约是这样,你可以搜一下
show(&c[i][j]);

void show(ref c[i][j]){
void Matadd();
for (int i = 0;i < 3; i ++)
for (int j = 0;j < 3; j ++){
cout< }
}

回答4:

int Matadd(int a[][3],int b[][3]);
int show(int c[3][3]);
C++从来没有这种写法