Сумма элементов в строке в динамическом двумерном массиве - C (СИ)
Формулировка задачи:
Добрый вечер! Не подскажите где ошибка? При запуске программы вылезает окно с ошибкой. Вроде часть где массив заполняется верна. Само задание: В заданном массиве A[N][N] найдите суммы элементов в каждой строке. Сформируйте одномерный массив S[N], содержащий полученные суммы, расположенные в порядке возрастания.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <malloc.h> #include <stdlib.h> int main() { int **a; // указатель на массив int n,sum ; printf("Enter n: "); scanf("%i", &n); int i=0, j=0; a = (int**)malloc(n * sizeof(int)); // Ввод элементов массива for (i = 0; i<n; i++) // цикл по строкам { for (j = 0; j<n; j++) // цикл по столбцам { printf("a[%i][%i] = ", i, j); scanf("%i", (a + i*n + j)); } printf("\n"); } int *b; sum=0; for(j=0; j<n; ++j) { for(i=0; i<n; ++i) { sum=sum+a[i]; } b[i]=sum; sum=0; } for (i=0;i<n;i++) printf("Sum of %i\n", b[i]); return 0; }
Решение задачи: «Сумма элементов в строке в динамическом двумерном массиве»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main(void) { int **a = NULL, *b = NULL; // указатель на массив int n = 0, sum = 0, i = 0, j = 0; printf("Enter n: "); scanf("%d", &n); a = (int**)malloc(n * sizeof(int*)); // Ввод элементов массива for (i = 0; i<n; i++) // цикл по строкам { a[i] = (int*)malloc(n * sizeof(int)); for (j = 0; j<n; j++) // цикл по столбцам { printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } printf("\n"); } //Суммируем b = (int*)malloc(n * sizeof(int)); for (i = 0; i<n; ++j) { for (j = 0; j<n; ++j) sum += a[i][j]; b[i] = sum; sum = 0; } for (i = 0; i<n; i++)//Print to screen printf("Sum of %d\n", b[i]); for (i = 0; i < n; i++) //free mem free(a[i]); free(a); free(b); return 0; }
Объяснение кода листинга программы
Код представляет собой программу на языке C, которая реализует суммирование элементов в каждой строке динамического двумерного массива.
- Первые два комментария определяют необходимые заголовочные файлы для работы с памятью и вводом/выводом.
- Здесь объявлены переменные:
a
- указатель на массив, который будет содержать адреса строк двумерного массива;b
- указатель на массив, который будет использоваться для хранения суммы элементов каждой строки;n
- количество строк в массиве;sum
- переменная для хранения текущей суммы элементов;i
иj
- индексы для работы с массивом.
- С помощью функции scanf пользователь вводит количество строк
n
. - С помощью malloc выделяется память под массив указателей
a
. - Циклы заполняют двумерный массив
a
значениями, которые вводит пользователь. - С помощью malloc выделяется память под массив
b
. - Циклы суммируют элементы каждой строки и сохраняют результат в
b
. - Цикл выводит на экран сумму каждой строки.
- С помощью функции free освобождается память, выделенная под массивы
a
иb
. - return 0; завершает работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д