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);

}

}
输入有些值可以正确输出,有些不行。我也看不出错在哪了。改出来了会有财富加分的,谢谢。
学的不好所以来求助大家,非常感激

#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有关的全删掉!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-26
问题补充:#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的段,这样程序应该不会有错
第2个回答  2013-04-26
i=sqrt(-1);这个的问题吧。d大于等于零的情况没有问题。d小于零的情况有点问题

不过你程序考虑的还是不全面,bc等于零的情况有没有考虑?
也就是a等于零,b等于零,c不等于零。或者其他情况
第3个回答  2013-04-26
问题出在i=sqrt(-1)上,你试试单独输出i,或者随便输入一个a,然后输出sqrt(a),当a<0时你就能发现问题所在了
第4个回答  2013-04-26
你具体的
if(a==0)
printf("不是二次函数\n");
和下边逻辑函数不对。。
你自己对照一下正确的
还有就是必须最后是d=0

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=(...

c语言问题,求大神,求二次函数的根
d=b*b-4*a*c; \/\/这里计算的结果是d if(d<0) \/\/这里怎么能判断n呢? 改成d printf("无解\\n");

C语言初学者编写的解二次函数程序,求指点到底哪里错了
printf("x1=%lf\\nx2=%lf\\n"x1,x2);应该是printf("x1=%lf\\nx2=%lf\\n",x1,x2);少了逗号 两个地方都是这个问题

c语言:求二次函数ax^2+bx+c=0的根
include <stdio.h>#include <math.h>void main(){ float a,b,c,x1,x2,p,q,disc; printf("input a,b,c\\n"); scanf("a=%f,b=%f,c=%f",&a,&b,&c); disc=b*b-4*a*c; if (disc<0) { printf("没根\\n"); } else { p=-b\/(2*a)...

c语言输出ax²+bx+c=0的根。帮我看看错在哪,谢谢。
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;printf("%3.1lf\\t%3.1lf\\n",a,d,i);if(a==0)printf("不是二次函数");else { if(d>0){ x1=(-b+sqrt(d))\/(2*a);x2=(-b-sqrt(d))\/(2*a);...

...谁能帮我看看我的列表有没有算错数 如果错了能帮我改正下么?谢谢...
x=-2时,y=2 x=2时,y=2

二次函数最终的结果用再化成一般形式吗??急!!!谢谢你 谢谢啊~~~·
不用啊 但是你也可以化 不化也不会判你错的 但是要是那种批量阅卷的话 最好还是化一下

大家帮我看看我的问题出在哪里啦。谢谢啦 x方说明开口朝上,有最小...
你在这道题中的知道思路并没有错,但是当X=0时,Y并不是最小值,你认为的X=0时,Y 最小是不成立的,看答案就知道了Y最小时,X=-2.5。

在二次函数中 a的位置大小取决于它的开口向上或向下那么b的位置取决于...
a的正负决定开口上下,-b\/(2a)决定对称轴的位置,(4ac-b*b)\/4a决定二次函数的顶点纵坐标 记得采纳啊

...及过程有问题吗,有的话说一下,这有两个问题!在下边别漏了谢谢...
第一题你答案是错的!过程是对的。题目要求是-2<x<7\/2内有实数解,不是有2个实数解 所以当t取-5~-31\/4之间,依然与所截的二次函数有交点。因此第一题结果是-31\/4<t<5\/4 第二题-5<y<13是对的。这个不是解不等式!不存在什么同大取大同小取小这么可笑的事!不要把不同的概念混淆...

相似回答