Добавить n элементов из массива xs в конец массива array - C (СИ)
Формулировка задачи:
void appendElements (Array, *array, int *xs, int n); Добавляет n элементов из массива xs в конец массива array. Пример. Исходный массив: 1 2 3 4 5 Вызов: int xs[] = {6, 7, 8, 9}; int n = sizeof(xs) / sizeof(*xs); appendElements(array, xs, n); Результат: 1 2 3 4 5 6 7 8 9
Решение задачи: «Добавить n элементов из массива xs в конец массива array»
textual
Листинг программы
#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Array { int *data; int n; } Array; void* mymalloc (size_t size); void* myrealloc (void *ptr, size_t size); Array* newArray (int n); Array* copyArray (const Array *array); void destroyArray (Array *array); Array* readArray (const char *str); void pprintArray (const Array *array, const char *str); void pprintLineArray (const Array *array); void prependElements (Array *array, int *xs, int n); void* myrealloc (void *ptr, size_t size) { void *res = realloc(ptr, size); if (res == NULL && size != 0) { fprintf(stderr, "myrealloc: unable to allocate %zd bytes\n", size); exit(EXIT_FAILURE); } return res; } void* mymalloc (size_t size) { void *res = malloc(size); if (res == NULL) { fprintf(stderr, "mymalloc: unable to allocate %zd bytes\n ", size); exit(EXIT_FAILURE); } return res; } Array* newArray (int n){ Array* array = (Array*)mymalloc(sizeof(*array)); array->n = n; array->data = (int*)mymalloc(sizeof(*array->data)*n); return array; } Array* copyArray (const Array *array) { Array* arraycopy=newArray(array->n); int* data = array->data; int* datacopy = arraycopy->data; int i,len=array->n; for(i=0;i<len;i++) datacopy[i] = data[i]; return arraycopy; } void destroyArray (Array *array) { free(array->data); free(array); } Array* readArray (const char *str) { Array *result = NULL; int n; printf("Enter size of %s: ", str); if (scanf("%d", &n) != 1 || n < 0) { fprintf(stderr, "readArray: input error reading %s\n", str); destroyArray(result); return NULL; } result = newArray(n); int *data = result->data; for (int i = 0; i < n; i++) { if (scanf("%d", data + i) != 1) { fprintf(stderr, "readArray: input error reading %s\n", str); destroyArray(result); return NULL; } } return result; } void pprintArray (const Array *array, const char *str) { const int *data = array->data; int n = array->n; for (int i = 0; i < n; i++) { printf("%s[%d] = %d\n", str, i, data[i]); } } void pprintLineArray (const Array *array) { const int *data = array->data; int n = array->n; if (n > 0) { printf("%d", data[0]); } for (int i = 1; i < n; i++) { printf(" %d", data[i]); } if (n > 0) { printf("\n"); } } void appendElements (Array *array, int *xs, int n) { int i; array->data=(int*)myrealloc(array->data,sizeof(int)*(array->n+n)); array->n+=n; int l = array->n; for(i=l+1;i<=n;i++) { array->data[i]=array->data[i+n]; } for(i=0;i<n;i++) { array->data[i]=xs[i]; } } int main () { Array *array = readArray("array"); if (array == NULL) { printf("I don't want to play with you anymore!!!\n"); exit(EXIT_FAILURE); } pprintLineArray(array); int app_E = 0; printf("Enter size of app: "); if (scanf("%d", &app_E) != 1 || app_E < 0) { fprintf(stderr, "readArray: input error reading app_E\n"); exit(EXIT_FAILURE); } int app[app_E]; for (int i = 0; i<app_E; i++) app[i] = (i+1); appendElements(array,app,app_E); pprintLineArray(array); destroyArray(array); }
Объяснение кода листинга программы
В этом коде реализованы основные операции со строками в языке C:
- Создание нового массива с помощью функции
newArray()
. - Чтение массива из стандартного ввода с помощью функции
readArray()
. - Вывод содержимого массива с помощью функции
pprintArray()
. - Добавление элементов в конец массива с помощью функции
appendElements()
. - Вывод измененного массива с помощью функции
pprintLineArray()
. - Уничтожение массива с помощью функции
destroyArray()
. Код также включает функцииmymalloc()
иmyrealloc()
, которые являются безопасными аналогами стандартных функцийmalloc()
иrealloc()
, и обеспечивают обработку ошибок. Синтаксис кода соответствует стандарту C99, и он совместим с компиляторами, поддерживающими этот стандарт.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д