这个怎么把for文转变为while文 #include #include #define E 0.00001 extern double f(double x); void main() { double a=-3.0,b=3.0,c; for(;;) { if(fabs(b-a) < E) break; c=(a+b)/2.0; if(f(c)==0.0) break; else if(f(a)*f(c) > 0.0) a=c; else b=c; } printf("x=%10.5f\n",c); } double f(double x) { return(x*x*x+3.0*x*x+3.0*x+1.0); }
for(;;)换成whie(true)就可以了。代码如下:
#include <math.h>
#include <stdio.h>
#define E 0.00001
extern double f(double x);
void main()
{
double a=-3.0,b=3.0,c;
while(true) //for(;;)
{
if(fabs(b-a) < E)
break;
c=(a+b)/2.0;
if(f(c)==0.0)
break;
else if(f(a)*f(c) > 0.0)
a=c;
else b=c;
}
printf("x=%10.5f\n",c);
}
double f(double x)
{
return(x*x*x+3.0*x*x+3.0*x+1.0);
}
你代码里都是用break退出循环,for就是个无条件死循环,和while(true)是一样的效果,所以直接换成while(true)就满足你需求了
如果希望while有终止条件,那么这么写
#define E 0.00001
extern double f(double x);
void main()
{
double a = -3.0, b = 3.0, c = (a + b) / 2.0;;
while ((fabs(b - a) >= E) && f(c) != 0)
{
if(f(a)*f(c) > 0.0)
a=c;
else
b=c;
c = (a + b) / 2;
}
printf("x=%10.5f\n",c);
}
double f(double x)
{
return(x*x*x+3.0*x*x+3.0*x+1.0);
}
while(abs(b-a) < E || f(c)==0.0)
{
c=(a+b)/2.0;
if(f(a)*f(c) > 0.0)
a=c;
else
b=c;
}
#include #include
#define E 0.00001 extern double f(double x);
void main() {
double a=-3.0,b=3.0,c;
while(abs(b-a) < E || f(c) == 0.0){
c = (a + b) / 2.0;
if(f(a) * f(c) > 0.0){
a = c;
}else{
b = c;
}
printf("x=%10.5f\n",c);
}
double f(double x) {
return(x*x*x+3.0*x*x+3.0*x+1.0);
}
你原代码的include导入库应该有问题,记得回去贴回原来的库