编译不过去
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
d=sqrt(b*b-4*a*c);
if(a==0)
{
if(b!=0)
{
printf("x = %6g\n",-c/b);
}
else if((b==0)&&(c!=0))
printf("无解\n");
else if(b==0&&c==0)
printf("无穷多解\n");
}
else if(a!=0)
{
if(d>0)
{
printf("x1 = %6g, x2 = %6g\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
}
else if(d==0)
{
printf("x1 = x2 = %.6g\n",-b/2/a);
}
else if(d<0)
{
printf(x1 = %6g+%6gi,x2 = %6g+%6gi\n,-b/2/a,sqrt(d)/2a,-b/2/a,-sqrt(d)/2a);
}
}
return 0;
}
请编写程序,解一元一次方程 ax
2
+bx+c=0 。
已知一元二次方程的求根公式为:
要求:
(1) 若 a=0,则为一元一次方程。
若 b
=0,则方程有唯一解,输出这个解;
若 b=0,c
=0,则方程无解,输出“无解”;
若 b=0,c=0,则方程有无穷多解,输出“无穷多解”。
(2) 若 a
=0,则为一元二次方程。
若 Δ>0,则方程有两个不等的实根,输出这两个根;
若 Δ=0,则方程有两个相等的实根,输出这两个根;
若 Δ<0,则方程有两个共轭的虚根,输出这两个根。
输入格式
a,b,c
输出格式
x 或 x
1
,x
2
注:所有实数均输出6位有效数字,且不输出末尾无意义的0和小数点。
输入样例1
0 4.5 -3.6
输出样例1
x = 0.8
输入样例2
0 2.8 0
输出样例2
x = 0
输入样例3
0 0 3.6
输出样例3
无解
输入样例4
0 0 0
输出样例4
无穷多解
输入样例5
-2 0.8 -0.06
输出样例5
x1 = 0.1, x2 = 0.3
输入样例6
-1 0.2 0
输出样例6
x1 = 0, x2 = 0.2
输入样例7
1 -0.4 0.04
输出样例7
x1 = x2 = 0.2
输入样例8
0.3 0 0
输出样例8
x1 = x2 = 0
输入样例9
-0.2 0.04 -0.01
输出样例9
x1 = 0.1-0.2i, x2 = 0.1+0.2i
输入样例10
3 0 0.27
输出样例10
x1 = 0+0.3i, x2 = 0-0.3i
提示:注意实数的负零问题和误差问题。