C++ 在处理多维数组时,为什么循环中的内部语句在计数器仍在运行时不执行?
我正在解决一个问题,以消除增广矩阵,以解决线性方程使用线性代数 我用二维数组来处理这个问题。然而,我遇到了一个问题。我用来消除的函数是一个循环,但当计数器仍在运行时,不会执行内部语句。因此,整个循环无法正确完成 这是我的密码:C++ 在处理多维数组时,为什么循环中的内部语句在计数器仍在运行时不执行?,c++,arrays,loops,void,C++,Arrays,Loops,Void,我正在解决一个问题,以消除增广矩阵,以解决线性方程使用线性代数 我用二维数组来处理这个问题。然而,我遇到了一个问题。我用来消除的函数是一个循环,但当计数器仍在运行时,不会执行内部语句。因此,整个循环无法正确完成 这是我的密码: #include <iostream> #include <vector> using namespace std; vector <int> Row; vector <vector <int> > M;
#include <iostream>
#include <vector>
using namespace std;
vector <int> Row;
vector <vector <int> > M;
void swap(vector <vector <int> > &M, int i, vector <vector <int> > &N, int j);
void reduce(int rank, vector <vector <int> > &M);
int search_nonzero(int rank, vector <vector <int> > &M, int j);
int main(){
cout << "plz enter the size of linear equation:";
int rank;
cin >> rank;
int value = 0;;
cout << "plz enter the value" << endl;
for (int initial = 0; initial <= rank; ++initial){
Row.push_back(value);
}
for (int i = 0; i <= rank-1; ++i){
for (int j = 0; j <= rank; ++j){
cout << "m[" << i+1 <<"][" << j+1 << "]:";
cin >> value;
Row[j] = value;
}
M.push_back(Row);
}
reduce(rank, M);
cout << "the operated matrix is: " << endl;
for (int i = 0; i <= rank-1; ++i){
for (int j = 0; j <= rank; ++j){
cout << M[i][j] << " ";
}
cout << endl;
}
}
我使用VisualStudio一步一步地调试它。问题在void函数reduce()中。当j增加时,句子“M[i][j]=M[i][j]-M[rank-s-1][j]*M[i][rank-s-1]/M[rank-s-1][rank-s-1];”只在j=0时执行一次,但没有在j=1、j=2等情况下执行
那么我的代码有什么问题?我猜这是由于引用调用问题,在这个问题中,当j=2等时,这个多维数组的值没有改变,尽管计数器j改变了
多谢各位 错误在于,您正在执行整数运算,而您显然希望使用浮点运算。将向量更改为
向量
我复制了你的代码。我在调试器下运行了它,我看到您关心的行每次都被执行,j=0、j=1、j=2等等。我猜您在使用调试器的方式上犯了错误。我认为代码没有太大的错误。当您输入与我运行相同的输入时,是否得到相同的结果?或者你可以得到另一个结果?在我的示例运行中,每次当j++时,这个句子只在j=0或j=0和j=1时起作用。我在win7下使用了linux和visualstudio,但两者都得到了相同的结果。非常感谢。奇怪,是的,我输入了相同的数据,我也在使用win7下的Visual Studio。在我的运行中,输入所有输入后,过程是:1)**s=2,I=1,j=0,m=(4,5,6,7)(5,6,4,8)(1,2,5,9)**s=2,I=1,j=0,m=(4,5,6,7)(0,6,4,8)(1,2,5,9)**3)**s=2,I=1,j=1,m=(4,5,6,7)(0,4,5,8)应该是,但它没有改变]……等等。所以我想知道当j增加到1时,里面的句子没有被执行。你看到的是整数运算造成的截断。该行正在执行,但它对您拥有的数字没有影响。看看我的答案。谢谢你的回答。但是,当我将其更改为vector>时,它仍然像以前的版本一样工作。真奇怪…:(
void swap(vector <vector <int> > & M, int i, vector <vector <int> > &N, int j){
vector <vector <int> > temp;
temp.push_back(M[i]);
M[i] = N[j];
N[j] = temp[0];
}
int search_nonzero(int rank, vector <vector <int> > & M, int j){
for (int s = rank-1; s >= 1; s--){
if (M[s][j] != 0)
return s;
}
}
void reduce(int rank, vector <vector <int> > & M){
for (int s = rank-1; s > 0; s--){
for (int i = rank-s; i < rank; ++i){
for (int j = rank-s-1; j <= rank; ++j){
if (M[rank-s-1][rank-s-1] == 0){
swap(M, i-1, M, search_nonzero(rank, M, j));
}
else
M[i][j] = M[i][j] - M[rank-s-1][j]*M[i][rank-s-1]/M[rank-s-1][rank-s-1];
}
}
}
}
plz enter the size of linear equation: 3
plz enter the value
m[1][1]= 4
m[1][2]= 5
m[1][3]= 6
m[1][4]= 7
m[2][1]= 5
m[2][2]= 6
m[2][3]= 4
m[2][4]= 8
m[3][1]= 1
m[3][2]= 2
m[3][3]= 5
m[3][4]= 9
the operated matrix is:
4 5 6 7
0 6 4 8
0 0 5 9