Создать функцию которая переставляет местами первые n элементов массива A с последними n элементами массива В

Написать функцию, которая переставляет местами первые n элементов массива A с последними n элементами массива В. Параметрами функции должны быть оба массива и число n.

Вот что выводить :( Process returned -1073741819

#include <stdio.h>
#include <stdlib.h>

void reparray(int *a, int *b, int n){
    int i = 0;
    int last_element = 4;
    int help[5] = {};

    for (i = 0; n; i++){
        help[i] = a[i];
    }

    for (last_element; n; last_element--){
        help[last_element] = b[last_element];
    }

    for (i = 0; n; i++){
        a[i] = help [i];
    }

    for (last_element; n; last_element--){
        b[i] = help [i];
    }
}


int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int b[5] = {6, 7, 8, 9, 10};
    int n;

    printf("Enter n");
    scanf("%d", n);
    reparray(a, b, n);

    printf("Array A");

    for (int i = 0; i<4; i++){
        printf("%d\n", a[i]);
    }

    printf("Array B");

    for (int i = 0; i<4; i++){
        printf("%d\n", b[i]);
    }
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Не буду далеко ходить... Что делает ваш код

for (i = 0; n; i++){
    help[i] = a[i];
}

Сколько присвоений он сделает?

А вообще, вы как-то сильно привязались к массиву из 5 элементов. А если это будут 10 и 18 элементов, например?...

Я бы делал так:

void reparray(int *a, size_t asize,
              int *b, size_t bsize,
              size_t n)
{
    assert(bsize > n && asize > n);
    for(size_t i = 0; i < n; ++i)
    {
        int tmp = a[i];
        a[i] = b[bsize-n+i];
        b[bsize-n+i] = tmp;
    }
}

(если порядок элементов должен сохраняться).

→ Ссылка