HELP! 程序找错
一个一次和二次插值的程序,能通过编译,但是不管输入什么入口参数,得到的z总是0.000000.不知道为什么,希望大家帮忙。#include"stdlib.h"
#include"stdio.h"
main()
{
int k;
float x,z;
table(); 输出表格
printf("enter x please\n");
scanf("%f",&x);
loop:printf("linear interpolation or quadratic interpolation?(1 or 2?)\n");
scanf("%d",&k);
switch(k)
{
case 1: linear();break; 一次插值
case 2: quadratic();break; 二次插值
defult: printf("sorry,wrong input!\n");
goto loop;
}
printf("z=%f\n",z);
system("pause");
}
table()
{
int i,j;
float table={.4,.5,.6,.7,.8,-0.916291,-.693147,-0.510826,-0.356675,-0.223144};
printf("x ");
for(i=0;i<=1;i++)
{ for(j=0;j<=4;j++)printf("%10f",table);
0==i? printf("\nlnx "):printf("\n");
}
}
linear()
{ float x0,y0,x1,y1,x2,y2,l0,l1,l2,x,ans;
printf("please enter parameter x0,y0,x1,y1\n");
scanf("%f%f%f%f",&x0,&y0,&x1,&y1);
l0=(x-x1)/(x0-x1);
l1=(x-x0)/(x1-x0);
ans=y0*l0+y1*l1;
return(ans);
}
quadratic()
{ float x0,y0,x1,y1,x2,y2,l0,l1,l2,x,ans;
printf("please enter parameter x0,y0,x1,y1,x2,y2\n");
scanf("%f%f%f%f%f%f",&x0,&y0,&x1,&y1,&x2,&y2);
l0=((x-x1)*(x-x2))/((x0-x1)*(x0-x2));
l1=((x-x0)*(x-x2))/((x1-x0)*(x1-x2));
l2=((x-x0)*(x-x1))/((x2-x0)*(x2-x1));
ans=y0*l0+y1*l1+y2*l2;
return(ans);
} 编成还是要自己查错,否则就没有乐趣了。呵呵。:lol 楼主你的这段代码,貌似有下面三个主要的问题:
1)每个函数都没有返回值类型:对C来说,如果返回值是int也就罢了,但是从程序来看,linear()和qudratic()应该是float。我想楼主你可能是在拷贝时漏了吧。
2)float x0,y0,x1,y1,x2,y2,l0,l1,l2,x,ans;
这句声明应该放在所有函数外,这样才能让上述变量成为全局变量,否则有些语句恐怕说不通。
3)z在声明后从未进行赋值,这是造成输出为零的直接原因。对于这种没有初始化也没赋过值的变量,理论上会出现任意值。之所以会出现零值,是因为这块内存块上原先恰是一个数量级很小的数。
最后:这么久了,楼主是不是早就解决了呢……{:{28}:}
页:
[1]