题目描述
求解方程ax2+bx+c=0。输入a、b、c的值(其中a≠0),计算并输出方程的解x(保留一位小数)。如果方程无实数解,输出“no real solution”。
输入
输入a,b,c的值
输出
输出方程的解,如果有实数解,按照从大到小输出,保留一位小数。
样例输入
1 4 3
样例输出
x1=-1.0 x2=-3.0
错误代码
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, x1, x2;
double d = 0;
scanf("%lf %lf %lf", &a, &b, &c);
double k = b * b - (4 * a * c);
d = sqrt(b * b - (4 * a * c));
x1 = (-b + d) / (2.0 * a);
x2 = (-b - d) / (2.0 * a);
if (k >= 0)
{
if (x1 > x2)
printf("x1=%.1lf\nx2=%.1lf\n", x1, x2);
else
printf("x2=%.1lf\nx1=%.1lf\n", x2, x1);
}
else
printf("no real solution\n");
return 0;
}
正确代码
#include <stdio.h>
#include <math.h>
int main()
{
double p, q, x1, x2, disc, a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
disc = b * b - 4 * a * c;
p = -b / (2.0 * a);
if (disc >= 0)
{
q = (sqrt(disc)) / (2.0 * a);
x1 = p + q;
x2 = p - q;
printf("x1=%.1lf\nx2=%.1lf\n", x1, x2);
}
else
{
printf("no real solution\n");
}
return 0;
}