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

问题描述 投票:-3回答:2

这是一个问题:编写一个读取二次方程系数的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 tosqrt'hello.c :(。text + 0xc9)中:未定义引用`sqrt'colle2:error: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 *左右的parantesis,则输出是-0和0的系数值。

c
2个回答
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

3
投票

你需要链接数学库,例如

gcc -o myprog myprog.c -lm
© www.soinside.com 2019 - 2024. All rights reserved.