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

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

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

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

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

textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int * func (int m, int n, int **a) {
 int * v = (int *) malloc ((n/2)*sizeof(int));
 for (int j=1,k=0; j<=n; j+=2) {
  v[k]=0;
  for (int i=0; i<m; i++) v[k]+=a[i][j];
  k++;
 }
 return v;
}
 
int main() {
 const int m=5,n=6;
 int i,j;
 int **a = (int **)malloc(m*sizeof(int *));
 for (i=0; i<m; i++) a[i]=(int *)malloc(n*sizeof(int));
 for (i=0; i<m; i++) {
  printf ("\n");
  for (j=0; j<n; j++) { 
   a[i][j]=i+j; 
   printf ("%d\t",a[i][j]);
  }
 }
 int *v = func(m,n,a);
 printf ("\n");
 for (j=0; j<n/2; j++) printf ("\t%d\t",v[j]);
 fflush (stdin); getchar(); return 0;
}

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

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

  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
Похожие ответы