【分支结构】求解一元二次方程

题目描述

求解方程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;
}
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
上一篇
下一篇