星竹 发表于 2010-3-14 17:23

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);
}

Seventy721 发表于 2010-4-2 13:40

编成还是要自己查错,否则就没有乐趣了。呵呵。:lol

Aries_SVW 发表于 2010-12-29 23:17

楼主你的这段代码,貌似有下面三个主要的问题:
1)每个函数都没有返回值类型:对C来说,如果返回值是int也就罢了,但是从程序来看,linear()和qudratic()应该是float。我想楼主你可能是在拷贝时漏了吧。
2)float x0,y0,x1,y1,x2,y2,l0,l1,l2,x,ans;
这句声明应该放在所有函数外,这样才能让上述变量成为全局变量,否则有些语句恐怕说不通。
3)z在声明后从未进行赋值,这是造成输出为零的直接原因。对于这种没有初始化也没赋过值的变量,理论上会出现任意值。之所以会出现零值,是因为这块内存块上原先恰是一个数量级很小的数。

最后:这么久了,楼主是不是早就解决了呢……{:{28}:}
页: [1]
查看完整版本: HELP! 程序找错