Здравствуйте, у меня есть проблемы с вычислением среднего значения в моей функции, программа компилируется, однако я не получаю ожидаемый ответ 64.2 для распечатки и вместо этого получаю случайный набор целых чисел и символов.
Это не весь код, а только соответствующие переменные и функции.
// main function and prototyping would be here
int size=0;
float values[]={10.1, 9.2, 7.9, 9.2, 13.0, 12.7, 11.3};float mean(float values[], int size)
{
float sum = 0;
float mean = 0;
for (size = 0; size > 7; size++)
{
sum += values[size];
mean = sum / 7;
}
return mean;
}
Почему тест size > 7
там? Ожидаете, что ваше начальное значение будет иметь необычно большое значение ноль? Вполне вероятно, что вы имеете в виду size < 7
Хотя использование произвольных магических чисел, как это является проблемой.
Что вы, вероятно, хотите, это:
float mean(float* values, int size)
{
float sum = 0;
for (int i = 0; i < size; ++i)
sum += values[i];
return sum / size;
}
Чтобы быть больше C ++, вы бы хотели, чтобы эта подпись была:
float mean(const float* values, const size_t size)
Таким образом, вы можете обнаружить любые ошибки при изменении этих значений.
Измените ваш цикл так:
for (size = 0; size < 7; size++)
{
sum += values[size];
}
mean = sum / 7;
for
петля не права. mean
вне цикла. for (size = 0; size > 7; size++)
Так как размер инициализируется как 0 и увеличивается на 1, он становится равным 1 в конце первой итерации и не проходит тест (это не> 7). Таким образом, он сразу выходит из цикла.
Во-вторых, вы вычисляете среднее значение внутри цикла, когда вы должны вычислить его после завершения цикла. Теоретически, вы должны получить правильное значение, поскольку вы возвращаете его как среднее значение сумм к этой точке в цикле, но это пустая трата времени. Вы также стираете размер, переопределяя его.
float mean(float values[], int size)
{
float sum = 0;
float mymean = 0;
for (int i = 0; i < size; i++)
{
sum += values[i];
}
mymean = sum / size;
return mymean;
}