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