Копирование элементов двумерного массива в одномерный - C (СИ)
Формулировка задачи:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int m,n,i,j;
- printf("Vvedite razmer massiva");
- scanf("%d",&n);
- scanf("%d",&m);
- int **a=(int**)malloc(sizeof(int**)*n);
- for(i=0;i<n;i++)
- {
- a[i]=(int*)malloc(sizeof(int*)*m);
- }
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- {
- a[i][j]=rand()%10;
- printf(" %d",a[i][j]);
- }printf("\n");
- }
- int *p;
- p=(int *)malloc(sizeof(int *));
- for(i=0;i<n;i++)
- return 0;
- }
Решение задачи: «Копирование элементов двумерного массива в одномерный»
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <time.h>
- int main(void)
- {
- int** a = NULL;
- int* b = NULL;
- int i = 0;
- int j = 0;
- int cnt = 0;
- int flag = 0;
- const int N = 3;
- const int M = 4;
- srand(time(NULL));
- a = malloc(M * sizeof(*a));
- b = malloc(M * N * sizeof(*b));
- if ((a != NULL) && (b != NULL))
- {
- i = 0;
- cnt = 0;
- flag = 1;
- while ((i < M) && flag)
- {
- a[i] = malloc(N * sizeof(**a));
- if (a[i] == NULL)
- {
- flag = 0;
- }
- cnt++;
- i++;
- }
- if (!flag)
- {
- for(i = cnt - 1; i > -1; i--)
- {
- free(a[i]);
- }
- }
- else
- {
- for(i = 0; i < M; i++)
- {
- for(j = 0; j < N; j++)
- {
- a[i][j] = rand() % 10;
- printf("%2d ", a[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- for(i = 0; i < M; i++)
- {
- memcpy(&b[i * N], &a[i][0], N * sizeof(*b));
- }
- for(i = 0; i < (M * N); i++)
- {
- printf("%2d ", b[i]);
- }
- printf("\n");
- for(i = 0; i < M; i++)
- {
- free(a[i]);
- }
- }
- }
- free(a);
- free(b);
- return 0;
- }
Объяснение кода листинга программы
Код начинается с объявления двух указателей на двумерный массив (int* a) и одномерный массив (int b). Затем объявляются переменные для управления циклом: i, j, cnt и flag. Далее определяются константы N и M, которые представляют собой размеры массивов. Затем производится инициализация генератора случайных чисел. Следующий блок кода выделяет память под двумерный массив (a) и одномерный массив (b). Если память успешно выделена, то флаг устанавливается в 1. Если произошла ошибка выделения памяти, то флаг устанавливается в 0. Далее следует цикл, который заполняет двумерный массив случайными числами от 0 до 9. Затем происходит копирование элементов из двумерного массива в одномерный. После этого двумерный массив освобождается от выделенной под него памяти, а затем и одномерный массив. Код завершается возвратом 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д