Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在处理多维数组时,为什么循环中的内部语句在计数器仍在运行时不执行?_C++_Arrays_Loops_Void - Fatal编程技术网

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