2017-05-02 108 views
-3

我试图写一个C++程序,增加了两个的(m×n)的矩阵。这里是代码:C++矩阵加

/* 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 (...) 
*/` 

该程序工作正常。 我的疑惑是:

  1. 当矩阵A,B的工作,C怎么办职能inputMatrix(),outputMatrix(),addMatrix工作在马塔,MATB,MATC? 他们有单独的副本吗?他们是否直接在原始地址上工作?
  2. 我应该怎么做,如果我想与尺寸“的M×N”(而不是“米×N0”),其中m的矩阵计算执行该方案,正由用户输入?
+0

***其中m,n是由用户输入***最终,你将学习如何使用向量和其他合适的容器。 – drescherjm

回答

-1

我会回答单独提出这两个问题如下:

  1. 是,通过阵列功能,就像路过原来的地址。

  2. 您将使用动态分配和堆而不是堆栈工作。

为了完整起见,这里是动态分配一个简单的例子:

int** mat = new int*[m]; 
for (int = 0; i < m; ++i) { 
    mat[i] = new int[n]; 
}