#include <stdio.h> #include <stdlib.h> #include <math.h> double f(double x){ double y=pow(x,5)- 15 * pow(x,4)+ 85 * pow(x,3)- 225 * pow(x,2)+ 274 * x - 121; return y; } int main() { double a=1.5,b=2.4; double mid; while(a<=b){ mid=(a+b)/2; if(f(mid)==0){ printf("%.6lf",mid); return 0; } else{ if(f(mid)<0){ b=mid; } else{ a=mid; } } } return 0; }能帮我优化一下这个代码吗
时间: 2023-12-21 11:06:15 浏览: 90
可以考虑使用递归来进行二分法的搜索,这样可以使代码更简洁易懂。同时,可以将精度控制放入循环中,让程序能够在一定精度下得到解。
以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x){
double y=pow(x,5)- 15 * pow(x,4)+ 85 * pow(x,3)- 225 * pow(x,2)+ 274 * x - 121;
return y;
}
double bisection(double a, double b, double eps) {
double mid = (a + b) / 2;
if (fabs(b - a) < eps) { // 当区间长度小于精度时停止递归
return mid;
} else if (f(mid) == 0) {
return mid;
} else if (f(mid) < 0) {
return bisection(a, mid, eps); // 在左半区间继续递归
} else {
return bisection(mid, b, eps); // 在右半区间继续递归
}
}
int main() {
double a = 1.5, b = 2.4;
double eps = 1e-6; // 精度控制
double ans = bisection(a, b, eps);
printf("%.6lf", ans);
return 0;
}
```
使用递归可以使代码更加简洁,同时可以方便地控制精度。
阅读全文