Поменять первую и последнюю строки в двумерном динамическом массиве - C (СИ)

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

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

Помогите пожалуйста разобраться, почему не работает цикл для перестановки строк и почему после замены индексов с i=0 на i=1 у меня перестало работать два последних цикла(открывается окно Windows, где написано,что программа не работает), до замены только строки не переставлялись.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
 
int main()
{
   float *p;
   int i,j,n,m;
   printf("Vvedite kolichestvo strok = ");
   scanf("%d", &n);
   printf("Vvedite kolichestvo stolbcov = ");
   scanf("%d", &m);
   p = (float*) malloc(n*m*sizeof(float));
   for(i=1;i<=n;i++)
   {
       for(j=1;j<=m;j++)
       {
           printf("p[%d][%d] = ", i,j);
           scanf("%f", (p+i*m+j));
       }
   }
   for(i=1;i<=n;i++)
   {
       for(j=1;j<=m;j++)
       {
           printf("%.2f \t", *(p+i*m+j));
       }
       printf("\n");
   }
   float *t;
   t = (float*) malloc(n*m*sizeof(float));
   for(i=1;i<=n;i++)
   {
   for(j=1;j<=m;j++)
   {
       *t = *(p+i*m+j);
       *(p+i*m+j) = *(p+n-1*m+j);
       *(p+n-1*m+j) = *t;
   }
   }
   printf("Izmenneniy massiv:\n");
   for(i=1;i<=n;i++)
   {
   for(j=1;j<=m;j++)
   {
       printf("%.2f \t", *(p+i*m+j));
   }
       printf("\n");
   }
   free(t);
   free(p);
   return 0;
}

Решение задачи: «Поменять первую и последнюю строки в двумерном динамическом массиве»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   float **p = NULL, *t = NULL;
   int i, j, n, m;
   printf("Vvedite kolichestvo strok = ");
   scanf("%d", &n);
   printf("Vvedite kolichestvo stolbcov = ");
   scanf("%d", &m);
   p = malloc(n * sizeof(*p));
   for(i = 0; i < n ; i++)
        p[i] = malloc(m * sizeof(p));
    puts("Enter the value of the element:");
   for(i = 0; i < n; i++){
       for(j = 0;j < m; j++){
           printf("p[%d][%d] = ", i, j);
           scanf("%f", &p[i][j]);
       }
   }
   puts("Source array:");
   for(i = 0; i < n; i++){
        for(j = 0; j < m; j++)
            printf("%9g", p[i][j]);
        printf("\n");
   }
   puts("Sorted array:");
   t = p[0];
   p[0] = p[n - 1];
   p[n - 1] = t;
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++)
            printf("%9g", p[i][j]);
        printf("\n");
   }
   free(p);
   for(i = 0; i < n; i++)
        free(p[i]);
   free(t);
   return 0;
}

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

Вывод: Код представляет собой программу на языке C, которая сначала запрашивает у пользователя количество строк и столбцов для двумерного массива, а затем позволяет пользователю ввести значения для всех его элементов. Затем программа выводит исходный массив, сортирует его путем замены первой и последней строки местами и выводит отсортированный массив. В конце программа освобождает все выделенные ею ресурсы. Список действий:

  1. Включаем необходимые заголовочные файлы:
    • stdio.h для работы с вводом/выводом
    • stdlib.h для работы с функцией malloc и free
  2. Определяем функцию main()
  3. Выделяем память под указатель на указатель на float:
    • p = NULL - указатель на указатель на float, инициализирован нулем (NULL)
    • t = NULL - указатель на float, инициализирован нулем (NULL)
  4. Запрашиваем у пользователя количество строк и столбцов матрицы:
    • printf(Vvedite kolichestvo strok = );
    • scanf(%d, &n);
    • printf(Vvedite kolichestvo stolbcov = );
    • scanf(%d, &m);
  5. Выделяем память под двумерный массив:
    • p = malloc(n * sizeof(*p));
    • for(i = 0; i < n ; i++) p[i] = malloc(m * sizeof(p));
  6. Получаем значения для элементов матрицы:
    • puts(Enter the value of the element:);
    • for(i = 0; i < n; i++){
    • for(j = 0;j < m; j++){
    • printf(p[%d][%d] = , i, j);
    • scanf(%f, &p[i][j]);
    • }
    • }
  7. Выводим исходный массив:
    • puts(Source array:);
    • for(i = 0; i < n; i++){
    • for(j = 0; j < m; j++) printf(%9g, p[i][j]);
    • printf(\n);
    • }
  8. Сортируем массив путем замены первой и последней строки местами:
    • t = p[0];
    • p[0] = p[n - 1];
    • p[n - 1] = t;
  9. Выводим отсортированный массив:
    • puts(Sorted array:);
    • for(i = 0; i < n; i++){
    • for(j = 0; j < m; j++) printf(%9g, p[i][j]);
    • printf(\n);
    • }
  10. Освобождаем выделенную память:
    • free(p);
    • for(i = 0; i < n; i++) free(p[i]);
    • free(t);
  11. Возвращаем 0:
    • return 0;

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


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

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

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