Объединение двух упорядоченных массивов - 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 Сам код:
#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;
 }
Где-то ошибка. Потому что выводит огромные нереальные числа: типа -809076002 -809076002 -85436002

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

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;
}

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

  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
Похожие ответы