我正在尝试编写一个解决二次方程的代码。输入方程的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);
}
}
答案 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!");
}
}