#include #include #include double dsum( double* numbers, int numNumbers ) { double retval = 0.0; int x; for( x = 0; x < numNumbers; x++ ) { retval += numbers[ x ]; } return retval; } double average( double* numbers, int numNumbers ) { return dsum( numbers, numNumbers ) / numNumbers; } double stddev( double* numbers, int numNumbers ) { int x; double summation = 0.0; double avg = average( numbers, numNumbers ); for( x = 0; x < numNumbers; x++ ) { double minus = numbers[ x ] - avg; summation += minus * minus; } return sqrt( ( 1 / ( (double)numNumbers - 1 ) ) * summation ); } // reads in numbers from the user until we encounter // a non-number double* readNumbers( int* numNumbersRead ) { double* retval = NULL; double input; *numNumbersRead = 0; while( scanf( "%lf", &input ) == 1 ) { (*numNumbersRead)++; // NOT THE SAME AS `*numNumbersRead++`!! retval = realloc( retval, *numNumbersRead * sizeof( double ) ); retval[ *numNumbersRead - 1 ] = input; } return retval; } int main() { double* numbers; int numNumbers; numbers = readNumbers( &numNumbers ); printf( "Standard deviation: %lf\n", stddev( numbers, numNumbers ) ); free( numbers ); return 0; }