/**** * * This program computes simple statistics for three real numbers read from * standard input. The statistics computed are the sum of the numbers, the * arithmetic mean, and the standard deviation. The results are output to * standard output, in the following form: * * Sum = * Mean = * Standard Deviation = * * The precise formulae for mean and standard deviation are as defined here: * * http://www.gcseguide.co.uk/statistics_and_probability.htm * * Input numbers must be non-negative. If a negative number is input, it is * treated as 0. For each negative input, the number of data points is * decremented by 1. For example, with inputs * * 1 -2 3 * * The results are * * Sum = 4.000000 * Mean = 2.000000 * Standard Deviation = 1.000000 * * * Author: Gene Fisher (gfisher@calpoly.edu) * Created: 31mar11 * Last Modified: 3apr11 * */ #include #include /* * Declare the prototypes for functions used in the program. */ double compute_sum(double x1, double x2, double x3); double compute_mean(double x1, double x2, double x3, int num_data_points); double compute_std_dev(double x1, double x2, double x3, int num_data_points); int main () { /* * Declare the variables used in main. */ double x1, x2, x3; /* Input variables */ int num_data_points; /* Number of data points */ /* * Initialize the number of data points to 3. */ num_data_points = 3; /* * Prompt the user for the input. */ printf("Enter three real numbers, separated by spaces: "); /* * Input the numbers. */ scanf("%lf%lf%lf", &x1, &x2, &x3); /* * Consider any negative input to be 0, and drop it from stats by * decrementing the number of data points for each negative input. */ if (x1 < 0) { x1 = 0; num_data_points = num_data_points - 1; } if (x2 < 0) { x2 = 0; num_data_points = num_data_points - 1; } if (x3 < 0) { x3 = 0; num_data_points = num_data_points - 1; } /* * Compute and output the results. */ printf("Sum = %f\n", compute_sum(x1, x2, x3)); printf("Mean = %f\n", compute_mean(x1, x2, x3, num_data_points)); printf("Standard Deviation = %f\n\n", compute_std_dev(x1, x2, x3, num_data_points)); return 0; } /* * Return the sum of the given three numbers. */ double compute_sum(double x1, double x2, double x3) { return x1 + x2 + x3; } /* * Return the arithmetic mean of the given three numbers, and the given number * of data points. Question: What happens here if num_data_points = 0? */ double compute_mean(double x1, double x2, double x3, int num_data_points) { return compute_sum(x1, x2, x3) / num_data_points; } /* * Return the standard deviation of the given three numbers, and the given * number of data points. Question: What happens here if num_data_points = 0? */ double compute_std_dev(double x1, double x2, double x3, int num_data_points) { double mean = compute_mean(x1, x2, x3, num_data_points); return sqrt((pow(x1 - mean, 2) + pow(x2 - mean, 2) + pow(x3 - mean, 2)) / (num_data_points - 1 )); }