/*
* grades_1.c
* This program reads a series of grades,
terminated by (-1), and computes
* the average and
variance.
*/
#include <stdio.h>
int main ()
{
const
int min_grade = 0;
const
int max_grade = 100;
const
int stop_code = -1;
int curr_grade; /* The
current grade. */
int sum_grades = 0; /* The sum of
all grades so far. */
int sum_sqr_grades = 0; /* The sum of their squares. */
int n_grades = 0; /* The
number of legal grades so far. */
float average;
float variance;
/* Notice that the
loop is theoretically infinite. */
while
(1)
{
/* Read the
current grade. */
printf ("Please enter the next grade (or -1 to stop): ");
scanf ("%d", &curr_grade);
/* Stop if
necessary. */
if
(curr_grade == stop_code)
break;
/* Ignore illegal values. */
if
(curr_grade < min_grade || curr_grade > max_grade)
{
printf ("Ignoring illegal grade (%d).\n",
curr_grade);
continue;
}
/* Update our
sums. */
sum_grades += curr_grade;
sum_sqr_grades += curr_grade * curr_grade;
n_grades++;
}
/* Compute the
average and variance. */
if
(n_grades > 0)
{
average = (float)sum_grades / (float)n_grades;
/* Using the equality: Var(X) = E(X^2) - E(X)*E(X) */
variance = (float)sum_sqr_grades / (float)n_grades
- average * average;
printf ("Average grade is %g (variance = %g).\n",
average, variance);
}
return
(0);
}