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