#include<stdio.h> #include<math.h> int main() { double fx,gx,x=0.0,a=0.01; int i=0; fx=(x-1)*(x-1)*3-2.4; gx=6*(x-1); for(x=0.0;abs(gx)>1e-5;i++) { gx=6*(x-1); x=x-a*gx; } printf("%f %d",x,i); }为什么实现不了呢?
时间: 2023-09-20 08:03:02 浏览: 67
C标准库函数集
5星 · 资源好评率100%
这段代码的问题在于在for循环中,x的初始值为0.0,而fx和gx的计算中都涉及到了x的值,导致一开始就计算出了错误的fx和gx值。您可以将for循环移到计算完fx和gx之后再进行,同时将x的初始值改为1.0。修改后的代码如下:
```c
#include <stdio.h>
#include <math.h>
int main() {
double fx, gx, x = 1.0, a = 0.01;
int i = 0;
fx = (x - 1) * (x - 1) * 3 - 2.4;
gx = 6 * (x - 1);
while (fabs(gx) > 1e-5) {
gx = 6 * (x - 1);
x = x - a * gx;
fx = (x - 1) * (x - 1) * 3 - 2.4;
i++;
}
printf("%f %d", x, i);
return 0;
}
```
请注意,此处的fabs函数用于求绝对值,需要包含math.h头文件。
阅读全文