怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,要求达到以下三点功能:1、可手动输入矩阵的内容2、分别求出矩阵正反对角线之和3、以4*4的形式输出矩阵
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 20:24:05
怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,要求达到以下三点功能:1、可手动输入矩阵的内容2、分别求出矩阵正反对角线之和3、以4*4的形式输出矩阵
怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,
要求达到以下三点功能:
1、可手动输入矩阵的内容
2、分别求出矩阵正反对角线之和
3、以4*4的形式输出矩阵
怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,要求达到以下三点功能:1、可手动输入矩阵的内容2、分别求出矩阵正反对角线之和3、以4*4的形式输出矩阵
#include <stdio.h>
#include <string.h>
class Matrix
{
\x05double m_Data[16];
\x05double* m_pRowhead[4];
public:
\x05Matrix()
\x05{
\x05\x05memset(m_Data, 0, 16*sizeof(double));
\x05\x05for(int i = 0; i < 4; i++)
\x05\x05\x05m_pRowhead[i] = m_Data + i*4;\x05\x05
\x05}
\x05Matrix(const double* pArr)
\x05{
\x05\x05CopyFrom(pArr);
\x05\x05for(int i = 0; i < 4; i++)
\x05\x05\x05m_pRowhead[i] = m_Data + i*4;
\x05}
\x05Matrix(const Matrix& mat)
\x05{
\x05\x05CopyFrom(mat.m_Data);
\x05\x05for(int i = 0; i < 4; i++)
\x05\x05\x05m_pRowhead[i] = m_Data + i*4;
\x05}
\x05void CopyFrom(const double* pArr)
\x05{
\x05\x05memcpy_s(m_Data, 16*sizeof(double), pArr, 16*sizeof(double));
\x05}
\x05double* operator[] (int nRowIndex)
\x05{
\x05\x05return m_pRowhead[nRowIndex];
\x05}
\x05const double* operator[] (int nRowIndex) const
\x05{
\x05\x05return m_pRowhead[nRowIndex];
\x05}
\x05double GetDiagonalSum(bool bMainDiagonal = true) const
\x05{
\x05\x05double sum = 0.0;
\x05\x05int i;
\x05\x05if(bMainDiagonal)
\x05\x05{
\x05\x05\x05for(i = 0; i < 4; i++)
\x05\x05\x05\x05sum += m_pRowhead[i][i];
\x05\x05}
\x05\x05else
\x05\x05{
\x05\x05\x05for(i = 0; i < 4; i++)
\x05\x05\x05\x05sum += m_pRowhead[i][3-i];
\x05\x05}
\x05\x05return sum;
\x05}
\x05void PrintMatrix() const
\x05{
\x05\x05for(int i = 0; i < 4; i++)
\x05\x05{
\x05\x05\x05for(int j = 0; j < 4; j++)
\x05\x05\x05\x05printf_s("%.2lf\t", m_pRowhead[i][j]);
\x05\x05\x05printf_s("\n");
\x05\x05}
\x05}
};
void main()
{
\x05double a[16] = {1.0, 2.0, 3.0, 4.0,
\x05\x05\x05\x05\x055.0, 6.0, 7.0, 8.0,
\x05\x05\x05\x05\x059.0, 8.0, 7.0, 6.0,
\x05\x05\x05\x05\x055.0, 4.0, 3.0, 2.0};
\x05Matrix mat(a);
\x05mat[0][0] = 2.5;
\x05printf_s("主对角线之和为:%.4lf\n", mat.GetDiagonalSum());
\x05printf_s("副对角线之和为:%.4lf\n", mat.GetDiagonalSum(false));
\x05printf_s("打印矩阵:\n");
\x05mat.PrintMatrix();
}