chazhisuanfa.cpp

来自「高级程序设计语言实现Lagrange插值」· C++ 代码 · 共 112 行

CPP
112
字号
#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

 

typedef struct {

       float x;

       float y;

}POINT;

float Lagrange(POINT Table[],int n,float x);

 

 

int Check_x_is_same_as_former(POINT Table[],int i){

       int k;

       for(k=0;k<i;++k)

              if(fabs(Table[k].x-Table[i].x)<0.000001)

                     return 1;

              return 0;

}

void InputTable(POINT Table[],int *n){

       int i;

       printf("\nNumber of Points n=");

       scanf("%d",n);

       for(i=0;i<*n;++i){

              printf("Input %dth point(x%d,y%d):",i,i,i);

              scanf("%f,%f",&Table[i].x,&Table[i].y);

              if(Check_x_is_same_as_former(Table,i)){

                     printf("\nThis x is the same as the former,ReInput!\n",i);

                     --i;

              }

       }

}

float Lagrange(POINT Table[],int n,float x){

       float Result,tmp;

       int i,j;

       Result=0.0;

       for(i=0;i<n;++i){

              tmp=1.0;

              for(j=0;j<n;++j){

                     if(j==i)continue;

                     tmp*=((x-Table[j].x)/(Table[i].x-Table[j].x));

              }

              Result+=(tmp*Table[i].y);

       }

       return(Result);

}

void main(){

       int n;

       float x,y;

       POINT Table[1000];

       InputTable(Table,&n);

       printf("\nInput x=");

       scanf("%f",&x);

       y=Lagrange(Table,n,x);

       printf("\nL(%f)=%f\n",x,y);

       }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?