c语言,一元二次方程 5

本题目要求一元二次方程a*x2+b*x+c=0的根,结果保留2位小数。输入格式:输入在一行中给出3个浮点系数a,b,c,中间用空格分开。输出格式:根据系数情况,输出不同结... 本题目要求一元二次方程 a*x2+b*x+c=0 的根,结果保留2位小数。
输入格式:
输入在一行中给出3个浮点系数a, b, c,中间用空格分开。
输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
输入样例 1:
2.1 8.9 3.5
输出样例 1:
-0.44
-3.80
输入样例 2:
1 2 3
输出样例 2:
-1.00+1.41i
-1.00-1.41i
输入样例 3:
0 2 4
输出样例 3:
-2.00
输入样例 4:
0 0 0
输出样例 4:
Zero Equation
输入样例 5:
0 0 1
输出样例 5:
Not An Equation
我试了自己写的:
#include<stdio.h>
#include<math.h>
int main(void)
{
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
if(a!=0)
{
double ret,x,A;
ret=b*b-4*a*c;
x=-b/(2*a);
A=fabs(a);
if(ret)
if(ret>0)
printf("%.2f\n%.2f",x+sqrt(ret)/(2*A),x-sqrt(ret)/(2*A));
else
if(b)
printf("%.2f+%.2fi\n%.2f-%.2fi",x,sqrt(-ret)/(2*A),x,sqrt(-ret)/(2*A));
else
printf("%.2fi\n-%.2fi",sqrt(-ret)/(2*A),sqrt(-ret)/(2*A));
else
printf("%.2f",x);
}
else
if(b!=0)
printf("%.2f",-c/b);
else
if(c!=0)
printf("Not An Equation");
else
printf("Zero Equation");
return 0;
}
总是显示部分错误(在线评测),求代码,求指出漏洞!
展开
 我来答
150325223
推荐于2017-05-20 · TA获得超过388个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:87.8万
展开全部
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c;
while(scanf("%f%f%f",&a,&b,&c)!=EOF)
{
if(a==0 && b==0 && c==0)
printf("Zero Equation\n");
else
{
float x,x1,x2,m;
if(a==0 && b==0 && c!=0)
printf("Not An Equation\n");
   if(a==0 && b!=0 && c!=0)
printf("%.2f\n",-c/b);
if(a!=0 && b!=0)
{
if(b*b-4*a*c==0)
{
m=-b/(2*a);
printf("%.2f\n",m);
}
if(b*b-4*a*c>0)
{
x=sqrt(b*b-4*a*c);
x1=(-b+x)/(2*a);
x2=(-b-x)/(2*a);
printf("%.2f\n",x1);
printf("%.2f\n",x2);
}
if(b*b-4*a*c<0)
{
x=sqrt(4*a*c-b*b);
x1=-b/(2*a);
x2=x/(2*a);
printf("%.2f+%.2fi\n",x1,x2);
printf("%.2f-%.2fi\n",x1,x2);
}
}
if(a!=0 && b==0 && c!=0)
{
printf("0.00+%.2fi\n",sqrt(c/a));
printf("0.00-%.2fi\n",sqrt(c/a));
}
if(a!=0 && b==0 && c==0 )
printf("0.00\n");
}
}
return 0;
}
伦悦宜yS
2014-08-20 · TA获得超过674个赞
知道小有建树答主
回答量:769
采纳率:100%
帮助的人:374万
展开全部
#include "stdio.h" #include "math.h" /*求一元二次方程ax*x+bx+c=0的解*/ main() { float a,b,c,x1,x2,d; printf("请输入a:"); scanf("%f",&a); printf("请输入b:"); scanf("%f",&b); printf("请输入c:"); scanf("%f",&c); d=b*b-4*a*c; if(d < 0) printf("方程没有实数解。\n"); if (d==0) { x1=(-b)/(2*a); printf("x1=%f\n",x1); } if (d>0) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%f,x2=%f\n",x1,x2);} }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乾璺
2014-08-20 · TA获得超过692个赞
知道小有建树答主
回答量:582
采纳率:0%
帮助的人:99.6万
展开全部
算法缺陷吧,在线评测由算法评测。很全面的测试你的代码,一些特殊值会不会满足,极端情况有没有考虑之类的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桦南小伙gSS5
2014-08-20 · TA获得超过202个赞
知道答主
回答量:226
采纳率:100%
帮助的人:140万
展开全部
您好!很高兴为您解答。

原代码中的scanf和printf中的%要放在d和lf的前面才对,改正后运算无误~

#include <stdio.h>
#include <math.h>
void main ()
{
double x1;//x1,x2分别为方程的2个解
double x2;
double melt;
int a;
int b;//初始化ABC的三个变量
int c;
printf("请输入a b c三个数的值:");
scanf("%d %d %d",&a, &b ,&c);//输入ABC的时候需要空格
melt = b*b - 4*a*c;//初始化melt的值
if (melt>0)
{ x1=(-b + sqrt(melt))/(2*a);
x2=(-b - sqrt(melt))/(2*a);
printf ("2个解,x1 = %lf,x2 = %lf\n",x1,x2);
}

else if (melt==0)
{
x1 = (-b )/(2*a);
x2 = x1;
printf("1个解,x1 = %lf,x2 = lf%\n",x1,x2);
}
else
{
printf("无解\n");
}
}

望采纳~如您还有不解,欢迎追问~
追问
不是这个,要满足题目要求。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-08-20 · 超过28用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:64.8万
展开全部
求绝对值是在干什么
更多追问追答
追问
保证先输出较大的根。
追答
”实部+虚部i“这个格式会不会出现 0+2i 这种???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式