在c编程中寻找二次方程的根

时间:2018-03-02 09:02:30

标签: c

这就是问题:编写一个读取二次方程系数的C程序,并用两个小数点打印其根。

我的代码:

#include<stdio.h>
#include<math.h>
int main() {
   float a,b,c;
   float root1;
   float root2;
   root1=(-b+sqrt(b*b-4*a*c))/2*a;
   root2=(-b-sqrt(b*b-4*a*c))/2*a;
   scanf("%f %f %f",a,b,c);
   printf("%f +f",root1,root2);

   return 0; 
}

这些是错误:

/tmp/ccYLQQBg.o:在函数main': hello.c:(.text+0x61): undefined reference to sqrt'中 hello.c :(。text + 0xc9):对'sqrt'的未定义引用 collect2:错误:ld返回1退出状态

我该如何解决?我的代码有什么问题? 谢谢 :) 新代码:

#include<stdio.h>
#include<math.h>
int main(){
   float a,b,c;
   float root1=(-b-sqrt(b*b-4*a*c))/(2*a);
   float root2=(sqrt(b*b-4*a*c))/(2*a);
   scanf("%f %f %f",&a,&b,&c);
   printf("%f %f\n",root1,root2);
   return 0; 
}

但仍有错误。输出总是-nan和nan 如果ı在2 * a左右取出了parantesis,则输出为-0和0的系数值。

2 个答案:

答案 0 :(得分:3)

您需要链接数学库,例如

gcc -o myprog myprog.c -lm

答案 1 :(得分:0)

  

输出总是-nan和nan

scanf("%f %f %f",&a,&b,&c);

在代码中放得太晚了。 在计算之前获取a,b,c的值:

#include<stdio.h>
#include<math.h>

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

    scanf("%f %f %f",&a,&b,&c);

    root1 = (-b + sqrt(b*b-4*a*c))/(2*a);
    root2 = (-b - sqrt(b*b-4*a*c))/(2*a);

    printf("%8.1f %8.1f\n",root1,root2);
    return 0;
}

上述公式正常: 输入:

3 -9 6

输出是:

2.0 1.0