Программа выводит только целые корни уравнения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер, вот решил напистаь программку, которая считает квадратные уравнения, но при выводе данных столкнулся с тем, что она правильно считает только целые корни, а дробные не выводит никак.. Помогите разобраться с типом переменных (или ошибка в другом? ).
#include <stdio.h>
#include <math.h>
int main()
{
 
  int a,b,c;
  float d,x1,x2,x;
 
  printf ("Решение квадратных уравнений вида ax^2+bx+c=0\n");
  printf ("Введите a = ");
  scanf ("%d", &a);
  printf ("Введите b = ");
  scanf ("%d", &b);
  printf ("Введите c = ");
  scanf ("%d", &c);
  if (a==0)
  {
    x=-(c/b);
    printf ("Корень уравнения единственный x = %d", x);
  }
  else
  {
    d=b*b-4*a*c;
    if (d < 0)
    printf ("Нет действительных корней");
    else
    {
      if ( d == 0 )
      {
        x = -b/(2*a);
        printf ("Корень уравнения единственный x = %d", x);
      }
      else 
      {
        x1 = (-b+sqrt(d))/(2*a);
        x2 = (-b-sqrt(d))/(2*a);
        printf ("Корени уравнения : x1 = %d     x2 = %d", x1, x2);
      }
    }
    }
    return 0;
    }
В Терминале ( ползуюсь Xcode) получаю следующее:
[Session started at 2010-09-24 18:20:06 +0400.]
Решение квадратных уравнений вида ax^2+bx+c=0
Введите a = 10
Введите b = 15
Введите c = -3
Корени уравнения : x1 = -536870912     x2 = 1069998061

Решение задачи: «Программа выводит только целые корни уравнения»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
int main()
{
 
  int a,b,c;
  float d,x1,x2,x;
 
  printf ("Решение квадратных уравнений вида ax^2+bx+c=0\n");
  printf ("Введите a = ");
  scanf ("%d", &a);
  printf ("Введите b = ");
  scanf ("%d", &b);
  printf ("Введите c = ");
  scanf ("%d", &c);
  if (a==0)
  {
    x=-((float)c/b);
    printf ("Корень уравнения единственный x = %g", x);
  }
  else
  {
    d=b*b-4*a*c;
        if (d < 0)
        printf ("Нет действительных корней");
        else
        {
          if ( d == 0 )
          {
            x = -b/(2*(float)a);
                printf ("Корень уравнения единственный x = %g", x);
          }
          else 
          {
            x1 = (-(float)b+sqrt(d))/(2*a);
                x2 = (-(float)b-sqrt(d))/(2*a);
                printf ("Корени уравнения : x1 = %g     x2 = %g", x1, x2);
          }
        }
        }
        return 0;
        }

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с числами и вводом/выводом
  2. Объявление переменных типа int для коэффициентов уравнения и типа float для его корней
  3. Вывод сообщения о решении квадратных уравнений
  4. Ввод коэффициентов a, b и c с помощью функции scanf
  5. Проверка на случай, когда a равно нулю (такое уравнение решается просто)
  6. Вычисление значения корня и вывод сообщения об этом
  7. Проверка на случай, когда дискриминант (значение переменной d) меньше нуля
  8. Если дискриминант равен нулю, то уравнение имеет один корень, который и вычисляется
  9. Если дискриминант больше нуля, то уравнение имеет два корня, которые и вычисляются
  10. Вывод значений корней на экран
  11. Возврат нуля, чтобы программа завершилась успешно

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы