拉格朗日插值C语言
用了结构体数组表示点(x,y),但是没涉及到指针应用,,继续学习
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
double x;
double y;
}LNode;
double lagrange(LNode array[], double test, int length);
int main() {
printf("请输入有几组已知点:\n");
int length;
scanf_s("%d", &length);
LNode* array = (LNode*)malloc(sizeof(LNode)*length);
printf("请输入已知点的信息(x,y):\n");
int i;
for (i = 0; i < length; i++) {
scanf_s("%lf", &array[i].x);
scanf_s("%lf", &array[i].y);
}
printf("数据已保存\n");
for (i = 0; i < length; i++) {
printf("(%lf,", array[i].x);
printf("%lf) ", array[i].y);
}
printf("\n请输入待测值:\n");
double test,result;
scanf_s("%lf", &test);
result=lagrange(array, test, length);
printf("结果为:%lf\n", result);
return 0;
}
double lagrange(LNode array[], double test,int length) {
int k ,j= 0;
double t = 1,sum = 0;
for (k = 0; k < length; k++) {
for (j = 0; j < length; j++) {
if (j != k) {
t = (test - array[j].x) / (array[k].x - array[j].x)*t;
}
}
sum += t*array[k].y;
t = 1;
}
return sum;
}
流程图
参考书上的流程图
运行截图
这次没做循环输入,可以自己改动,ending!qwq