Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 - Fatal编程技术网

C代码行什么都不做

C代码行什么都不做,c,C,我目前在我的C代码中遇到了一些奇怪的行为。我想用高斯消去法来处理一个矩阵,它被用作一个类似于 typedef struct { int nrows; int ncols; double **row; } Matrix; 我遇到的唯一问题是,当使用此代码行解决高斯消去步骤时: A->row[zeile][0] = A->row[zeile][0] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][0]; A-

我目前在我的C代码中遇到了一些奇怪的行为。我想用高斯消去法来处理一个矩阵,它被用作一个类似于

typedef struct {
  int nrows;
  int ncols;
  double **row;
} Matrix;
我遇到的唯一问题是,当使用此代码行解决高斯消去步骤时:

A->row[zeile][0] = A->row[zeile][0] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][0];
A->row[zeile][1] = A->row[zeile][1] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][1];
A->row[zeile][2] = A->row[zeile][2] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][2];
它不适用于for循环,因此我将算法的步骤1编写为单个命令。当运行上述代码时,只有代码的第一行更改矩阵的元素。第2行和第3行不更改任何值。 当注释掉第1行并再次运行我的程序时,第2步和第3步会按预期更改矩阵元素

我真的不理解我的程序的这种奇怪的行为。我希望有人能帮我。谢谢。

需要基于原始值集进行更新

A->row[zeile][0] = A->row[zeile][0] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][0];
//                                        not original values
//                                        v                   v                   v
A->row[zeile][1] = A->row[zeile][1] - (A->row[zeile][0] / A->row[0][0]) * A->row[0][1];
相反,类似于


我们需要一个.a->row[zeile][1]=a->row[zeile][1]-a->row[zeile][0]/a->row[0][0]*a->row[0][1];使用->行[zeile][0]的更新值,而不是原始值。这是代码的真实意图吗?谢谢你,楚克斯。我觉得我有点瞎了。我忽略了,我使用了更新的值。我的第一个想法是:…原始值集…@slashmais不清楚为什么在这里使用“魔法”主要是指依赖代码中的副作用/发生的事情,而没有显式编码,简单的例子:我总是在使用std::I或ostream时添加close,我对智能指针有一种内置的不信任,惊恐地等待着接线员的到来。。最后一个会引起很多麻烦,我想:-PS:“eth”的意思是…?@slashmais我想。。为了?而不是。。也许是另一种习俗。
// Save some of the original values
double A_0_0 = A->row[0][0];
double A_0[3] = { A->row[0][0], A->row[0][1], A->row[0][2] };

for (zeile = 0; zeile < 3; zeile++) 
  double A_zeile_0 = A->row[zeile][0];
  for (c = 0; c < C; c++) 
    A->row[zeile][c] -= (A_zeile_0 / A_0_0) * A_0[c];