/* --------------------------------------------------------------------- ** Figure 10.15: Mean and standard deviation. ** Figure 10.17: The get_data() function. ** Figure 10.18: Functions average() and variance(). ** --------------------------------------------------------------------- */ #include "tools.h" #define N 50 /* number of data values */ void get_data( double x[], int n ); double average ( double x[], int n ); double variance( double x[], int n, double mean ); void main( void ) { double x[N]; /* An array for the N data values. */ int num; /* Actual number of data values. */ double mean; /* The mean of the values in array x. */ double var; /* Variance of the data in array x. */ double stdev; /* Standard deviation of the data in array x. */ banner(); printf( "\n Enter number of values in data set (2..%i): ", N ); for (;;) { scanf( "%i", &num ); if (num > 1 && num <= N) break; printf( "Error: %i is out of legal range, try again: \n", num ); } printf( " Computing statistics on %i data values.\n", num ); get_data ( x, num ); mean = average( x, num ); var = variance( x, num, mean ); stdev = sqrt(var); printf( "\n\n The mean of the %i data values is = %.2f \n", num, mean ); printf( "\n The variance is = %.2f \n", var ); printf( "\n The standard deviation is = %.2f \n", stdev ); bye(); } /* ----------------------------------------------------------------- // Given an empty array of length n, input data values to fill it. */ void get_data( double x[], int n ) { int k; /* Loop counter and array subscript. */ puts( " Please enter data values when prompted." ); for (k = 0; k < n; ++k) { printf( " x[%i] = ", k ); /* Prompt for kth value. */ scanf( "%lg", &x[k] ); /* Read into array slot k. */ } } /* ----------------------------------------------------------------- // Given an array of values, print the values and calculate the mean. */ double average( double x[], int n ) { double sum; int k; /* Loop counter and array subscript. */ for (sum = k = 0; k < n; ++k) { printf( "\n x[%d] = %.2f", k, x[k] ); sum += x[k]; } return sum / n; } /* ----------------------------------------------------------------- // Given an array of values and their mean, calculate the variance. */ double variance( double x[], int n, double mean ) { double divisor, sum; int k; for (sum = k = 0; k < n; ++k) { /* Compute and sum the k-squares. */ sum += pow( (x[k]-mean), 2 ); } if (n < 20) divisor = n-1; else divisor = n; return sum / divisor; }