计算一元二次方程为啥不行
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);
}}