怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,求详细程序!

要求达到以下三点功能:
1、可手动输入矩阵的内容
2、分别求出矩阵正反对角线之和
3、以4*4的形式输出矩阵

#include <stdio.h>
#include <string.h>

class Matrix
{
double m_Data[16];
double* m_pRowhead[4];
public:
Matrix()
{
memset(m_Data, 0, 16*sizeof(double));
for(int i = 0; i < 4; i++)
m_pRowhead[i] = m_Data + i*4;
}
Matrix(const double* pArr)
{
CopyFrom(pArr);
for(int i = 0; i < 4; i++)
m_pRowhead[i] = m_Data + i*4;
}
Matrix(const Matrix& mat)
{
CopyFrom(mat.m_Data);
for(int i = 0; i < 4; i++)
m_pRowhead[i] = m_Data + i*4;
}
void CopyFrom(const double* pArr)
{
memcpy_s(m_Data, 16*sizeof(double), pArr, 16*sizeof(double));
}
double* operator[] (int nRowIndex)
{
return m_pRowhead[nRowIndex];
}
const double* operator[] (int nRowIndex) const
{
return m_pRowhead[nRowIndex];
}
double GetDiagonalSum(bool bMainDiagonal = true) const
{
double sum = 0.0;
int i;
if(bMainDiagonal)
{
for(i = 0; i < 4; i++)
sum += m_pRowhead[i][i];
}
else
{
for(i = 0; i < 4; i++)
sum += m_pRowhead[i][3-i];
}
return sum;
}
void PrintMatrix() const
{
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
printf_s("%.2lf\t", m_pRowhead[i][j]);
printf_s("\n");
}
}
};

void main()
{
double a[16] = {1.0, 2.0, 3.0, 4.0,
5.0, 6.0, 7.0, 8.0,
9.0, 8.0, 7.0, 6.0,
5.0, 4.0, 3.0, 2.0};
Matrix mat(a);
mat[0][0] = 2.5;
printf_s("主对角线之和为:%.4lf\n", mat.GetDiagonalSum());
printf_s("副对角线之和为:%.4lf\n", mat.GetDiagonalSum(false));
printf_s("打印矩阵:\n");
mat.PrintMatrix();
}

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-15
#include <iostream>
using namespace std;
class Matrix
{
int a[4][4];
public:
void input();
void compute();
void output();
};
void Matrix::input()
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
cin>>a[i][j];

}
void Matrix::compute()
{
int sum1 = 0,sum2 = 0;
for(int i=0;i<4;i++)
{
sum1 += a[i][i];
sum2 += a[i][3-i];
}
cout<<"矩阵的正对角线之和:"<<sum1<<endl;
cout<<"矩阵的负对角线之和:"<<sum2<<endl;
}
void Matrix::output ()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void main()
{
Matrix m;
m.input ();
m.compute ();
m.output ();
}本回答被网友采纳
相似回答