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

学习 时间:2026-04-07 21:30:54 阅读:8490
怎么用C++定义一个4*4的矩阵,自己构造数据成员和成员函数,要求达到以下三点功能:1、可手动输入矩阵的内容2、分别求出矩阵正反对角线之和3、以4*4的形式输出矩阵

最佳回答

健康的羊

感动的丝袜

2026-04-07 21:30:54

#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();} 

最新回答共有2条回答

  • 呆萌的灰狼
    回复
    2026-04-07 21:30:54

    #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();} 

上一篇 It takes Danny about 20 minutes to get to school.

下一篇 带 近义词 四字词语