本题目要求一元二次方程 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()
{
double a,b,c,d,s,x;//无实根情况下,s表示实数部分,x表示虚数部分
scanf("%lf %lf %lf",&a,&b,&c);
d = b*b-*a*c; //判别式,根据d判断有几个解
if (a==&&b==&&c==)
printf("Zero Equation");
else if (a==&&b==&&c!=)
printf("Not An Equation");
else if (a==&&b!=&&c!=)//此时为一次方程,一个解
printf("%.2f",-(c/b));
else if (d==)//两个相同解
printf("%.2f",(-b+sqrt(d))/(*a));
else if (d>)//两个不同实数解
printf("%.2f\n%.2f",(-b+sqrt(d))/(*a),(-b-sqrt(d))/(*a));
else//两个虚数解
{
s = -b/(*a);
x = sqrt(-d)/(*a);
s = s==?:s;//实数部分为,则表示为.
printf("%.2f+%.2fi\n%.2f-%.2fi",s,x,s,x);
}
return ;
}
提交4次第六个测试点始终不过,测试点6:实部为0时输出0.00+xi 因此要注意最后无实根情况下,判断实数部分为0的表示问题。
但在s=0时,为什么直接printf(“%.2f+%.2fi\n%.2f-%.2fi”,s,x,s,x);会出错呢???为什么添加s = s==0?0:s;后就通过,两者有何差别?