Сумма элементов в строке в динамическом двумерном массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Не подскажите где ошибка? При запуске программы вылезает окно с ошибкой. Вроде часть где массив заполняется верна. Само задание: В заданном массиве A[N][N] найдите суммы элементов в каждой строке. Сформируйте одномерный массив S[N], содержащий полученные суммы, расположенные в порядке возрастания.
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. int main()
  6. {
  7. int **a; // указатель на массив
  8. int n,sum ;
  9. printf("Enter n: ");
  10. scanf("%i", &n);
  11. int i=0, j=0;
  12. a = (int**)malloc(n * sizeof(int));
  13. // Ввод элементов массива
  14. for (i = 0; i<n; i++) // цикл по строкам
  15. {
  16. for (j = 0; j<n; j++) // цикл по столбцам
  17. {
  18. printf("a[%i][%i] = ", i, j);
  19. scanf("%i", (a + i*n + j));
  20. }
  21. printf("\n");
  22. }
  23. int *b;
  24. sum=0;
  25. for(j=0; j<n; ++j)
  26. {
  27. for(i=0; i<n; ++i)
  28. {
  29. sum=sum+a[i];
  30. }
  31. b[i]=sum;
  32. sum=0;
  33. }
  34. for (i=0;i<n;i++)
  35. printf("Sum of %i\n", b[i]);
  36. return 0;
  37. }

Решение задачи: «Сумма элементов в строке в динамическом двумерном массиве»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.     int **a = NULL, *b = NULL;  // указатель на массив
  7.     int n = 0, sum = 0, i = 0, j = 0;
  8.  
  9.     printf("Enter n: ");
  10.     scanf("%d", &n);
  11.  
  12.     a = (int**)malloc(n * sizeof(int*));
  13.  
  14.     // Ввод элементов массива
  15.     for (i = 0; i<n; i++)  // цикл по строкам
  16.     {
  17.         a[i] = (int*)malloc(n * sizeof(int));
  18.         for (j = 0; j<n; j++)  // цикл по столбцам
  19.         {
  20.             printf("a[%d][%d] = ", i, j);
  21.             scanf("%d", &a[i][j]);
  22.         }
  23.         printf("\n");
  24.     }
  25.  
  26.     //Суммируем
  27.     b = (int*)malloc(n * sizeof(int));
  28.  
  29.     for (i = 0; i<n; ++j)
  30.     {
  31.         for (j = 0; j<n; ++j)
  32.             sum += a[i][j];
  33.  
  34.         b[i] = sum;
  35.         sum = 0;
  36.     }
  37.  
  38.     for (i = 0; i<n; i++)//Print to screen
  39.         printf("Sum of %d\n", b[i]);
  40.  
  41.     for (i = 0; i < n; i++)  //free mem
  42.         free(a[i]);
  43.  
  44.     free(a);
  45.     free(b);
  46.  
  47.     return 0;
  48. }

Объяснение кода листинга программы

Код представляет собой программу на языке 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы