计算一元二次方程为啥不行

计算一元二次方程为啥不行

问题描述:

C语言

用dev编译

用于计算一元二次方程ax^2+bx+c=0

#include<stdio.h>
#include<math.h>
int main() {
    float a, b, c, y, Y, x, dt, dtj;
    scanf("%f %f %f", &a, &b, &c);
    dt = (b * b) - (4 * a*c);
    dtj = fabs(dt);
    if (a == b && b == c && c == 0)
        printf("Zero Equation");
    else if (a == b && b == 0&&c!=0)
        printf("Not An Equation");
    else if (dt == 0) {
        y = (-b) / (2 * a);
        printf("%d", y);
    }
    else if (dt < 0) {
        y = (-b) / (2 * a);
        x = (sqrt(dtj)) / (2 * a);
        printf("%d+%di\n%d-%di", y, x, y, x);
    }
    else {
        y = (-b) / (2*a);
        x = sqrt(dt) / (2*a);
        printf("%d\n%d", y + x,y-x);
    }
    printf("%d %d %d %d %d %d %d",a,b,c,x,y,dt,dtj);
}

测试输入:1 1 1

输出:
0+-536870912i
0--536870912i0 0 0 -536870912 0 0 0

a b c y dt dtj 值都为0,x的值很奇怪,为啥会这样?

 

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

int main()

{

	long float a=0,b=0,c=0;                            
	long float x1=0,x2=0,p=0,x=0,i=0;                       
	scanf("%lf %lf %lf",&a,&b,&c);             
	p=b*b-4*a*c;                         
	if(a==0&&b==0&&c==0)
	{
		printf("Zero Equation");
	}
	else if(a==0&&b==0&&c!=0)
	{
		printf("Not An Equation");
	}
	else if(a==0&&b!=0)
	{
		x=(-c)/b;   
		printf("%.2f",x);  
	}
	else 
	{
		if(p>0)
		{
			x1=(-b+sqrt(p))/(2*a);                          

			x2=(-b-sqrt(p))/(2*a);                       

			printf("%.2f\n%.2f",x1,x2);    
		}
		else if(p<0)
		{
			i=(sqrt(-p))/(2*a);

			x1=(-b)/(2*a);                         
			x2=(-b)/(2*a);                        

			printf("%.2f+%.2fi\n%.2f-%.2fi",x1,i,x2,i);    
		}
		else if(p==0)

			x=(-b+sqrt(p))/(2*a);                         

		printf("%.2f",x);    

	}
}

1.你的定义float和scanf里的lf不匹配,输入为lf,定义为f,会数据丢失,

一种方法是类似于我这种处理,另一种是改成scanf(%f  %f %f,&a,&b,&c);

2.声明变量时初始化以下,虽然不是必须的,但可以避免些错误,好习惯

望采纳,谢谢!

printf("%d+%di\n%d-%di", y, x, y, x);   输出格式有问题,这种都改成%f

算法没问题,就最后的printf格式输出有问题,定义的浮点型以%d输出,默认强制性转换为整型 

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

 

int main()

{

    float a,b,c;                            

    float x1,x2,p,x,i;                       

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


    p=b*b-4*a*c;                         
if(a==0&&b==0&&c==0){printf("Zero Equation");
}
else if(a==0&&b==0&&c!=0){printf("Not An Equation");
}
else if(a==0&&b!=0){x=(-c)/b;   printf("%.2f",x);  
}
else {
if(p>0){
x1=(-b+sqrt(p))/(2*a);                          

    x2=(-b-sqrt(p))/(2*a);                       

    printf("%.2f\n%.2f",x1,x2);    
}
else if(p<0){
	i=(sqrt(-p))/(2*a);

	x1=(-b)/(2*a);                         
    x2=(-b)/(2*a);                        

    printf("%.2f+%.2fi\n%.2f-%.2fi",x1,i,x2,i);    
}
else if(p==0)

    x=(-b+sqrt(p))/(2*a);                         

    printf("%.2f",x);    

}}