Программа выводит только целые корни уравнения - C (СИ)
Формулировка задачи:
Добрый вечер, вот решил напистаь программку, которая считает квадратные уравнения, но при выводе данных столкнулся с тем, что она правильно считает только целые корни, а дробные не выводит никак.. Помогите разобраться с типом переменных (или ошибка в другом? ).
В Терминале ( ползуюсь Xcode) получаю следующее:
#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;
}[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;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с числами и вводом/выводом
- Объявление переменных типа int для коэффициентов уравнения и типа float для его корней
- Вывод сообщения о решении квадратных уравнений
- Ввод коэффициентов a, b и c с помощью функции scanf
- Проверка на случай, когда a равно нулю (такое уравнение решается просто)
- Вычисление значения корня и вывод сообщения об этом
- Проверка на случай, когда дискриминант (значение переменной d) меньше нуля
- Если дискриминант равен нулю, то уравнение имеет один корень, который и вычисляется
- Если дискриминант больше нуля, то уравнение имеет два корня, которые и вычисляются
- Вывод значений корней на экран
- Возврат нуля, чтобы программа завершилась успешно