Example
Input
Input a: 8 Input b: -4 Input c: -2
Output
Root1: 0.80 Root2: -0.30
Quadratic equation
Wikipedia states, in elementary algebra a quadratic equation is an equation in the form of
Logic to find all roots of a quadratic equation
Based on the above formula let us write step by step descriptive logic to find roots of a quadratic equation.
- Input coefficients of quadratic equation from user. Store it in some variable say a, b and c.
- Find discriminant of the given equation, using formula discriminant = (b*b) – (4*a*c).
- Compute roots based on the nature of discriminant.
- If
discriminant > 0
then,root1 = (-b + sqrt(discriminant)) / (2*a)
androot2 = (-b - sqrt(discriminant)) / (2*a)
. - If
discriminant == 0
then,root1 = root2 = -b / (2*a)
. - Else if
discriminant < 0
then, there are two distinct complex roots whereroot1 = -b / (2*a)
androot2 = -b / (2*a)
.
Imaginary part of the root is given byimaginary = sqrt(-discriminant) / (2*a)
.
/**
* C program to find all roots of a quadratic equation
*/
#include <stdio.h>
#include <math.h> /* Used for sqrt() */
int main()
{
float a, b, c;
float root1, root2, imaginary;
float discriminant;
printf("Enter values of a, b, c of quadratic equation (aX^2 + bX + c): ");
scanf("%f%f%f", &a, &b, &c);
/* Find discriminant of the equation */
discriminant = (b * b) - (4 * a * c);
/* Find the nature of discriminant */
if(discriminant > 0)
{
root1 = (-b + sqrt(discriminant)) / (2*a);
root2 = (-b - sqrt(discriminant)) / (2*a);
printf("Two distinct and real roots exists: %.2f and %.2f", root1, root2);
}
else if(discriminant == 0)
{
root1 = root2 = -b / (2 * a);
printf("Two equal and real roots exists: %.2f and %.2f", root1, root2);
}
else if(discriminant < 0)
{
root1 = root2 = -b / (2 * a);
imaginary = sqrt(-discriminant) / (2 * a);
printf("Two distinct complex roots exists: %.2f + i%.2f and %.2f - i%.2f",
root1, imaginary, root2, imaginary);
}
return 0;
}
/*
Output :
Enter values of a, b, c of quadratic equation (aX^2 + bX + c): 8 -4 -2
Two distinct and real roots exists: 0.81 and -0.31
*/