84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
运行结果不正确,不知道为什么,希望能够得到指教。
#include <iostream> #include <math.h> using namespace std; int main(){ double a,x,y; cin>>a; do{ x = a; y = (2/3)*x+a/(3*x*x); x=y; } while(fabs(a-x) < 0.00001); cout<<x<<endl; }
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
更新:这你也注意一下边界条件吧, 如果我的值为0,需要单独处理一下
#include <iostream> #include <math.h> using namespace std; int main(){ double a,x,y; cin>>a; x = a; // 不应该放在循环体内 do{ y=(2/3.0)*x+a/(3*x*x); //精度问题 2/3会自动转为0 x=y; }while(fabs(a-x*x*x)>0.0001); // 应该用立方去比较, 大于小于号写反 cout<<x<<endl; }
x = a; y = (2/3)*x+a/(3*x*x); x=y;
问题:1>.如果程序进行迭代,a的值是不改变的,会导致x的值一直为输入的值。应该写成x = ((2.0) / 3)*x + a / (3 * x*x); //将 x=a 放在do语句之前2>.(2/3)的值为0.如果想计算浮点数的话,应该写为(2.0/3)上面两个是程序错误。
while(fabs(a-x) < 0.00001);
问题:3>.while语句的判断条件第一次迭代以后返回的bool值即为0,此时跳出循环。
回答的要是有哪儿不对的,谢谢指出
更新:这你也注意一下边界条件吧, 如果我的值为0,需要单独处理一下
问题:
1>.如果程序进行迭代,a的值是不改变的,会导致x的值一直为输入的值。应该写成
x = ((2.0) / 3)*x + a / (3 * x*x); //将 x=a 放在do语句之前
2>.(2/3)的值为0.如果想计算浮点数的话,应该写为(2.0/3)
上面两个是程序错误。
while(fabs(a-x) < 0.00001);
问题:3>.while语句的判断条件第一次迭代以后返回的bool值即为0,此时跳出循环。
回答的要是有哪儿不对的,谢谢指出