Вывод дробных корней квадратного уравнения - C (СИ)
Формулировка задачи:
Не выводит дробные числа x1 , x2. На примере этого уравнения 3x^2+7x+2=0 . C целыми числами работает нормально . Подскажите пожалуйста в чем здесь ошибка.
#include "stdio.h"
#include <math.h>
#include <conio.h>
int main()
{
float a=0,b=0,c=0,x1,x2,x;
float d=0,f;
printf("Nahogdenie kornej kvadratnogo uravneniy ");
printf("\nVvedide znachenie a : ");
scanf("%f",&a);
printf("Vvedide znachenie b : ");
scanf("%f",&b);
printf("Vvedide znachenie c : ");
scanf("%f",&c);
d=b*b-4*a*c;
printf("D = %f", d);
f=sqrt(d);
if (d>0){
x1=(-b+f)/2*a;
x2=(-b-f)/2*a;
printf("\nKvadratny koren x1 = %f ",x1);
printf("\nKvadratny koren x2 = %f ",x2);
getchar();
}
else if (d==0) {
x=(-b+f)/2*a;
printf("\nKvadratny koren x = %f", x);
getchar();
}
else {
printf("\nNet kornej");
getchar();
}
getchar();
return 0;
}Решение задачи: «Вывод дробных корней квадратного уравнения»
textual
Листинг программы
//f=sqrt(d);
if (d>0)
{
f=sqrt(d);
x1=(-b+f)/2*a;
x2=(-b-f)/2*a;
printf("\nKvadratny koren x1 = %f ",x1);
printf("\nKvadratny koren x2 = %f ",x2);
getchar();
}
else if ((d>0) && (d<=1E-8))
{
x=(-b)/2*a;
printf("\nKvadratny koren x = %f", x);
getchar();
}
else
{
printf("\nNet kornej");
getchar();
}
Объяснение кода листинга программы
- Сначала проверяется условие
d > 0. Если оно истинно, то выполняется блок кода внутри этого условия. - Внутри блока кода вычисляется
f = sqrt(d). - Затем вычисляются
x1 = (-b + f) / (2 * a)иx2 = (-b - f) / (2 * a). - Выводятся значения
x1иx2с помощью функцииprintf. - Если условие
d > 0не выполняется, то проверяется условиеd > 0 && d <= 1E-8. - Если это условие истинно, то вычисляется
x = (-b) / (2 * a)и выводится значениеxс помощью функцииprintf. - Если ни одно из условий не выполняется, то выводится сообщение
Net kornejс помощью функцииprintf.