This is a variation of the program to calculate the roots of a quadratic equation. This version has a central while() loop which repeats the calculation until a 0 is entered as the value for the quadratic coefficient.
Please note that care is taken to avoid illegal operations in this program, such as division by 0 and taking the square root of a negative number. It is important to test that the values of the variables used in an arithmetic expression are valid. Every time you enter a division or a square root (or any other operation with a limited range of permitted values) you should include a check for illegal values.
/* Program to calculate the roots of a quadratic equation */ #include <stdio.h> /* printf() and scanf() */ #include <math.h> /* sqrt() */ main() { double aa, bb, cc, aux, root1, root2; aa = 1.0; printf("\nProgram to find the roots of a quadratic equation\n"); printf("of the form a*x*x + b*x + c = 0\n\n"); printf("Entering 0 for the value of a stops the program\n\n"); while ( aa != 0.0 ) { /* Enter coefficients for equation */ printf("Enter value for a : "); scanf("%lf", &aa); if ( aa == 0.0 ) { /* Exit the while() loop, unless we want a division by 0 */ break; } printf("Enter value for b : "); scanf("%lf", &bb); printf("Enter value for c : "); scanf("%lf", &cc); /* Better make sure there is a real root for these coefficients */ aux = bb * bb - 4 * aa * cc; if ( aux > 0.0 ) /* There are 2 solutions */ { aux = sqrt( aux ); /* Our 'aux' variable now holds the square root of its previous value, we do this because we don't want to calculate the square root more than once */ /* We have already made sure that aa !=0, so a division is safe */ root1 = ( -bb + aux ) / ( 2 * aa ); root2 = ( -bb - aux ) / ( 2 * aa ); printf("\nThe roots %.4lf and %.4lf were found\n\n", root1, root2 ); } else if ( aux == 0.0 ) /* There is only one solution */ { root1 = -bb / ( 2 * aa ); printf("\nA single root, %.4lf, was found\n\n", root1 ); } else /* There is no real solution */ { printf("\nNo real roots were found\n\n"); } } /* End while() loop */ printf("\nEnd of program, goodbye!\n\n"); return; } |
A sample run of this program is shown below.
gabor-7 $ cd cprog gabor-8 $ ls -l total 82 -rw------- 1 eng529 eng 125 Nov 10 15:12 first.c -rw------- 1 eng529 eng 127 Nov 10 15:12 program1.c -rwx--x--x 1 eng529 eng 37012 Nov 10 15:25 roots -rw------- 1 eng529 eng 1828 Nov 10 15:12 roots.c gabor-9 $ roots Program to find the roots of a quadratic equation of the form a*x*x + b*x + c = 0 Entering 0 for the value of a stops the program Enter value for a : 1.3 Enter value for b : -3.3 Enter value for c : 2.1 No real roots were found Enter value for a : 1.3 Enter value for b : -3.3 Enter value for c : 0.7 The roots 2.3048 and 0.2336 were found Enter value for a : 1 Enter value for b : 2 Enter value for c : 1 A single root, -1.0000, was found Enter value for a : 0 End of program, goodbye! gabor-10 $ |