Слияние двух массивов выдает ошибку - C (СИ)
Формулировка задачи:
Попробовал написать код слияние 2 массивов. Выдает Ошибку. Не могу понять где. Если есть ошибки в коде, подскажите. =)
#include <stdio.h>
int main()
{
int ar1[5], ar2[5], ar3[10], i, a, b;
printf ("Vvedite 1 massiv - 5 zhisel: ");
for (i=0;i<5;i++)
{
scanf("%d", &ar1[i]);
}
printf ("Vvedite 2 massiv - 5 zhisel: ");
for (a=0;a<5;i++)
{
scanf("%d", &ar2[a]);
}
for (i=0; i<5; i++; a=0; a<5; a++; b=0; b<10; b++)
{
if (ar1[i]<ar2[a])
{
ar3[b]=ar1[i];
}
if (ar2[a]<ar1[i])
{
ar3[b]=ar2[a];
}
}
printf ("Slianie massivov: %d", ar3);
getch();
return 0;
}Решение задачи: «Слияние двух массивов выдает ошибку»
textual
Листинг программы
#include <stdio.h>
#define ARRAY_SIZE (5)
int main(void) {
int arrA[ARRAY_SIZE] = { 1, 2, 5, 7, 8},
arrB[ARRAY_SIZE] = { 0, 3, 4, 6, 9},
arrC[ARRAY_SIZE * 2],
i, j, k;
i = j = k = 0;
while ( k < ARRAY_SIZE * 2 ) {
arrC[k++] = ( i < ARRAY_SIZE && j < ARRAY_SIZE ) ? ( ( arrA[i] < arrB[j] ) ? arrA[i++] : arrB[j++] ) :
( i < ARRAY_SIZE ) ? arrA[i++] : arrB[j++];
}
for ( i = 0; i < ARRAY_SIZE * 2; ++i )
printf("%d ", arrC[i]);
printf("\n");
}
Объяснение кода листинга программы
В данном коде происходит слияние двух массивов arrA и arrB в массив arrC. При этом элементы исходных массивов сравниваются и выбираются по определенному правилу.
- Объявляются три массива: arrA, arrB и arrC. Массив arrC имеет размер ARRAY_SIZE * 2, так как в результате слияния получается массив в два раза больше исходного размера.
- Задаются начальные значения для трех индексов i, j и k, которые будут использоваться для обхода массивов.
- В цикле while происходит сравнение и выбор элементов из массивов arrA и arrB. Условие (i < ARRAY_SIZE && j < ARRAY_SIZE) проверяет, что индексы не превышают размер исходных массивов. Если условие выполняется, то происходит сравнение элементов arrA[i] и arrB[j]. Если arrA[i] меньше arrB[j], то в массив arrC записывается arrA[i], иначе arrB[j]. После этого индексы i и j увеличиваются на 1. Если условие не выполняется, то в массив arrC записывается значение arrA[i] или arrB[j], в зависимости от того, какой из индексов больше. После этого индекс i увеличивается на 1.
- В цикле for происходит вывод элементов массива arrC на экран через пробел.
- В конце программы выводится символ новой строки
\n, чтобы перейти на новую строку.