这个的话可以不用二分法,直接枚举,就是利用区间取判断,设置一个x,在x1=x-0.05 到x2=x+0.05这个范围之内,如果说f(x1)<0&&f(x2)>0 就是说明 f(x)=0 一定在x1 和 x2之间成立,就输出x即可,
#include<stdio.h>
#include<math.h>
double n;
double f(double x){
return n-x*x*x;
}
int main(){
scanf("%lf",&n);
if(n<0){
n=n*(-1);
printf("-");
}
for(double x=0;x<=n*100;x++){
double x1=(x-0.5)/10;
double x2=(x+0.5)/10;
if(f(x1)*f(x2)<0||f(x1)==0){
printf("%.1lf",x/10);
}
}
return 0;
} 第二种的话就是利用二分法去实现的,很久之前看过的一个关于三元方程解法的题目可以用在这里做参考,其实大同小异
#include<stdio.h>
double n;
double f(double x){
return n-x*x*x;
}
int main(){
scanf("%lf",&n);
if(n<0){
n=n*-1;
printf("-");
}
for(double x=0;x<=n/3;x++){
double x1=x,x2=x+1;
if(f(x1)==0){
printf("%.1lf\n",x1);
}else if(f(x1)*f(x2)<0){
while(x2-x1>=0.00001){
double xx=(x2+x1)/2;
if(f(x1)*f(xx)<=0){
x2=xx;
}else{
x1=xx;
}
}
printf("%.1lf\n",x1);
}
}
}

京公网安备 11010502036488号