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