Поменять первую и последнюю строки в двумерном динамическом массиве - 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д