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