Программа не может вычислить корень для квадратного уравнения - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно написать простую программу, которая может найти корни для квадратного уравнения (ax ^ 2 + bx + c), введя значения a, b и c и используя оператор if-else. Программа может компилироваться, но ответы вышли совершенно неверными. мои типы данных для всех моих входов и выходов двойные

Я пытался посмотреть на свои формулы, но, похоже, с ними все в порядке?


    printf("input values of a, b, c: ");
    scanf("%lf, %lf, %lf", &a, &b, &c);

    disc = pow(b, 2) - (4 * a*c);

    if (a == 0)
    {
        r = -c / b;
        printf("x = %.2lf\n", r);
    }
    else if (disc >= 1)
    {
        r1 = (-b + sqrt(disc)) / (2 * a);
        r2 = (-b - sqrt(disc)) / (2 * a);
        printf("x1 = %.2lf and x2 = %.2lf", r1, r2);
    }
    else if (disc == 0)
    {
        r1 = (-b + sqrt(disc)) / (2 * a);
        r2 = r1;
        printf("2 of the same root, x = %.2lf", r2);
    }
    else
    {
        printf("no real root");
    }

например, когда я ввожу 2, -11 и 12 в качестве a, b и c, ответ, который должен отображаться, будет «x1 = 4.00 и x2 = 1.50», но вместо этого вывод, который я получил, был «х1 = 0,00 и х2 = 0,00». И даже для первого условия я ввел 0, 3 и 6, ожидая, что результат будет 'x = -2.00', но вместо этого я получил 'x = -1.00'.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Неправильный код поиска реальных корней.

// else if (disc >= 1)
else if (disc >  0.0)
0 голосов
/ 01 апреля 2019

scanf("%lf, %lf, %lf", &a, &b, &c); указывает scanf ожидать запятые между цифрами. Когда вы вводите цифры, разделенные только пробелами, без запятых, b и c не назначаются и имеют неопределенные значения.

Чтобы исправить это, измените scanf на:

int n = scanf("%lf%lf%lf", &a, &b, &c);
if (n != 3)
{
    fprintf(stderr, "Error, scanf failed.\n");
    exit(EXIT_FAILURE);
}

Вам также нужно будет вставить #include <stdlib.h>, чтобы объявить exit.

Кроме того, else if (disc >= 1) должно быть else if (disc > 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...