用二次插值法算最优解,在VC++6.0上无错误无警告,但是得不到结果,请各位大侠看看这个程序哪有问题?

#include <math.h>
#include <stdio.h>
long double f(long double x)
{
long double y;
y=x*x-2*x+1;
return y;
}
void main()
{ long double a,b,f1,f2,f3,c,a0,a1,a2,a3,e,h,x0,x1,x2,x3,y0,y1,y2,y3;
printf ("请输入 初始值a0,初始步长h,精度e\n");
scanf ("%f,%f,%f",&a0,&h,&e);
a1=a0;a2=a0+e;f1=f(a1);f2=f(a2);
if (f1>f2)
A: {e=2*e;a3=a2+e;f3=f(a3);
if (f3>f2)
{a=a0;b=a3;}
else {a2=a3;f2=f3;goto A;}
}
else
B:{e=2*e;a3=a1-e;f3=f(a3);
if (f3>f1)
{a=a3;b=a2;}
else {a1=a3;f1=f3;goto B;}
c=(a+b)/2;
x1=a;x2=c;x3=b;
C: x0=((x2*x2-x3*x3)*y1+(x3*x3-x1*x1)*y2+(x1*x1-x2*x2)*y3)/2*((x2-x3)*y1+(x3-x1)*y2+(x1-x3)*y3);
y0=f(x0);
if ((x0-x2)>=-h&&(x0-x2)<=h)
{if (y0>=y2)
{x0=x2;y0=y2;printf ("%f,%f\n",x0,y0);}
else if ((x0-x2)<0)
{if(y0>=y2)
{x1=x0;y1=y0;goto C;}
else {x3=x2;y3=y2;x2=x0;y2=y0;goto C;}
}
else if (y0>=y2)
{x3=x0;y3=y0;goto C;}
else {x1=x2;y1=y2;x2=x0;y2=y0;goto C;}
}
}
}

"if ((x0-x2)>=-h&&(x0-x2)<=h)"
这一句没有匹配的else语句
条件不满足程序直接退出了,当然没有结果输出
没看懂你的程序,所以只能帮到这儿了。
e不是精度吗?怎么有a2=a0+e?
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-23
hsb jjdtjjjjjhherjem67rem6rn88888888888

各位大侠 :请问怎样设置CMOS密码 ?设置后怎样去掉?
更改系统时间和日期的具体方法是:进入CMOS Setup主菜单,选择第一项Standard CMOS Features(标准CMOS功能设置),按Enter键进入它的子菜单;在^38060101g^7所示在子菜单中通过移动方向键选中第一项Date(mm:dd:yy)项(mm:dd:yy表示月:日:年),按Page Up或Page Down键改变日期数值;设置时间的方法类似:在子菜单中将光...

相似回答
大家正在搜