C   25
average
Guest on 14th March 2023 12:05:50 AM


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. int read_data(const char *file_name, int *pN, double **pData);
  7.  
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.   int    N, i;
  12.   double *data, average, diff, std_dev;
  13.   char   *file_name = "data";
  14.  
  15.   // parse arguments
  16.   if (argc > 1)
  17.     file_name = argv[1];
  18.  
  19.   // setup
  20.   if (read_data(file_name, &N, &data) != EXIT_SUCCESS)
  21.     return EXIT_FAILURE;
  22.  
  23.   printf("computing\n");
  24.  
  25.   // average
  26.   average = 0.0;
  27.   for (i=0; i < N; i++)
  28.     average += data[i];
  29.   printf("sum: %f\n", average);
  30.   average /= N;
  31.   printf("average: %f\n", average);
  32.  
  33.   // standard deviation
  34.   std_dev = 0.0;
  35.   for (i=0; i < N; i++)
  36.     {
  37.       diff = data[i] - average;
  38.       std_dev += diff * diff;
  39.     }
  40.   std_dev = sqrt(std_dev / (N-1));
  41.   printf("standard deviation: %f\n", std_dev);
  42.  
  43.   // cleanup and exit
  44.   free(data);
  45.   return EXIT_SUCCESS;
  46. }
  47.  
  48. /* Read in data from a file, discarding the x data. */
  49. int read_data(const char *file_name, int *pN, double **pData) {
  50.   FILE   *fp;
  51.   int    i;
  52.   double x, y;
  53.  
  54.   // open the file
  55.   if ((fp = fopen(file_name, "r")) == NULL)
  56.     {
  57.       fprintf(stderr, "error in opening data file %s\n", file_name);
  58.       return EXIT_FAILURE;
  59.     }
  60.  
  61.   // read the size of the data file
  62.   fscanf(fp, "# %d", pN);
  63.  
  64.   // allocate memory for the data
  65.   *pData = (double *)malloc(sizeof(double)* *pN);
  66.   if (*pData == NULL)
  67.     {
  68.       fprintf(stderr, "could not allocate %d bytes\n", sizeof(double)* *pN);
  69.       return EXIT_FAILURE;
  70.     }
  71.  
  72.   // read in the data
  73.   printf("reading %d points\n", *pN);
  74.   for (i=0; i < *pN ; i++)
  75.     {
  76.       fscanf(fp, "%lf %lf", &x, &y);
  77.       (*pData)[i] = y;
  78.     }
  79.  
  80.   // close the file
  81.   fclose(fp);
  82.   return EXIT_SUCCESS;
  83. }

Raw Paste

Login or Register to edit or fork this paste. It's free.