输入循环 while 函数
Input Loop in While function
我有一个关于程序中看似无限的输入循环的快速问题。我确定它发生在 while 循环中,我想知道这是因为我的数学还是我的编码。虽然循环对我来说仍然是新的,所以任何帮助或解释都会很好!该程序是使用牛顿方法查找 z 的第 p 根、残差和循环之间改进的程序的开始。另外,我想知道 for 循环是否更适合我的目的。到目前为止:
#include <iostream>
#include <cmath>
using namespace std;
double Newton(double z, int p, double &x, double &n);
int main(){
double z, x, n, residual, bai, bri;
int p;
x = 1;
n = 1;
cin >> z >> p;
double roots = Newton(z, p, x, n);
cout.precision (5);
cout << "Input: z = " << z << ", p = " << p << endl << "Root = " << x << endl;
}
double Newton(double z, int p, double &x, double &n){
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
while (x != 0){
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
n++;
}
return x;
}
通常,使用浮点运算测试相等性是一个坏主意。 我不知道你的数学和/或编码是否正常,但我猜x
的可能性永远不会完全等于零。 考虑将其更改为类似 while (fabs(x) < 1e-10)
.
Nickie 对你的无限循环问题有一个很好的答案。我只是想补充一点,在这种情况下,您对 while 循环的使用很好,因为您没有明确的迭代变量。
例:
for (int i=0; i < 10; ++i) {
cout << i << endl;
}
很明显,变量i
表示迭代,因为它是在每次迭代结束时递增的迭代,也是作为延续条件进行测试的变量。
相比之下,循环使用 x
来测试连续性,而n
递增。对于 for 循环来说,这不是一个明确的案例。在您的案例中,for 循环如下所示:
double Newton(double z, int p, double &x, double &n) {
for (x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1)))))); x != 0; n++) {
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
}
return x;
}
这也不是很糟糕,但我认为 while 循环更清晰。
相关文章:
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- 在 while 循环中使用 pow() 函数 C++
- 为什么我的 while 函数没有终止?
- 有没有办法制作一个 c++ 宏(或类似的东西),它使用户语句被 while 循环的预定义函数包围?
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 在C++中调用while循环内的函数时出错
- 为什么我在这个函数中的while循环出现问题
- 控制使用 while 循环到达非空函数 (c++) 的末尾
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 简化 if 流函数的 while 循环中的大量 while 循环
- For 和 while 循环在全局定义的函数中不起作用
- 查找涉及 while 循环的运行时函数
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- C++创建一个类似于 while、if 或 for 的函数
- 是否有任何函数可用于在 c++ 编程中传输流程,以替代 while 或 do while 循环
- while 循环在一个函数调用中执行两次
- 返回类型 char* 的成员函数返回在 while 循环后包含不同字符串的地址
- 为什么我的 while 循环函数只返回"1"?
- c++函数while循环