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);
}
}
输入有些值可以正确输出,有些不行。我也看不出错在哪了。改出来了会有财富加分的,谢谢。
学的不好所以来求助大家,非常感激 展开
#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);
}
}
输入有些值可以正确输出,有些不行。我也看不出错在哪了。改出来了会有财富加分的,谢谢。
学的不好所以来求助大家,非常感激 展开
5个回答
展开全部
#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);
}
}
#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有关的全删掉!
展开全部
问题补充:#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的段,这样程序应该不会有错
#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的段,这样程序应该不会有错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i=sqrt(-1);这个的问题吧。d大于等于零的情况没有问题。d小于零的情况有点问题
不过你程序考虑的还是不全面,bc等于零的情况有没有考虑?
也就是a等于零,b等于零,c不等于零。或者其他情况
不过你程序考虑的还是不全面,bc等于零的情况有没有考虑?
也就是a等于零,b等于零,c不等于零。或者其他情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题出在i=sqrt(-1)上,你试试单独输出i,或者随便输入一个a,然后输出sqrt(a),当a<0时你就能发现问题所在了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你具体的
if(a==0)
printf("不是二次函数\n");
和下边逻辑函数不对。。
你自己对照一下正确的
还有就是必须最后是d=0
if(a==0)
printf("不是二次函数\n");
和下边逻辑函数不对。。
你自己对照一下正确的
还有就是必须最后是d=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询