首页 > 用户发贴区 > 编程问题提问区 > 一个关于二次方程的问题
2007
07-08

一个关于二次方程的问题

真无奈编出了这个疑难杂症#include <math.h>
float  p,q,r,s,h,x1,x2;


main()
{ float  a,b,c;
  float  root1(float,float);
  float  root2(float,float);
  float  root3(float,float);


  printf(“please input 3 numbers\n”);
  scanf(“%f%f%f”,&a,&b,&c);


  h=b*b-4*a*c;


  if(h>0)
    { root1(a,b);
      printf(“%f%f”,r,s);
    }
  else if(h==0)
    { root2(a,b);
      printf(“%5f”,r);
     }
  else
    { root3(a,b);
      printf(“x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n”,p,q,p,q);
    }



 }


 


  float  root1(float a,float b)
    {  r=(-b+sqrt(h))/(2*a);
       s=(b+sqrt(h))/(2*a);
    }


  float  root2(float a,float b)
    { r=s=(-b)/(2*a);
    }


  float  root3(float a,float b)
    { p=-b/(2*a);
      q=sqrt(h)/(2*a);
    }
运行时每一步都对,就是一运行显示domain    floaterror,那位高手能帮忙解决一下阿


 


一个关于二次方程的问题》有 5 条评论

  1. s88246843 说:

    你看你程序中的这条scanf(“%f%f%f”,&a,&b,&c);

    当我把123写入时你说到底是把1给a还是把123给a了?这个你最好加上逗号!其它的我还没有分析呢!scanf(“%f,%f,%f”,&a,&b,&c);这样不过在输入的时候你也得加上逗号!

  2. s88246843 说:

    看了下你的程序在我的电脑上还能用,没有报错!

  3. longmumin 说:

    本来就不报错,是运行时出现问题

  4. sdxu 说:

    是不是这个问题啊:

     if(h>0)
     if(h==0)….

    改成 if (h>1e-6)

           if (fabs(h)<1e-6)

    float型直接与零做比较是要出错的

          

  5. ybdesire 说:

    h<0后你在root3()中还来了个 sqrt(h)

    C语言不能处理复数吧

留下一个回复