C Program: Quadratic Equation Roots
Formula: x = (-b ± √(b²-4ac)) / 2a
Discriminant D = b²-4ac determines: Real/Distinct (D>0), Equal (D=0), Complex (D<0)
1. Complete Solution (All Cases)
C
Production-ready with validation
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, D, r1, r2, real, imag;
printf("Enter a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
if(a == 0) {
printf("Not quadratic! Linear: x = -c/b = %.2lf\n", -c/b);
return 1;
}
D = b*b - 4*a*c;
printf("D = %.2f\n", D);
if(D > 0) {
r1 = (-b + sqrt(D))/(2*a);
r2 = (-b - sqrt(D))/(2*a);
printf("Root1 = %.2lf, Root2 = %.2lf\n", r1, r2);
}
else if(D == 0) {
r1 = -b/(2*a);
printf("Equal roots: %.2lf\n", r1);
}
else {
real = -b/(2*a);
imag = sqrt(-D)/(2*a);
printf("Root1 = %.2lf + %.2lfi\n", real, imag);
printf("Root2 = %.2lf - %.2lfi\n", real, imag);
}
return 0;
}
2. Test Cases
TEXT
Expected outputs verified
a b c | D | Roots
1 -3 2 | 1.00 | 2.00, 1.00
1 -2 1 | 0.00 | 1.00 (equal)
1 2 2 |-4.00 | -1.00 ± 1.00i
1 5 6 | 1.00 | -2.00, -3.00
3. Reusable Function
C
Modular approach
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
typedef struct {
double r1, r2;
bool real;
} Roots;
Roots solveQuadratic(double a, double b, double c) {
Roots result = {0};
double D = b*b - 4*a*c;
if(D > 0) {
result.r1 = (-b + sqrt(D))/(2*a);
result.r2 = (-b - sqrt(D))/(2*a);
result.real = true;
} else if(D == 0) {
result.r1 = result.r2 = -b/(2*a);
result.real = true;
} else {
result.r1 = -b/(2*a);
result.r2 = sqrt(-D)/(2*a);
result.real = false;
}
return result;
}
int main() {
Roots roots = solveQuadratic(1, -3, 2);
if(roots.real)
printf("Roots: %.2lf, %.2lf\n", roots.r1, roots.r2);
else
printf("Roots: %.2lf ± %.2lfi\n", roots.r1, roots.r2);
return 0;
}
4. Discriminant Decision Table
TEXT
Quick reference
D = b²-4ac | Roots Type | Formula
---------------|------------------|--------------------------------
D > 0 | 2 Real/Distinct | (-b±√D)/(2a)
D = 0 | 1 Real (Equal) | -b/(2a)
D < 0 | 2 Complex | -b/(2a) ± i√(-D)/(2a)
5. Production Checklist
6. Common Errors Fixed
TEXT
Avoid these mistakes
❌ Wrong: if(D >= 0) // Misses exact D=0
❌ Wrong: float a,b,c; // Low precision
❌ Wrong: gcc file.c // Missing -lm
✅ Correct:(long double)D = b*b - 4*a*c;
7. Interview-Ready Version
C
Shows deeper understanding
#include <stdio.h>
#include <math.h>
int main() {
double a=1, b=-7, c=12; // x²-7x+12=0
double D = b*b-4*a*c;
printf("Equation: %.0lfx² + %.0lfx + %.0lf = 0\n", a,b,c);
printf("Discriminant: %.2f\n", D);
if(D > 0) {
double r1 = (-b+sqrt(D))/(2*a), r2=(-b-sqrt(D))/(2*a);
printf("Roots: %.0lf, %.0lf (Real/Distinct)\n", r1>r2?r1:r2, r1>r2?r2:r1);
} else if(fabs(D) < 1e-9) { // Floating point safe
printf("Root: %.2lf (Equal)\n", -b/(2*a));
} else {
double real = -b/(2*a), imag = sqrt(-D)/(2*a);
printf("Roots: %.2lf ± %.2lfi (Complex)\n", real, imag);
}
return 0;
}
8. One-Liner Formula
C
Core math (copy-paste)
double D = b*b-4*a*c;
double r1 = (-b + sqrt(D))/(2*a), r2 = (-b - sqrt(D))/(2*a);
Compile: gcc quadratic.c -lm
Codecrown