Объединение двух упорядоченных массивов - C (СИ)
Формулировка задачи:
Даны массив A из N целых элементов массив B из M целых элементов. Оба массива упорядочены по неубыванию. Требуется сформировать и вывести массив упорядоченный по неубыванию массив, состоящий из элементов массивов A и B.
Должен выводить так:
Ввод
7 5
1 3 7 7 40 48 777
7 30 33 666 667
Вывод
1 3 7 7 7 30 33 40 48 666 667 777
Сам код:
Где-то ошибка. Потому что выводит огромные нереальные числа: типа -809076002 -809076002 -85436002
#include<stdio.h>
int main()
{
int i, j=0, k=0, c[2002], a[1001], b[1001];
int na, mb;
scanf("%d %d", &na, &mb);
for (i=0; i<na; i++)
{
scanf("%d", &a[i]);
}
for (i=0; i<mb; i++)
{
scanf("%d", &b[i]);
}
for (k=0; k<na+mb; k++)
{
if (a[i] < b[j])
{
c[k]=a[i++];
}
else c[k]=b[j++];
}
for (i=0; i<na+mb; i++)
{
printf(" %d", c[i]);
}
return 0;
}Решение задачи: «Объединение двух упорядоченных массивов»
textual
Листинг программы
#include<stdio.h>
int main()
{
int i, j, k, c[2002], a[1001], b[1001];
int na, mb;
scanf("%d %d", &na, &mb);
for (i=0; i<na; i++)
{
scanf("%d", &a[i]);
}
for (i=0; i<mb; i++)
{
scanf("%d", &b[i]);
}
i=0;j=0;k=0;
while(i<na && j<mb)
{
if (a[i] < b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<na)
c[k++]=a[i++];
while(j<mb)
c[k++]=b[j++];
for (i=0; i<k; i++)
{
printf(" %d", c[i]);
}
return 0;
}
Объяснение кода листинга программы
- Включаем файл stdio.h, который содержит функции для ввода и вывода данных.
- Создаем функцию main(), которая является точкой входа в программу.
- Инициализируем переменные i, j, k, c[2002], a[1001], b[1001], na, mb со значениями 0.
- С помощью функции scanf() считываем значения na и mb в переменные na и mb соответственно.
- С помощью цикла for с переменной i считываем значения элементов массива a[i] с помощью функции scanf() и сохраняем их в массив a[i].
- С помощью цикла for с переменной i считываем значения элементов массива b[i] с помощью функции scanf() и сохраняем их в массив b[i].
- Инициализируем переменные i=0, j=0, k=0.
- Запускаем цикл while, который будет выполняться до тех пор, пока i<na и j<mb.**
- Внутри цикла while, с помощью условного оператора if, сравниваем значение a[i] с b[j]. Если a[i] меньше b[j], то меняем значения a[i] и b[j] местами и сохраняем их в массив c[k++]. Иначе, значение b[j] сохраняется в массив c[k++].
- Если условие if не выполняется, то это означает, что a[i] больше или равно b[j], поэтому значение a[i] сохраняется в массив c[k++].
- После окончания цикла while, в цикле while** с переменной i считываются оставшиеся значения массива a[i] и сохраняются в массив c[k++].
- Аналогично, в цикле while с переменной j считываются оставшиеся значения массива b[j] и сохраняются в массив c[k++].
- С помощью цикла for, значения элементов массива c[i] выводятся на экран с помощью функции printf().
- **Функция main() возвращает 0, что означает успешное завершение программы.