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