Нужны наводки по корректировке работы функции в коде
Условие самой задачи: в main ввести массив целых чисел (количество - с клавиатуры), в функции вернуть количество и сумму членов массива, которые не превышают среднее арифметическое членов массива.
Проблема в том, что функция ничего не возвращает - ни суммы нужных элементов, ни их количества. Подскажите, что не так в функции, заранее спасибо (код ниже).
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int func(int* m, int &n)
{
int i = 0, sr_znach, sum=0, k=0;
for (i; i < n; i++)
{
sum += *(m + i);
}
sr_znach = sum / n;
sum = 0;
for (i = 0; i < n; i++)
{
if (*(m + i) <= sr_znach)
{
sum += *(m + i);
k++;
}
}
return k;
return sum;
}
int main()
{
setlocale(LC_ALL, "ru");
int* ms, n=0, i = 0;
ms = (int*)calloc(n, sizeof(int));
if (!ms)
{
printf("Недостаточно памяти");
return 0;
}
printf("Введите размерность массива: ");
scanf_s("%d", &n);
printf("Введите массив: ");
for (i; i < n; i++)
{
scanf_s("%d", (ms + i));
}
func(ms, n);
}
Ответы (2 шт):
Если у вас и правда C, попробуйте возврат через указатель:
void func(int* m, int n, int * count, int * Summa)
{
int sum = 0, k = 0;
for (int i = 0; i < n; i++)
{
sum += *(m + i);
}
double sr_znach = (double)sum/n;
sum = 0;
for (int i = 0; i < n; i++)
{
if (*(m + i) <= sr_znach)
{
sum += *(m + i);
k++;
}
}
if (count) *count = k;
if (Summa) *Summa = sum;
}
Ну, а использовать ее -
printf("Введите массив: ");
for (i; i < n; i++)
{
scanf_s("%d", (ms + i));
}
int count, sum;
func(ms, n, &count, &sum);
printf("Количество = %d, сумма = %d\n",count, sum);
Вы выделяете память перед тем, как попросили пользователя ввести размерность массива.
То есть у вас
n = 0вы выделяете память, а потом уже просите ввести размерность массива => ошибка выход за пределы массиваНужно сначала спросить у пользователя размерность, а потом уже выделять память.
printf("Введите размерность массива: "); scanf_s("%d", &n); ms = (int*)calloc(n, sizeof(int));Вы пишите в конце функции
func()дваreturn, но это так не работает, после первого жеreturnу вас произойдет выход из функции. Чтобы передать из функции например кол-во слагаемых, нужно воспользоваться ссылками.Передача параметра по ссылке происходит следующим образом:
int func(int* m, int n, int* new_n)Теперь функцию будет возвращать сумму по значению (через
return), а кол-во слагаемых по ссылке (черезnew_n).Вот пример функции (где
...это места кода, где ничего не менялось)int func(int* m, int n, int* new_n) { ... *new_n = k; return sum; }
И теперь вывод может выглядеть следующим образом:
int new_n = 0;
printf("Сумма: %d\n",func(ms, n, &new_n));
printf("Кол-во слагаемых: %d\n", new_n);