Сумма элементов в строке в динамическом двумерном массиве - 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, которая реализует суммирование элементов в каждой строке динамического двумерного массива.

  1. Первые два комментария определяют необходимые заголовочные файлы для работы с памятью и вводом/выводом.
  2. Здесь объявлены переменные:
    • a - указатель на массив, который будет содержать адреса строк двумерного массива;
    • b - указатель на массив, который будет использоваться для хранения суммы элементов каждой строки;
    • n - количество строк в массиве;
    • sum - переменная для хранения текущей суммы элементов;
    • i и j - индексы для работы с массивом.
  3. С помощью функции scanf пользователь вводит количество строк n.
  4. С помощью malloc выделяется память под массив указателей a.
  5. Циклы заполняют двумерный массив a значениями, которые вводит пользователь.
  6. С помощью malloc выделяется память под массив b.
  7. Циклы суммируют элементы каждой строки и сохраняют результат в b.
  8. Цикл выводит на экран сумму каждой строки.
  9. С помощью функции free освобождается память, выделенная под массивы a и b.
  10. return 0; завершает работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы