# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltiostream.h & gt
typedef結構數據
{
浮動x;
浮動y;
}數據;//變量x和函數值y的結構
數據d[20];//最多20組數據
Float f(int s,int t)//牛頓插值法,用於返回商。
{
如果(t==s+1)
return (d[t]。y-d[s]。y)/(d[t]。x-d[s]。x);
其他
return (f(s+1,t)-f(s,t-1))/(d[t]。x-d[s]。x);
}
浮點牛頓(浮點x,整數)
{
int n;
while(1)
{
cout & lt& lt"請輸入n個值(即n次插值):";//獲取插值次數
CIN & gt;& gtn;
如果(n & lt=count-1)//插值次數不得大於count-1次。
打破;
其他
系統(“cls”);
}
//初始化t,y,yt。
float t = 1.0;
浮點y=d[0]。y;
float yt = 0.0
//計算y值
for(int j = 1;j & lt= n;j++)
{
t=(x-d[j-1]。x)* t;
yt=f(0,j)* t;
//cout & lt;& ltf(0,j)& lt;& ltendl
y = y+yt;
}
返回y;
}
浮點拉格朗日(浮點x,整數計數)
{
float y = 0.0
for(int k = 0;k & lt數數;K++)//這裏的默認值是count-1插值。
{
浮點p = 1.0;//初始化p
for(int j = 0;j & lt數數;j++)
{//計算p的值。
if(k==j)繼續;//判斷是否是同壹個號碼。
p=p*(x-d[j])。x)/(d[k]。x-d[j]。x);
}
y=y+p*d[k]。y;//總和
}
返回y;//返回y的值。
}
void main()
{
浮點x,y;
int計數;
while(1)
{
cout & lt& lt請輸入x [i]和y [i]的個數,不超過20組:“;//要求用戶輸入數據組的數量。
CIN & gt;& gt數數;
if(count & lt;=20)
打破;//檢查輸入是否合法。
系統(“cls”);
}
//獲取每組數據
for(int I = 0;我& lt數數;i++)
{
cout & lt& lt"請輸入第壹個"
CIN & gt;& gtd[i]。x;
cout & lt& lt"請輸入第壹個"
CIN & gt;& gtd[i]。y;
系統(“cls”);
}
cout & lt& lt請輸入x的值:“;//獲取變量x的值
CIN & gt;& gtx;
while(1)
{
int choice = 3;
cout & lt& lt"請選擇要使用的插值方法:"
cout & lt& lt"(0):退出"
cout & lt& lt"(1):拉格朗日" & lt& ltendl
cout & lt& lt“(2):牛頓”& lt& ltendl
cout & lt& lt"輸入您的選擇:";
CIN & gt;& gt選擇;//得到用戶的選擇。
if(選擇==2)
{
cout & lt& lt“妳選擇了牛頓插值計算方法,結果是:“;
y =牛頓(x,計數);打破;//調用相應的處理程序。
}
if(choice==1)
{
cout & lt& lt“妳選擇了拉格朗日插值計算方法,結果是:“;
y =拉格朗日(x,計數);打破;//調用相應的處理程序。
}
if(選擇==0)
打破;
系統(“cls”);
cout & lt& lt“輸入錯誤!!!!"& lt& ltendl
}
cout & lt& ltx & lt& lt“,”& lt& lty & lt& ltendl//輸出最終結果
}