c语言 输出二次函数的根。帮我看看错在哪了,谢谢啊

#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,x1,x2,d,i,t;printf("请输入a,b,c:... #include <stdio.h>
#include <math.h>
void main()
{ double a,b,c,x1,x2,d,i,t;
printf("请输入 a,b,c:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
i=sqrt(-1);
if(a==0)
printf("不是二次函数\n");
else if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%lf,x2=%lf\n",x1,x2);
}
else if(d<0)
{
x1=(-b+i*sqrt(d))/(2*a);
x2=(-b-i*sqrt(d))/(2*a);
printf("x1=%lf,x2=%lf\n",x1,x2);
}
else
{
t=-b/(2*a);
printf("x1=x2=%lf\n",t);

}

}
输入有些值可以正确输出,有些不行。我也看不出错在哪了。改出来了会有财富加分的,谢谢。
学的不好所以来求助大家,非常感激
展开
 我来答
百度网友f3b3e02
2013-04-26 · TA获得超过2155个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:573万
展开全部
#include <stdio.h>
#include <math.h>
void main()
{ double a,b,c,x1,x2,d,i,t;
printf("请输入 a,b,c:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
i=sqrt(-1);
if(a==0)
printf("不是二次函数\n");
else if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%lf,x2=%lf\n",x1,x2);
}
else if(d<0)
{
x1=(-b+i*sqrt(d))/(2*a);//这里负数不能开根号
x2=(-b-i*sqrt(d))/(2*a);//这里负数不能开根号

printf("x1=%lf,x2=%lf\n",x1,x2);
}/*当d<0时求复数根:可将实部和虚部分开处理,注意:i*sqrt(d)不能这样表达,i只代表虚部,不是-1,另外,开根号的数是-d,而不是d.
*/
else
{
t=-b/(2*a);
printf("x1=x2=%lf\n",t);

}

}
追问
我把   i=sqrt(-1);删去了,定义了char i;
d<0时改成:
else if(d<0)
{
x1=(-b)/(2*a)+(sqrt(-d)/(2*a))*i;
x2=(-b)/(2*a)+(sqrt(-d)/(2*a))*i;
printf("x1=%lf,x2=%lf\n",x1,x2);
}
这样还是不对,输出的不带i,值也是错误的,应该怎样表示呢,谢谢你
追答
else if(d<0)
{
printf("x1=%lf+%lfi,x2=%lf-%lfi\n",(-b)/(2*a),sqrt(-d)/(2*a),(-b)/(2*a),sqrt(-d)/(2*a)));
}
//i根本就没用!所有跟i有关的全删掉!
halyjey
2013-04-26 · TA获得超过219个赞
知道答主
回答量:49
采纳率:0%
帮助的人:7.7万
展开全部
问题补充:#include
#include
void main()
{ double a,b,c,x1,x2,d,i,t;
printf("请输入 a,b,c:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
i=sqrt(-1);
i=sqrt(-1),为什么要求负一的根,也可以不用求啊
这一行代码去掉,然后改一下使用变量i的段,这样程序应该不会有错
这一行代码去掉,然后改一下使用变量i的段,这样程序应该不会有错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpucash
2013-04-26 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:955万
展开全部
i=sqrt(-1);这个的问题吧。d大于等于零的情况没有问题。d小于零的情况有点问题

不过你程序考虑的还是不全面,bc等于零的情况有没有考虑?
也就是a等于零,b等于零,c不等于零。或者其他情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YIGUT
2013-04-26 · TA获得超过153个赞
知道答主
回答量:93
采纳率:0%
帮助的人:67.6万
展开全部
问题出在i=sqrt(-1)上,你试试单独输出i,或者随便输入一个a,然后输出sqrt(a),当a<0时你就能发现问题所在了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xianren4321
2013-04-26
知道答主
回答量:5
采纳率:0%
帮助的人:7422
展开全部
你具体的
if(a==0)
printf("不是二次函数\n");
和下边逻辑函数不对。。
你自己对照一下正确的
还有就是必须最后是d=0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式