#include<stdio.h>
#include<math.h>
#define m 10
void main()
{
int i,n;
float x[m],y[m],xgiven,yresult,yresult10,yresult20,yresult30,yresult11,yresult21,yresult31;
printf("\n<抛物线插值法>\n");
printf("请输入已知点个数(少于%d个):\n",m);
scanf("%d",&n);
printf("\n请输入已知坐标点:\n");
for(i=0;i<n;i++)
{
printf("\n点(%d)=",i);
scanf("%f%f",&x[i],&y[i]);
}
printf("\n请输入求解坐标点:");
scanf("%f",&xgiven);
if(xgiven<x[0]||xgiven>x[n-1])
printf("越界\n");
else
{
for(i=1;i<n-1;i++)
{
if(xgiven<=x[i])
{
if(i=1)
break;
else if(fabs(xgiven-x[i-1])<=fabs(x[i]-xgiven))
{
i=i-1;
break;
}
}
}
if(x[n-2]<xgiven&&xgiven<=x[n-1])
i=n-2;
yresult10=y[i-1]*(xgiven-x[i])*(xgiven-x[i+1]);
yresult11=(x[i-1]-x[i])*(x[i-1]-x[i+1]);
yresult20=y[i]*(xgiven-x[i-1])*(xgiven-x[i+1]);
yresult21=(x[i]-x[i-1])*(x[i]-x[i+1]);
yresult30=y[i+1]*(xgiven-x[i-1])*(xgiven-x[i]);
yresult31=(x[i+1]-x[i-1])*(x[i+1]-x[i]);
yresult=yresult10/yresult11+yresult20/yresult21+yresult30/yresult31;
printf("xgiven=%f,yresult=%f\n",xgiven,yresult);
}
}