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