简体   繁体   中英

How to use arrays to take average of numbers

So i have a [20][20] set of data that i'm trying to take average of the data within some ranges. my ranges are from 0 to 0.5 , 0.5 to 1 , 1 to 1.5 ,1.5 to 2 and lastly 2 to 2.5. However my code only calculates the same average for each range. my code is :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Declare constants
// Name of file that stores our raw data
#define FILE_NAME "data_1.csv"

// Data size
#define MAX_ROWS 20
#define MAX_COLUMNS 20
#define LOW_ERROR 0.0
#define HIGH_ERROR 2.5
#define MAX_RANGE 6

// Main entry point for the program
int main(void) 
{
// Decalred variables
int rowIndex = 0;
int columnIndex = 0;

//Stores the  data and maps
double rawData[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our raw data
double roundedValue[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our rounded data
int classificationMap[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our classification map

//Stores the range data
float rangeValue[MAX_RANGE] = { 0.0,0.5,1.0,1.5,2.0,2.5 }; // Set up the range bounds
int i, rangeAveragesCount[MAX_RANGE];
float rangeTotalForAverages[MAX_RANGE];
float rangeAverage[MAX_RANGE];

// Print out the rawdata array
printf(" --- RAW DATA ---\n");
for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++) 
{
    // Read up until the last value
    for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++) 
    {
        printf("%.9lf ", rawData[rowIndex][columnIndex]);
    }
    printf("\n");
}
// Print out the roundup data array
printf(" --- ROUNDED DATA ---\n");
for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++)
{
    // Read up until the last value
    for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++)
    {
        if (rawData[rowIndex][columnIndex] < LOW_ERROR)
        {
            roundedValue[rowIndex][columnIndex] = LOW_ERROR;
            printf("%.3f ", LOW_ERROR);
        }
        else if (rawData[rowIndex][columnIndex] > HIGH_ERROR)
        {
            roundedValue[rowIndex][columnIndex] = HIGH_ERROR;
            printf("%.3f ", HIGH_ERROR);
        }
        else
        {
            roundedValue[rowIndex][columnIndex] = ceil(rawData[rowIndex][columnIndex] * 1000.0) / 1000.0;
            printf("%.3f ", ceil(rawData[rowIndex][columnIndex] * 1000.0) / 1000.0);
        }
    }
    printf("\n");
}
//Calculate and store the averages for each range
printf(" --- RANGE TABLE ---\n");
for (i = 0; i < 5; i++)
{
    for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++)
    {
        for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++)
            if (roundedValue[rowIndex][columnIndex] > rangeValue[i] && roundedValue[rowIndex][columnIndex] <= rangeValue[i + 1])
            {
                rangeTotalForAverages[i] = rangeTotalForAverages[i] + roundedValue[rowIndex][columnIndex];
                rangeAveragesCount[i] + 1;
            }

    }
    rangeAverage[i] = rangeTotalForAverages[i] / rangeAveragesCount[i];
    printf("%.3f \n", rangeAverage[i]);
    rangeTotalForAverages[i] = 0;
    rangeAverage[i] = 0;
    rangeAveragesCount[i] = 0;
}

// Exit
return 0;
}

Using this code i get 0.125 for all my ranges. any idea why?

You have not initialized local variables before using them:

Check Below Line:

 rangeTotalForAverages[i] = rangeTotalForAverages[i] + roundedValue[rowIndex][columnIndex];

Here you are using rangeTotalForAverages[i] before initializing it. Result is unpredictable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM