Найти среднее значение двухмерного массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. double sum2d(int a, int b, const double mass[a][b]);
  3. int main(void)
  4. {
  5. const int YEARS = 5;
  6. const int MONTHS = 12;
  7. const float rain[YEARS][MONTHS] =
  8. {
  9. { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },
  10. { 8.5, 8.2, 1.2, 1.6, 2.4, 0.5, 2.0, 9.0, 3.0, 9.1, 4.7, 3.0 },
  11. { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },
  12. { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },
  13. { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },
  14. };
  15. printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS);
  16. return 0;
  17. }
  18. double sum2d(int a, int b, const double mass[a][b])
  19. {
  20. int i, j;
  21. int total;
  22. double **pt;
  23. **pt = mass[0][0];
  24. for (i = 0; i < a; ++i)
  25. {
  26. for(j = 0; j < b; ++j)
  27. {
  28. total+=**pt;
  29. ++pt;
  30. }
  31. }
  32. return total;
  33. }
При компиляции помимо куци предупреждений выдается следующие ошибки: rain.c:20:2: error: incompatible type for argument 3 of ‘sum2d’ printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS); ^ rain.c:3:8: note: expected ‘const double (*)[(sizetype)(b)]’ but argument is of type ‘float’ double sum2d(int a, int b, const double mass[a][b]);
по заданию считать нужно с применением указателей.

Решение задачи: «Найти среднее значение двухмерного массива»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define YEARS 5
  4. #define MONTHS 12
  5. double sum2d(int a, int b, double mass[][MONTHS]);
  6.  
  7. int main(void)
  8. {
  9.     double rain[YEARS][MONTHS] =
  10.     {
  11.         { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },
  12.         { 8.5, 8.2, 1.2, 1.6, 2.4, 0.5, 2.0, 9.0, 3.0, 9.1, 4.7, 3.0 },
  13.         { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },
  14.         { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },
  15.         { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },
  16.     };
  17.  
  18.     printf("Среднегодовое количество осадков за 5 лет = %6.2f\n",sum2d(YEARS, MONTHS, rain)/YEARS);
  19.     return 0;
  20. }
  21.  
  22. double sum2d(int a, int b, double  mass[][MONTHS])
  23. {
  24.     int i, j;
  25.     double total = 0;
  26.     double *pt;
  27.     pt = (double*)mass;
  28.  
  29.     for (i = 0; i < a; ++i)
  30.     {
  31.         for(j = 0; j < b; ++j)
  32.             total+=*(pt++);
  33.     }
  34. return total;
  35. }

Объяснение кода листинга программы

  1. Включаем файл стандартного ввода/вывода
  2. Определяем две константы: YEARS (количество лет) и MONTHS (количество месяцев в году)
  3. Функция sum2d принимает три аргумента: a и b - целочисленные значения, mass - двумерный массив. Возвращает сумму элементов двумерного массива.
  4. В функции main создаем двумерный массив rain и инициализируем его значениями.
  5. Вызываем функцию sum2d, передавая ей значения YEARS, MONTHS и rain. Результат вычисления среднего значения записываем в переменную total.
  6. Выводим на экран значение total с помощью функции printf.
  7. В функции sum2d объявляем переменные i и j для циклов, а также переменную total для хранения суммы.
  8. С помощью указателя pt получаем доступ к элементам массива mass.
  9. Внутренний цикл проходит по всем элементам строки массива mass.
  10. Внешний цикл проходит по всем строкам массива mass.
  11. Суммируем значения элементов массива mass, передавая их в функцию printf для вывода на экран.
  12. Возвращаем значение total.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы