Поменять первую и последнюю строки в двумерном динамическом массиве - 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, которая сначала запрашивает у пользователя количество строк и столбцов для двумерного массива, а затем позволяет пользователю ввести значения для всех его элементов. Затем программа выводит исходный массив, сортирует его путем замены первой и последней строки местами и выводит отсортированный массив. В конце программа освобождает все выделенные ею ресурсы. Список действий:
- Включаем необходимые заголовочные файлы:
stdio.hдля работы с вводом/выводомstdlib.hдля работы с функциейmallocиfree
- Определяем функцию main()
- Выделяем память под указатель на указатель на float:
p = NULL- указатель на указатель на float, инициализирован нулем (NULL)t = NULL- указатель на float, инициализирован нулем (NULL)
- Запрашиваем у пользователя количество строк и столбцов матрицы:
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);}
- Сортируем массив путем замены первой и последней строки местами:
t = p[0];p[0] = p[n - 1];p[n - 1] = t;
- Выводим отсортированный массив:
puts(Sorted array:);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);
- Возвращаем 0:
return 0;