Для каждого столбца матрицы с четным номером найти сумму его элементов - 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; - очистка буфера ввода и завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д