Решение квадратного уравнения (найти ошибку) - C (СИ)
Формулировка задачи:
float discr( float a,float b,float c);
float findx(float b, float a, float c);
int main()
{
float a,b,c,x1,x2,x3,d;
printf("a,b,c:");
scanf("%f%f%f",&a,&b,&c);
d=discr(a,b,c);
printf("\nDiscriminant:%.f",d);
x1=findx(x1,x2,x3));
x2=findx(x1,x2,x3));
x3=findx(x1,x2,x3));
printf("%.f%.f%.f",findx(x1,x2,x3));
getch();
return 0;
}
float discr(float a, float b, float c)
{
return(b*b-4*a*c);
}
float findx(float x1, float x2, float x3) // не могу понять где ошибка, именно в функции
{
float a,b,c;
if (discr(a,b,c) < 0)
{
printf("Discriminant ne mojet bit' otricatelnim");
exit(1);
}
else if(discr(a,b,c) > 0)
{
x1=(-b+sqrt(discr(a,b,c)))/2*a;
x2=(-b-sqrt(discr(a,b,c)))/2*a;
return x1,x2;
}
else if (discr(a,b,c) == 0)
{
x3=-b/(2*a);
return x3;
}
}Решение задачи: «Решение квадратного уравнения (найти ошибку)»
textual
Листинг программы
float discr(float a, float b, float c)
{
return (b*b-4.*a*c);
}
int findx(float a, float b, float c,float *x1, float *x2) // не могу понять где ошибка, именно в функции
{
double d;d=discr(a,b,c);
if ( d< 0 || a==0)
return 0;
else if(d > 0)
{
*x1=(-b+sqrt(d))/(2.*a);
*x2=(-b-sqrt(d))/(2.*a);
return 2;
}
*x1=*x2=-b/(2*a);
return 1;
}
int main()
{
int n;
float a,b,c,x1,x2,x3,d;
printf("a,b,c:");
scanf("%f%f%f",&a,&b,&c);
d=discr(a,b,c);
printf("\nDiscriminant:%.f",d);
n=findx(a,b,c,&x1,&x2);
switch(n)
{
case 0:printf("no solution");break;
case 1: printf("one root %f",x1);break;
case 2: printf("two roots %f %f",x1,x2);
}
getch();
return 0;
}
Объяснение кода листинга программы
- В функции discr вычисляется дискриминант квадратного уравнения.
- В функции findx проверяется, есть ли решение у квадратного уравнения, и если есть, то вычисляются корни.
- В функции main вводятся значения a, b, c с клавиатуры.
- Вычисляется дискриминант и выводится на экран.
- Вызывается функция findx, в которую передаются значения a, b, c, а также адреса переменных x1 и x2.
- В зависимости от результата работы функции findx выводится соответствующее сообщение об ошибке или о наличии корней.