C语言实验题——一元二次方程

解一元二次方程ax2+bx+c=0的解。输入输入三个实数a,b,c的值,且a不等于0。输出输出两个根X1和X2,用空格隔开,具体格式为:X1X2其中大的根先输出,即X1>... 解一元二次方程ax2+bx+c=0的解。

输入

输入三个实数a,b,c的值,且a不等于0。

输出

输出两个根X1和X2,用空格隔开,具体格式为:

X1 X2

其中大的根先输出,即X1>=X2。
结果保留两位小数。数据保证一定有实根。

样例输入

1 5 -2

样例输出

0.37 -5.37

我的代码是这样子的,请教各位大牛,哪里错掉了啊,谢谢
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=sqrt(b*b-4*a*c);
if (d>=0)
{
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
printf("%.2lf %.2lf\n",x1,x2);
}

else
printf("ERROR\n");
break ;
}
return 0;
}
展开
 我来答
罪剑
推荐于2017-09-25 · TA获得超过113个赞
知道小有建树答主
回答量:193
采纳率:0%
帮助的人:67.2万
展开全部
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,x1,x2; //输入三个实数,所以a,b,c是double类型
scanf("%lf %lf %lf",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(x1>=x2)
printf("%.2f %.2f\n",x1,x2);
else
printf("%.2f %.2f\n",x2,x1);

return 0;
}
百度网友28b4182
2012-02-22 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1853万
展开全部
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=(b*b-4*a*c*1.0);//sqrt肯定是大于0的,是里面的东西不能小于0
if (d>=0)
{
d=sqrt(d);
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
if(x1<x2)
printf("%.2lf %.2lf\n",x1,x2);
else printf("%.2lf %.2lf\n",x2,x1);
}

else
printf("ERROR\n");
break ;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_Mr_Computer_
2012-02-22 · TA获得超过1042个赞
知道小有建树答主
回答量:464
采纳率:100%
帮助的人:263万
展开全部
你定义的变量不应该是整形,应该是双精度的实型变量才行!
建议使用我的这个(借鉴):
#include<stdio.h>
#include<math.h>
#include<string>
main()
{

for(;;)
{

double a,b,c,x1,x2,temp,temp1;
printf("请输入参数a的值为:\n");
scanf("%lf",&a);
printf("请输入参数b的值为:\n");
scanf("%lf",&b);
printf("请输入参数c的值为:\n");
scanf("%lf",&c);
temp=b*b-4*a*c;
if(temp<0)
{
printf("你的函数是:(%lf)x2+(%lf)x+(%lf)=0\n",a,b,c);
printf("该函数是函数是:%lf*x2+%lf*x+c=0\n",a,b,c);
printf("该函数没有实解!");
}
else if(temp==0)
{
x1=x2=(-b)/(2*a);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("该函数有两个相等的实根!分别为:x1=x2=%lf\n",x1);
}
else if(temp>0)
{
temp1=sqrt(temp);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("你的函数是:%lf x2+%lf x+c=0\n",a,b,c);
x1=(b*b-temp1)/2*a;x2=(b*b-temp1)/2*a;
printf("该函数有两个不同的实根,分别为:x1=%lf \n x2=%lf \n",x1,x2);
}
system("pause");
system("cls");
}

}

/*================================================================Mr_computer */
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d6957ec
2012-02-22 · TA获得超过825个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:105万
展开全部
我用的是vc6.0,运行没问题,估计是软件的不同。
我认为,scanf("%d",&a);while(a!=0)之间是不是要加一条getchar();
应为输入完a后,你是要打回车的或空格,可能回车空格的ASC吗,赋给了之后的scanf("%d %d",&b,&c);
中的b了,所以你出错了,试试看吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘿若
2012-02-22
知道答主
回答量:22
采纳率:0%
帮助的人:8.9万
展开全部
没错啊,估计是输入时输错了,先输入a,然后回车,再输入b 空格 再输入c
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式