我的任务是替换对角线矩阵上的向量和元素的元素。向量由用户输入,矩阵是随机的。例如,我编写向量:
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 << " ";
}
}