/* * ====================================================================== * Solve Quadratic Equations : Coefficients are read in from keyboard * : Roots of Quadratic are printed to screen. * * Note : Naive implementation of quadratic equation solver. This algorithm * does not take into account possible loss of accuracy when two * floating point numbers of almost equal size are subtracted. * ====================================================================== */ #include /* Standard Input/Output function declarations */ #include /* Math functions, such as sqrt(x). */ float discriminant( float , float , float ); int main( void ) { float fA, fB, fC; /* Coefficients for Quadratic Equation */ float fRoot1, fRoot2; /* Real Roots 1 and 2 of Quadratic Equation */ float fDiscriminant; /* Discriminant of Quadratic */ char caBuffer[8]; /* Buffer array to hold input from screen */ /* [a] : Print Welcome Message */ printf("Welcome to the Quadratic Equation Solver (Version 1)\n"); printf("====================================================\n"); /* [b] : Read in Set of Equations */ printf("\nWould you like to input a quadratic quations (yes/no/quit) ? "); scanf("%s%*c", caBuffer); if(strcmp(caBuffer,"yes") != 0) exit (1); /* [c] : Prompt User for Coefficents of Quadratic Equation */ printf("Please enter coefficients for equation a.x^2 + b.x + c\n"); printf("Enter coefficient a : "); scanf("%f%*c", &fA); printf("Enter coefficient b : "); scanf("%f%*c", &fB); printf("Enter coefficient c : "); scanf("%f%*c", &fC); /* [d] : Print Quadratic Equation to Screen */ printf("Equation you have entered is : %g.x^2 + %g.x + %g\n", fA, fB, fC); /* [e] : Compute Roots of simplified equations : fA equals zero */ if(fA == 0 && fB == 0) { printf("Cannot Solve Extremely Degenerate Equation %14.8g = 0.0\n", fC ); exit (1); } if(fA == 0 && fB != 0) { fRoot1 = - fC/fB; printf("Degenerate Root : Root = %14.8g\n", fRoot1 ); exit (1); } /* [f] : Compute Roots of Quadratic Equation : fA not equal to zero */ fDiscriminant = discriminant( fA, fB, fC ); if(fDiscriminant >= 0) { /* Case for Two Real Roots */ fRoot1 = -fB/2.0/fA - sqrt( fDiscriminant )/2.0/fA; fRoot2 = -fB/2.0/fA + sqrt( fDiscriminant )/2.0/fA; printf("Two Real Roots : Root1 = %14.8g\n", fRoot1 ); printf(" : Root2 = %14.8g\n", fRoot2 ); } else { /* Case for Complex Roots */ printf("Two Complex Roots : Root1 = %14.8g + %14.8g i\n", -fB/2.0/fA, sqrt( -fDiscriminant )/2.0/fA); printf(" : Root2 = %14.8g + %14.8g i\n", -fB/2.0/fA, -sqrt( -fDiscriminant )/2.0/fA); } } /* * ====================================================== * Function to Compute Discriminant of Quadratic Equation * ====================================================== */ float discriminant( float fA, float fB, float fC ) { return(fB*fB - 4.0*fA*fC); }