Для каждого столбца матрицы с четным номером найти сумму его элементов - 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; }
Объяснение кода листинга программы
Выделим названия и значения переменных в коде:
- m=5, n=6 - переменные, определяющие размеры матрицы
- i, j - переменные-счетчики для обхода матрицы в функции main()
- a - двумерный массив (матрица), содержащий элементы i+j
- v - одномерный массив (вектор), в который будет суммироваться значение элементов четных столбцов матрицы a
- k - счетчик для обхода вектора v
- _CRT_SECURE_NO_WARNINGS - препроцессорная директива, отключающая проверку ошибок во время компиляции (используется для совместимости со старыми компиляторами)
- stdio.h, stdlib.h - заголовочные файлы, содержащие функции ввода-вывода и работы с памятью
- func - функция, принимающая матрицу a, размеры матрицы m, n и возвращающая указатель на начало вектора v
- v = (int ) malloc ((n/2)sizeof(int)) - выделение памяти под вектор v
- for (int j=1,k=0; j<=n; j+=2) - цикл, суммирующий элементы четных столбцов матрицы a
- v[k]=0 - инициализация начального элемента вектора v
- for (int i=0; i<m; i++) v[k]+=a[i][j] - цикл, суммирующий элементы строки с индексом i в текущем столбце
- k++ - увеличение счетчика для перехода к следующему элементу вектора v
- return v - возврат указателя на начало вектора v
- main() - функция, содержащая основную логику программы
- int a = (int )malloc(msizeof(int )) - выделение памяти под матрицу a
- for (i=0; i<m; i++) a[i]=(int )malloc(nsizeof(int)) - выделение памяти под строки матрицы a
- for (i=0; i<m; i++) { ... } - цикл, выводящий элементы матрицы a на экран
- int *v = func(m,n,a) - вызов функции func() с передачей размеров матрицы и самой матрицы в качестве аргументов
- for (j=0; j<n/2; j++) printf (
\t%d\t
,v[j]) - цикл, выводящий элементы вектора v на экран - fflush (stdin); getchar(); return 0; - очистка буфера ввода и завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д