This programming assignment will exercise your C programming muscles while also enabling you to visualize an essential fact about statistics: the Central Limit Theorem _. According to this theorem, if you take the average over many random samples, and do this many times, those averages will conform to a pattern known as the normal distribution .. If you then plot the averages, with their values along the X axis and the frequency with which each range of values occurs along the Y axis, the plot will take on the familiar "bell curve" shape. We can produce a similar shape by means of a histogram, like a horizontal bar chart, appearing as rows of Xs , where the number of Xs in each row represents the number of times that an average over random samples fell into the range represented by that row. Each row in this hisogram is labeled with the central value of the range of averages represented by that row. The number of Xs corresponds to the frequency with which an average falls into that interval. Below the histogram, the program prints the overal mean over all the averages as well as the sample variance, or mean over the squared differences between an actual average and the mean over the averages. Details We start by computing the mean over many random samples: get_mean_of_uniform_random_samples. Define a symbolic constant, SAMPLES, for the number of (pseudo-)random samples to be taken to make up this mean. Then call the C Standard Library function rand , declared in stdlib.h, that number of times. Accumulate the sum of those values - as a double - and then, after all iterations are complete, divide the sum by SAMPLES. Now, rand returns an int value in the range [0, RAND_MAX], where RAND_MAX is an implementation-dependent but big integer value. Such an integer value is not exactly what we need for our purposes. Instead, we need a rational number value between 1 and 1 and centered around 0 , so that wen can aim for a mean of 0 . To get such a value, we transform the results of rand with some straightforward arithmetic: - Divide the result by RAND_MAX. using rational number division (In order to do this, cast at least one operand to type double and store the result in a variable of type double.) This gives a rational number value in [ 0.0 , 1.0 ] . - Multiply by 2.0. This gives a rational number value in [ 0.0 , 2.0 ] . - Subtract 1.0. This gives the desired value in [ 1.0 , 1.0 ] . Be sure to cast both dividend and divisor to type double before the first division to ensure rational number division rather than integer division, and use variables and constants of type double from that point onward. Recall that the compiler reads a numeric literal with a decimal point in it as having type double. Create a main function so that you can call get_mean_of_uniform_random_samples and print the result to test whether it looks reasonable. You might want to call the function in a loop and print the values so that you can see whether they tend toward 0 , which .