gpt4 book ai didi

c - 如何使用数组取数字的平均值

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:53 24 4
gpt4 key购买 nike

所以我有一组 [20][20] 数据,我试图对某些范围内的数据取平均值。我的范围是从 0 到 0.5、0.5 到 1、1 到 1.5、1.5 到 2,最后是 2 到 2.5。但是我的代码只计算每个范围的相同平均值。我的代码是:

#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;
}

使用此代码,我的所有范围都得到 0.125。知道为什么吗?

最佳答案

您在使用局部变量之前没有初始化它们:

检查下行:

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

此处您在初始化之前使用了 rangeTotalForAverages[i]。结果不可预测。

关于c - 如何使用数组取数字的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46049907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com