使用malloc和指针替换矩阵中的向量



我的任务是替换对角线矩阵上的向量和元素的元素。向量由用户输入,矩阵是随机的。例如,我编写向量:

1 2 3 

,随机矩阵是

7 0 0
0 3 0
0 0 8

我必须得到这个

1) 7 3 8

2) 
    1 0 0
    0 2 0
    0 0 3

我得到的第一部分,但是第二部分我被堆叠了。这是输入向量:

int size;
  std::cout << ("Enter the dimentoinal of vector and matrix (enter one number): ");
  std::cin >> size;
  int * arrayPtr = (int*) calloc(size,sizeof(int)); 
  if (arrayPtr == NULL) exit (1);                   
  for (int ix = 0; ix < size; ix++)                 
  {
    std::cout << "Enter element #" << ix<< "   ";
    std::cin >> arrayPtr[ix];
  }
 system ("clear") ;
  std::cout << "nnResulting vector is:n[ ";
  for (int ix = 0; ix < size; ix++)    
  {             
      std::cout << arrayPtr[ix] << " ";
  }
      cout << "]nnn" ;

这是无效的代码(在屏幕上是不正确的结果(:

cout << "The new matrix is :n" ;
int * matr_n = (int*) calloc(size,sizeof(int));
    cout << "n" ;
   for (int ix = 0 ; ix<size; ix++)
   {
       matr_n = &arrayPtr[ix] ;
       cout << *matr_n << "  " ;
        for (int i = 0; i<size; i++)
        {
          cout << "n" ;
          for (int j = 0; j<size; j++)
            {
               if (i==j)
                  {
                    cout << *matr_n << " " ;
                   }
               else 
                 cout << 0 << " " ;
            }
      }
}

我知道问题在于使用指针或malloc/calloc功能,但是对于初学者来说,很难快速捕获它。您可以修复吗?

打印矩阵的内部循环应与计算其值的循环分开。

换句话说,您需要如下更改代码的底部:

for (int ix = 0; ix < size; ix++)
{
    matr_n = &arrayPtr[ix];
    std::cout << *matr_n << "  ";
}
for (int i = 0; i<size; i++)
{
    std::cout << "n";
    for (int j = 0; j<size; j++)
    {
        if (i == j)
        {
            std::cout << *matr_n << " ";
        }
        else
            std::cout << 0 << " ";
    }
}

最新更新