Объединить два отсортированных массива - C (СИ) (151993)

Узнай цену своей работы

Формулировка задачи:

Даны два отсортированы по возрастанию значений массивы вещественных чисел. Сформировать из них один общий отсортированный массив. Подсказка: в алгоритме обязательно учесть, что начальные массивы уже отсортированы.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    clrscr();
    double mas1[5]={1.2312,12.234,34.45,53.47,57.56};
    double mas2[10]={2.34,4.45,35.34,45.234,46.64,51.0,65.23,73.99,78.34,94.9};
    double mas3[15];
    double *v1, *v2, *v3, n;
    n=0;
    for(v2=&mas2[0]; v2<&mas2[10], n<5; v2++)
    {
        v1=&mas1[n];
        while(*v1<*v2)
        {
            *v3=*v1;
            v3++;
            n++;
            v1++;
        }
        if(*v1>*v2)
        {
            *v3=*v2;
            v3++;
        }
    }
    for(v3=&mas3[0]; v3<&mas3[15]; v3++)
    {
        printf("%.3f\n", *v3);
    }
    system("pause");
    return 0;
}
только начал разбираться в Си, прошу помощи

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

textual
Листинг программы
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    double mas1[5]={1.2312,12.234,34.45,53.47,57.56};
    double mas2[10]={2.34,4.45,35.34,45.234,46.64,51.0,65.23,73.99,78.34,94.9};
    double mas3[15];
    int i=0, j=0, k=0;
    while(k<15)
    {
        if(i<5)
        {
            if(j<10)
            {
                if(mas1[i]<mas2[j])
                {
                    mas3[k]=mas1[i];
                    i++;
                }
                else
                {
                    mas3[k]=mas2[j];
                    j++;
                }
            }
            else
            {
                mas3[k]=mas1[i];
                i++;
            }
        }
        else
        {
            mas3[k]=mas2[j];
            j++;
        }
        k++;
    }
    for(i=0;i<15;i++)
    {
        printf("%.3f\n", mas3[i]);
    }
    system("pause");
    return 0;
}

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

  1. #include - подключает библиотеку для работы с консолью, необходимую для функции getch()
  2. #include - подключает библиотеку для работы с файлами, необходимую для функции printf()
  3. #include - подключает библиотеку для работы с массивами, необходимую для функции malloc()
  4. int main (void) - определяет основную функцию программы, в которой происходит объединение массивов
  5. double mas1[5]={1.2312,12.234,34.45,53.47,57.56}; - объявляет первый массив из 5 элементов с начальными значениями
  6. double mas2[10]={2.34,4.45,35.34,45.234,46.64,51.0,65.23,73.99,78.34,94.9}; - объявляет второй массив из 10 элементов с начальными значениями
  7. double mas3[15]; - объявляет третий массив из 15 элементов, в который будут объединены элементы из первых двух массивов
  8. int i=0, j=0, k=0; - объявляет три переменные для контроля индексов массивов
  9. while(k<15) - начинает цикл, который будет выполняться пока значение переменной k меньше 15
  10. if(i<5) - проверяет, что значение переменной i меньше 5, и выполняет следующий блок кода, если это условие выполняется
  11. if(j<10) - проверяет, что значение переменной j меньше 10, и выполняет следующий блок кода, если это условие выполняется
  12. if(mas1[i]<mas2[j]) - проверяет, что значение элемента в первом массиве меньше значения элемента во втором массиве, и выполняет следующий блок кода, если это условие выполняется
  13. mas3[k]=mas1[i]; - записывает значение элемента из первого массива в третий массив
  14. i++; - увеличивает значение переменной i на 1
  15. else - если предыдущее условие не выполнилось, то выполняется следующий блок кода
  16. mas3[k]=mas2[j]; - записывает значение элемента из второго массива в третий массив
  17. j++; - увеличивает значение переменной j на 1
  18. else - если предыдущее условие не выполнилось, то выполняется следующий блок кода
  19. mas3[k]=mas1[i]; - записывает значение элемента из первого массива в третий массив
  20. i++; - увеличивает значение переменной i на 1
  21. k++; - увеличивает значение переменной k на 1
  22. for(i=0;i<15;i++) - начинает цикл, который будет выполняться 15 раз
  23. printf(%.3f\n, mas3[i]); - выводит значение элемента из третьего массива с точностью до трех знаков после запятой
  24. system(pause); - приостанавливает выполнение программы до нажатия клавиши
  25. return 0; - завершает работу программы

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы