C语言问题:程序运算输出结果“1.#IND00”菜鸟求大神解答!!!

我编了一下拉格朗日插值方法的C语言程序。y=lnx。
测试数据
x=1 f=0.0
x=2 f=0.693
x=3 f=1.099
x=4 f=1.386
取xa=1.5作为验证点。
#include <stdio.h>
int main()
{
FILE *fp;
int i,n,k;
double x[10], f[10],l,ff,xa;
n=3;
xa=1.5;
fp = fopen("F:\\专业\\数值分析编程\\插值方法 Interpolation Algorithm\\Data1.txt", "r");
//if(!fp) return 1;
//fscanf(fp,"n=%d xa=%lf" ,&n,&xa);

for(k=0;k<=n;k++)
{
fscanf(fp,"%lf %lf",&x[k],&f[k]);
}
/*while(fscanf(fp,"%f%lf", x+k, f+k) == 2)
{
k++;
if(k>=n) break;
}*/
ff=0.0;
for(k=0;k<=n;k++)
{
l=1.0;
for(i=0;i<=n;i++)
{
if(i!=k)
{
l=l*(xa-x[i])/(x[k]-x[i]);
}
}
ff=ff+l*f[k];
}
printf("The value of L(%lf)=%.41f\n",xa,ff);
fclose(fp);
return 0;
}

第1个回答  2015-08-06
假定数据文件内容:
x=1 f=0.0
x=2 f=0.693
x=3 f=1.099
x=4 f=1.386
含等号数据 等号数据。 读出 x[k] f[k] 的方法如下:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
int i,j,n,k;
double x[10],f[10],l,ff,xa;
n=3;
xa=1.5;
fp = fopen("Data1.txt","r");
k=0;
while(1){
fscanf(fp,"%*[^=]=%lf %*[^=]=%lf", &x[k], &f[k]); // 窍门在这里。
if (feof(fp)) break;
if (k>n) break;
k++;
}
fclose(fp);
for (i=0;i<k;i++) printf("%g %g\n",x[i],f[i]);
return 0;
}
注意输入文件名路径不要含中文和空白,若含,请自己仔细处理。这里从略。本回答被提问者和网友采纳
第2个回答  2015-08-06
虽然不清楚拉格朗日插值法是干嘛的 但是你的输入有问题 把你数据中的x= y=都删了 要不scanf读不进去数值的追问

我的文档里没有写x=和y=。同样谢谢您。

追答

那你测试数据写x=1 f=0.0
→_→

相似回答