下面的两个程序输出有什么不同,为什么第二个运行之后得不出X的值???
程序一较复杂 可运行~~#include<stdio.h>
#include<math.h>
float f(float x);
float ss(float x0,float h,int n);
float rf(float a,float b);
float a,b,x;
int j;
int main()
{
float x0,h;
int n;
printf("please input x0 , h , n:\n");
scanf("%f,%f,%d",&x0,&h,&n);
ss(x0,h,n);
printf("方程x*x*x-x-1=0的根x:\n");
x=rf(a,b);
printf("%f\n",x);
printf("需要二分的次数为:%d\n",j);
return 0;
}
float f(float x)
{
return x*x*x-x-1;
}
float ss(float x0,float h,int n)
{ int i;
a=x0;
b=x0;
for(i=1;i<=n;i++)
{ if(f(a)*f(b)<0)
break;
a=a-h;
}
for(i=1;i<=n;i++)
{
if(f(a)*f(b)<0)
break;
b=b+h;
}
if(a==x0)
{ a=b-h;
printf("a,b的值为:");
printf("a=%f,b=%f\n",a,b);
}
else
{
b=a+h;
printf("a,b的值为:");
printf("a=%f,b=%f\n",a,b);
}
return 0;
}
float rf(float a,float b)
{ j=0;
while(fabs(b-a)>=0.001)
{
j++;
if (f((a+b)/2)==0)
return (a+b)/2;
if (f((a+b)/2)*f(a)<0)
b=(a+b)/2;
if (f((a+b)/2)*f(b)<0)
a=(a+b)/2;
}
return (a+b)/2;
}
程序二是程序一的简化:具体问题是运行后输入a,b的值后就停下来了,没有算出x的值
#include<stdio.h>
#include<math.h>
int j;
float a,b,x;
float f(float x);
float rf(float a,float b);
int main()
{
printf("请输入函数的区间a,b的值:\n");
scanf("%f,%f",&a,&b);
printf("方程x*x*x-x-1的根x: \n");
x=rf(a,b);
}
float f(float x)
{
return x*x*x-x-1;
}
float rf(float a,float b)
{ j=0;
while(fabs(b-a)>=0.01)
{
j++;
if (f((a+b)/2)==0)
return (a+b)/2;
if (f((a+b)/2)*f(a)<0)
b=(a+b)/2;
if (f((a+b)/2)*f(a)>0)
a=(a+b)/2;
}
return (a+b)/2;
}
[[it] 本帖最后由 crz03128 于 2008-6-17 21:05 编辑 [/it]]