我正在编写一些代码,作为从绝对基础知识学习C编程的一些任务练习的一部分,而且我遇到了一个问题,这可能很容易解决,但我和我一样。我完全卡住了!我正在编写一个程序来实现基本牛顿的区分方法。每当我向scanf()输入一个初始值时,程序就会停止,不返回任何内容,终止或冻结。任何帮助都会很棒。 以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//function to be used f(x) = cos(x)-x^3
//f'(x) = -sin(x)-3x^2
int main()
{
double x, xold;
printf("Enter an initial value between 0 and 1\n");
scanf("%lf",&xold);
double eps = 1e-12;
x = xold - ((cos(xold)-pow(xold,3))/(-(sin(xold)-(3*pow(xold,2)))));
while (fabs(x-xold)>eps)
{
x = xold - ((cos(xold)-pow(xold,3))/(-sin(xold)-(3*pow(xold,2))));
}
printf("The answer is %.12lf",x);
return 0;
};
答案 0 :(得分:2)
在你的while循环中:
x = xold - ((cos(xold)-pow(xold,3))/(-sin(xold)-(3*pow(xold,2))));
=
右操作数的值总是相同的,一旦输入它就怎么能退出循环呢?
答案 1 :(得分:0)
实际上你没有更新你的 xold 变量。请针对您的问题尝试以下修改过的代码,看看我是否做得正确:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double x, xold;
printf("Enter an initial value between 0 and 1\n");
scanf("%lf",&x);
double eps = 1e-12;
x = x - ((cos(x)-pow(x,3))/(-(sin(x)-(3*pow(x,2)))));
while (fabs(x - xold)>eps)
{
xold = x;
x = x - ((cos(x)-pow(x,3))/(-sin(x)-(3*pow(x,2))));
}
printf("The answer is %.12lf\n",x);
return 0;
}