do..while 循环不停止
do..while loop not stopping
我正在尝试创建间隔半潜水方法(数值方法),但在程序中有一个 do/while 循环,它无法正常工作:
double Funkcija(double x){
double result = -1/(1+abs(x));
return result;
}
...
double x[20] = {};
x[0] = 1; //initial point
int k = 1; // index (from 1 because 0 is giving (x0)
do
{
cout << "x[" << k << "]= ";
x[k] = x[k - 1] - pow(2, k - 1)*abs(d);
cout << x[k] << "\t";
cout << "f(x[" << k << "])= " << Funkcija(x[k]) << endl;
k++;
} while (Funkcija(x[k]) < Funkcija(x[k-1]));
我得到的是:
我需要在 x[4] 之前停止循环,因为 f(x[3]) > f(x[2]),也许有人看到我的错误?
这是一个 "off by one" 错误。您在循环测试之前增加了 k
,因此您正在测试错误的索引 - 比较 k - 1
和 k - 2
处的元素,一切都应该没问题。
请注意,如果您在调试器中单步执行代码,一边检查变量,那么错误很快就会变得明显。当您学习编程时,这是一项重要的技能。
我正在尝试创建间隔半潜水方法(数值方法),但在程序中有一个 do/while 循环,它无法正常工作:
double Funkcija(double x){
double result = -1/(1+abs(x));
return result;
}
...
double x[20] = {};
x[0] = 1; //initial point
int k = 1; // index (from 1 because 0 is giving (x0)
do
{
cout << "x[" << k << "]= ";
x[k] = x[k - 1] - pow(2, k - 1)*abs(d);
cout << x[k] << "\t";
cout << "f(x[" << k << "])= " << Funkcija(x[k]) << endl;
k++;
} while (Funkcija(x[k]) < Funkcija(x[k-1]));
我得到的是:
我需要在 x[4] 之前停止循环,因为 f(x[3]) > f(x[2]),也许有人看到我的错误?
这是一个 "off by one" 错误。您在循环测试之前增加了 k
,因此您正在测试错误的索引 - 比较 k - 1
和 k - 2
处的元素,一切都应该没问题。
请注意,如果您在调试器中单步执行代码,一边检查变量,那么错误很快就会变得明显。当您学习编程时,这是一项重要的技能。