二次方程有助于C.

时间:2017-10-01 22:16:08

标签: c

我正在尝试编写一个解决二次方程的代码。输入方程的3个常数后,没有任何反应。即使有条件,程序也会结束。

这是代码。感谢您的帮助。

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

int main(){

    printf("Se va a trabajar con la ecuacion de la forma ax^2+bx+c\n\n" );


    float a,b,c,x_1,x_2,x_0;

    printf("Ingrese el valor de la constante a: ");
    scanf("%f", &a);

    printf("Ingrese el valor de la constante b: ");
    scanf("%f", &b);

    printf("Ingrese el valor de la constante c: ");
    scanf("%f", &c);

    double dis = b*b-4*a*c;

    double sqr = sqrt(dis);

    if(sqr<0){

        printf("No tiene solucion en los numeros reales");


    }



    if(sqr==0){

        x_0= -b/(2*a);

        printf("La solucion es %f", x_0);


    }

    if(sqr>0){

       x_1= (-b + sqr)/(2*a); 
       x_2= (-b - sqr)/(2*a); 

       printf("Las soluciones son %f y %f", x_1, x_2);

    }


}

2 个答案:

答案 0 :(得分:1)

如果dis < 0,那么sqr = sqrt(dis)评估为非数字(NaN),并且NaNs总是对任何事物进行比较(即使NaN == NaN为假)。因此,在这种情况下,您的所有if条件都是错误的,没有任何反应。

纠正你的公式,一切都应该没问题。

答案 1 :(得分:1)

如果参数为负数,则

sqrt会返回NaN,并且将任何内容与NaN进行比较会得到false。因此,如果dis为负数,则不会输入任何if语句。实际上你应该检查dis而不是它的平方根。但是还有一个“检测”Nan的技巧:

int main(int argc, char** argv) {

    double f = sqrt(-1);
    if (f != f) {
        printf("oh! Not A Number!");
    }
}