Для каждого столбца матрицы с четным номером найти сумму его элементов - C (СИ)

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

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

Данная матрица размера M × N. Описать функцию, которая возвращает массив Для каждого столбца матрицы с четным номером (2, 4, ...) найти сумму его элементов. Условный оператор не использовать.

Решение задачи: «Для каждого столбца матрицы с четным номером найти сумму его элементов»

textual
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int * func (int m, int n, int **a) {
  6.  int * v = (int *) malloc ((n/2)*sizeof(int));
  7.  for (int j=1,k=0; j<=n; j+=2) {
  8.   v[k]=0;
  9.   for (int i=0; i<m; i++) v[k]+=a[i][j];
  10.   k++;
  11.  }
  12.  return v;
  13. }
  14.  
  15. int main() {
  16.  const int m=5,n=6;
  17.  int i,j;
  18.  int **a = (int **)malloc(m*sizeof(int *));
  19.  for (i=0; i<m; i++) a[i]=(int *)malloc(n*sizeof(int));
  20.  for (i=0; i<m; i++) {
  21.   printf ("\n");
  22.   for (j=0; j<n; j++) {
  23.    a[i][j]=i+j;
  24.    printf ("%d\t",a[i][j]);
  25.   }
  26.  }
  27.  int *v = func(m,n,a);
  28.  printf ("\n");
  29.  for (j=0; j<n/2; j++) printf ("\t%d\t",v[j]);
  30.  fflush (stdin); getchar(); return 0;
  31. }

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

Выделим названия и значения переменных в коде:

  1. m=5, n=6 - переменные, определяющие размеры матрицы
  2. i, j - переменные-счетчики для обхода матрицы в функции main()
  3. a - двумерный массив (матрица), содержащий элементы i+j
  4. v - одномерный массив (вектор), в который будет суммироваться значение элементов четных столбцов матрицы a
  5. k - счетчик для обхода вектора v
  6. _CRT_SECURE_NO_WARNINGS - препроцессорная директива, отключающая проверку ошибок во время компиляции (используется для совместимости со старыми компиляторами)
  7. stdio.h, stdlib.h - заголовочные файлы, содержащие функции ввода-вывода и работы с памятью
  8. func - функция, принимающая матрицу a, размеры матрицы m, n и возвращающая указатель на начало вектора v
  9. v = (int ) malloc ((n/2)sizeof(int)) - выделение памяти под вектор v
  10. for (int j=1,k=0; j<=n; j+=2) - цикл, суммирующий элементы четных столбцов матрицы a
  11. v[k]=0 - инициализация начального элемента вектора v
  12. for (int i=0; i<m; i++) v[k]+=a[i][j] - цикл, суммирующий элементы строки с индексом i в текущем столбце
  13. k++ - увеличение счетчика для перехода к следующему элементу вектора v
  14. return v - возврат указателя на начало вектора v
  15. main() - функция, содержащая основную логику программы
  16. int a = (int )malloc(msizeof(int )) - выделение памяти под матрицу a
  17. for (i=0; i<m; i++) a[i]=(int )malloc(nsizeof(int)) - выделение памяти под строки матрицы a
  18. for (i=0; i<m; i++) { ... } - цикл, выводящий элементы матрицы a на экран
  19. int *v = func(m,n,a) - вызов функции func() с передачей размеров матрицы и самой матрицы в качестве аргументов
  20. for (j=0; j<n/2; j++) printf (\t%d\t,v[j]) - цикл, выводящий элементы вектора v на экран
  21. fflush (stdin); getchar(); return 0; - очистка буфера ввода и завершение программы

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


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

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

8   голосов , оценка 4.625 из 5

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

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

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