C Program: Quadratic Equation

A second order polynomial equation of type $ax^{2} + bx + c = 0$, where $x$ is a variable and $a \ne 0$ is known as a Quadratic Equation.

Here, we will be writing a C program to find the roots of a quadratic equation $ax^{2} + bx + c = 0$.

By the Fundamental Theorem of Algebra, a quadratic equation has two roots. These roots are given by

$x = \frac{-b \pm \sqrt{b^{2} - 4ac}}{2a}$

This is also known as the Quadratic Formula.

The expression $b^{2} - 4ac$ is known as the discriminant of the quadratic equation. The nature of the roots depend heavily on it. From the quadratic formula, we can make out that if

In the below C program, the roots are computed inside the if, else if and else blocks, each depending on whether the discriminant is $\gt 0$, $= 0$ and $\lt 0$. The else part of the loop computes the real and imaginary parts of the roots separately. Since the discriminant is $\lt 0$ (negative), the minus sign is prepended to it to make it positive; for if not, the sqrt() function will return nan ("Not a Number"). The variables x1 and x2 are assigned the computed values of the roots based on the quadratic formula.

The <math.h> library is imported to make use of the pow() and sqrt() functions.

				
				#include <stdio.h>
				#include <math.h>
				int main() {
					float a, b, c, discriminant, x1, x2, r, i;
					printf("coefficient of x^2: ");
					scanf("%f", &a);
					printf("coefficient of x: ");
					scanf("%f", &b);
					printf("constant term: ");
					scanf("%f", &c);
					discriminant = pow(b,2) - 4*a*c;
					if(discriminant > 0) {
						x1 = (-b + sqrt(discriminant))/(2*a);
						x2 = (-b - sqrt(discriminant))/(2*a);
						printf("x1 = %.2f \n", x1);
						printf("x2 = %.2f \n", x2);
					} else if (discriminant == 0) {
						x1 = -b/(2*a);
						x2 = -b/(2*a);
						printf("x1 = %.2f \n", x1);
						printf("x2 = %.2f \n", x2);
					} else {
						r = -b/(2*a);
						i = sqrt(-discriminant)/(2*a);
						printf("x1 = %.2f +i %.2f \n", r, i);
						printf("x2 = %.2f -i %.2f \n", r, i);
					}
					return 0;
				}
				
			

We take a quadratic equation straight out of the classic Hall & Knight's text Elementary Algebra1, which is as follows:

5x^2 - 15x + 11 = 0

On deducing, the roots are found to be $\frac{15 + \sqrt{5}}{10}$ and <$\frac{15 - \sqrt{5}}{10}$ respectively. Substituting for $\sqrt{5} \approx 2.236$, we get the approximate values of the roots as $1.7236$ and $1.2764$.

Running our program for the above equation, we get:

c program quadratic equations real unequal roots

Notes

  • 1. H. S. Hall & S. R. Knight, Elementary Algebra. London: Macmillan & Co., Ltd., 1896. Chapter XXVI: Quadratic Equations, p. 241, Ex. 1.