C++矩阵的加法 我尝试编写一个C++程序,它增加两个m×n矩阵。代码如下: /* Program: Add two (m x n) matrices */ #include <iostream> #include <conio.h> #define n 5 using namespace std; void inputMatrix (int MatX[][n],int m, int n0); void outputMatrix (int MatX[][n],int m, int n0); void addMatrix (int A[][n],int B[][n],int C[][n],int m, int n0); main() { /* Input Matrix Dimensions */ int m,n0; cout<<"Enter No. of (Rows,Columns) in Matrix: "; cin>>m>>n0; /* Initialize Matrices */ int MatA[m][n],MatB[m][n],MatC[m][n]; /* Input Matrix Elements */ cout<<"############### Matrix A ###############"<<endl; inputMatrix(MatA,m,n0); cout<<"############### Matrix B ###############"<<endl; inputMatrix(MatB,m,n0); /* Compute & Display Result */ addMatrix(MatA,MatB,MatC,m,n0); cout<<"########################################"<<endl; outputMatrix(MatC,m,n0); getch(); } void inputMatrix (int MatX[][n],int m, int n0) { for (int i = 0; i<m; i++) for (int j = 0; j<n0; j++) { cout<<"Element["<<i<<","<<j<<"] Value: "; cin>>MatX[i][j]; } } void outputMatrix (int MatX[][n],int m, int n0) { cout<<"########### Resultant Matrix ###########"<<endl; for (int i = 0; i<m; i++) { for (int j = 0; j<n0; j++) cout<<"X["<<i<<","<<j<<"] = "<<MatX[i][j]<<'\t'; cout<<endl; } } void addMatrix (int A[][n],int B[][n],int C[][n],int m, int n0) { for (int i = 0; i<n; i++) for (int j = 0; j<n; j++) C[i][j] = A[i][j] + B[i][j] ; } /* 1. Here, matrices A,B,C are 'm x n', but evaluations are made for 'm x n0'. int MatA[m][n],MatB[m][n],MatC[m][n]; where user chooses dimensions of matrices (m x n0) to work upon. This is because we have to initialize a matrix as A[][n] atleast. So we need atleast one parameter to be fixed for the compiler to allocate space. 2. Also, no Array values are returned explicitly. void inputMatrix (...) void outputMatrix (...) void addMatrix (...) */`

C++矩阵的加法 我尝试编写一个C++程序,它增加两个m×n矩阵。代码如下: /* Program: Add two (m x n) matrices */ #include <iostream> #include <conio.h> #define n 5 using namespace std; void inputMatrix (int MatX[][n],int m, int n0); void outputMatrix (int MatX[][n],int m, int n0); void addMatrix (int A[][n],int B[][n],int C[][n],int m, int n0); main() { /* Input Matrix Dimensions */ int m,n0; cout<<"Enter No. of (Rows,Columns) in Matrix: "; cin>>m>>n0; /* Initialize Matrices */ int MatA[m][n],MatB[m][n],MatC[m][n]; /* Input Matrix Elements */ cout<<"############### Matrix A ###############"<<endl; inputMatrix(MatA,m,n0); cout<<"############### Matrix B ###############"<<endl; inputMatrix(MatB,m,n0); /* Compute & Display Result */ addMatrix(MatA,MatB,MatC,m,n0); cout<<"########################################"<<endl; outputMatrix(MatC,m,n0); getch(); } void inputMatrix (int MatX[][n],int m, int n0) { for (int i = 0; i<m; i++) for (int j = 0; j<n0; j++) { cout<<"Element["<<i<<","<<j<<"] Value: "; cin>>MatX[i][j]; } } void outputMatrix (int MatX[][n],int m, int n0) { cout<<"########### Resultant Matrix ###########"<<endl; for (int i = 0; i<m; i++) { for (int j = 0; j<n0; j++) cout<<"X["<<i<<","<<j<<"] = "<<MatX[i][j]<<'\t'; cout<<endl; } } void addMatrix (int A[][n],int B[][n],int C[][n],int m, int n0) { for (int i = 0; i<n; i++) for (int j = 0; j<n; j++) C[i][j] = A[i][j] + B[i][j] ; } /* 1. Here, matrices A,B,C are 'm x n', but evaluations are made for 'm x n0'. int MatA[m][n],MatB[m][n],MatC[m][n]; where user chooses dimensions of matrices (m x n0) to work upon. This is because we have to initialize a matrix as A[][n] atleast. So we need atleast one parameter to be fixed for the compiler to allocate space. 2. Also, no Array values are returned explicitly. void inputMatrix (...) void outputMatrix (...) void addMatrix (...) */`,c++,C++,程序运行良好。 我的疑问是: 当使用矩阵A、B、C时,函数inputMatrix、outputMatrix、addMatrix如何使用MatA、MatB、MatC? 它们有单独的副本吗?他们是否直接处理原始地址? 如果我想用大小为“m x n”而不是“m x n0”的矩阵计算来实现程序,其中m,n由用户输入,我应该怎么做? 我将分别回答以下两个问题: 是的,将数组传递给函数就像传递它们的原始地址一样 您将使用动态分配,并处理堆而不是堆栈 为了完整起见,下面是一个关于动态分配的简单示例: int*

程序运行良好。 我的疑问是:

当使用矩阵A、B、C时,函数inputMatrix、outputMatrix、addMatrix如何使用MatA、MatB、MatC? 它们有单独的副本吗?他们是否直接处理原始地址? 如果我想用大小为“m x n”而不是“m x n0”的矩阵计算来实现程序,其中m,n由用户输入,我应该怎么做?
我将分别回答以下两个问题:

是的,将数组传递给函数就像传递它们的原始地址一样

您将使用动态分配,并处理堆而不是堆栈

为了完整起见,下面是一个关于动态分配的简单示例:

int** mat = new int*[m];
for (int = 0; i < m; ++i) {
    mat[i] = new int[n];
}
其中m,n由用户输入?最终你将学会如何使用向量和其他合适的容器。