修改如下,供参考:
#include<stdio.h>
#include<math.h>
int main()
{
double x1,x2,a,b,c,y,d;
int n ,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf%lf%lf",&a,&b,&c);
if(a == 0){
printf("不是一元二次方程.\n");
}
else{
y = b*b-4*a*c;
if(y > 0){
x1 = (-b+sqrt(y))/(2.0*a);
x2 = (-b-sqrt(y))/(2.0*a);
printf("x1=%.5lf;x2=%.5lf\n",x1,x2);
}
else if(y == 0){
x1 = x2 = -b/(2.0*a);
printf("x1=x2=%.5lf\n",x1);
}
else if(y < 0){
x1 = (-b)/(2.0*a);//实部
x2 = (sqrt(-y))/(2.0*a); //虚部
printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",x1,x2,x1,x2);
}
}
}
return 0;
}
double 用%f不用%lf
我建议你在x1赋值和x2赋值前各加一条打印,看有没有,我怀疑是x1赋值那个运算报错了