Объединение двух упорядоченных массивов - 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 Сам код:
Листинг программы
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i, j=0, k=0, c[2002], a[1001], b[1001];
  5. int na, mb;
  6. scanf("%d %d", &na, &mb);
  7. for (i=0; i<na; i++)
  8. {
  9. scanf("%d", &a[i]);
  10. }
  11. for (i=0; i<mb; i++)
  12. {
  13. scanf("%d", &b[i]);
  14. }
  15. for (k=0; k<na+mb; k++)
  16. {
  17. if (a[i] < b[j])
  18. {
  19. c[k]=a[i++];
  20. }
  21. else c[k]=b[j++];
  22. }
  23. for (i=0; i<na+mb; i++)
  24. {
  25. printf(" %d", c[i]);
  26. }
  27. return 0;
  28. }
Где-то ошибка. Потому что выводит огромные нереальные числа: типа -809076002 -809076002 -85436002

Решение задачи: «Объединение двух упорядоченных массивов»

textual
Листинг программы
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i, j, k, c[2002], a[1001], b[1001];
  5.     int na, mb;
  6.     scanf("%d %d", &na, &mb);
  7.     for (i=0; i<na; i++)
  8.     {
  9.         scanf("%d", &a[i]);
  10.     }
  11.     for (i=0; i<mb; i++)
  12.     {
  13.         scanf("%d", &b[i]);
  14.     }
  15.     i=0;j=0;k=0;
  16.     while(i<na && j<mb)
  17.     {
  18.         if (a[i] < b[j])
  19.             c[k++]=a[i++];
  20.         else
  21.             c[k++]=b[j++];
  22.     }
  23.     while(i<na)
  24.         c[k++]=a[i++];
  25.     while(j<mb)
  26.         c[k++]=b[j++];
  27.  
  28.     for (i=0; i<k; i++)
  29.     {
  30.         printf(" %d", c[i]);
  31.     }
  32.     return 0;
  33. }

Объяснение кода листинга программы

  1. Включаем файл stdio.h, который содержит функции для ввода и вывода данных.
  2. Создаем функцию main(), которая является точкой входа в программу.
  3. Инициализируем переменные i, j, k, c[2002], a[1001], b[1001], na, mb со значениями 0.
  4. С помощью функции scanf() считываем значения na и mb в переменные na и mb соответственно.
  5. С помощью цикла for с переменной i считываем значения элементов массива a[i] с помощью функции scanf() и сохраняем их в массив a[i].
  6. С помощью цикла for с переменной i считываем значения элементов массива b[i] с помощью функции scanf() и сохраняем их в массив b[i].
  7. Инициализируем переменные i=0, j=0, k=0.
  8. Запускаем цикл while, который будет выполняться до тех пор, пока i<na и j<mb.**
  9. Внутри цикла while, с помощью условного оператора if, сравниваем значение a[i] с b[j]. Если a[i] меньше b[j], то меняем значения a[i] и b[j] местами и сохраняем их в массив c[k++]. Иначе, значение b[j] сохраняется в массив c[k++].
  10. Если условие if не выполняется, то это означает, что a[i] больше или равно b[j], поэтому значение a[i] сохраняется в массив c[k++].
  11. После окончания цикла while, в цикле while** с переменной i считываются оставшиеся значения массива a[i] и сохраняются в массив c[k++].
  12. Аналогично, в цикле while с переменной j считываются оставшиеся значения массива b[j] и сохраняются в массив c[k++].
  13. С помощью цикла for, значения элементов массива c[i] выводятся на экран с помощью функции printf().
  14. **Функция main() возвращает 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы