为什么用C语言输出一元二次方程的答案不对,有两个解时,一个是0.00000,另一个总是个很大的负数

#include<stdio.h>
#include<math.h>
void main()
{
double x1;
double x2;
double melt;
int a,b,c;
printf("输入3个系数的值a,b,c:");
scanf("%d%d%d",&a,&b,&c);
melt=b*b-4*a*c;
if(melt>0)
{
x1=(-b+sqrt(melt)/(2*a));
x2=(-b-sqrt(melt)/(2*a));
printf("该方程有两个解,x1=%0.6f,x2=%0.6f,x1,x2");
}
else if(melt==0)
{
x1=-b/2*a;
x2=x1;
printf("该方程有一个解,x1=%0.6f,x1");
}
else
{
printf("wujie\n");
}
}

printf("该方程有两个解,x1=%0.6lf,x2=%0.6lf",x1,x2); 引号错了
printf("该方程有一个解,x1=%0.6f“,x1);

double 对应%lf
float 对应 %f 这个虽然有时候可以通用但是有时候会出错 建议区分这一点

还有就是为什么后面会出现数字乱码 是因为 两个 %lf 得不到你传递的两个值 所以产生了垃圾值!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-03
你在输出解的时候错了!源代码可以改成下面这样,
#include<stdio.h>
#include<math.h>
void main()
{
double x1;
double x2;
double melt;
int a,b,c;
printf("输入3个系数的值a,b,c:");
scanf("%d%d%d",&a,&b,&c);
melt=b*b-4*a*c;
if(melt>0)
{
x1=(-b+sqrt(melt)/(2*a));
x2=(-b-sqrt(melt)/(2*a));
printf("该方程有两个解,x1=%f,x2=%f\n",x1,x2);
}
else if(melt==0)
{
x1=-b/2*a;
x2=x1;
printf("该方程有一个解,x1=%f\n",x1);
}
else
{
printf("wujie\n");
}
}
你试试可不可以。还有那个double是双精度浮点,定义float类型的就行
第2个回答  2014-09-03
printf("该方程有两个解x1=%lf,x2=%lf",x1,x2); 引号位置错了,另应该用%lf输出double类型

printf("该方程有一个解x1=%0.6lf“,x1); //同上