Объединить два отсортированных массива - 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;
}
Объяснение кода листинга программы
- #include
- подключает библиотеку для работы с консолью, необходимую для функции getch() - #include
- подключает библиотеку для работы с файлами, необходимую для функции printf() - #include
- подключает библиотеку для работы с массивами, необходимую для функции malloc() - int main (void) - определяет основную функцию программы, в которой происходит объединение массивов
- double mas1[5]={1.2312,12.234,34.45,53.47,57.56}; - объявляет первый массив из 5 элементов с начальными значениями
- double mas2[10]={2.34,4.45,35.34,45.234,46.64,51.0,65.23,73.99,78.34,94.9}; - объявляет второй массив из 10 элементов с начальными значениями
- double mas3[15]; - объявляет третий массив из 15 элементов, в который будут объединены элементы из первых двух массивов
- int i=0, j=0, k=0; - объявляет три переменные для контроля индексов массивов
- while(k<15) - начинает цикл, который будет выполняться пока значение переменной k меньше 15
- if(i<5) - проверяет, что значение переменной i меньше 5, и выполняет следующий блок кода, если это условие выполняется
- if(j<10) - проверяет, что значение переменной j меньше 10, и выполняет следующий блок кода, если это условие выполняется
- if(mas1[i]<mas2[j]) - проверяет, что значение элемента в первом массиве меньше значения элемента во втором массиве, и выполняет следующий блок кода, если это условие выполняется
- mas3[k]=mas1[i]; - записывает значение элемента из первого массива в третий массив
- i++; - увеличивает значение переменной i на 1
- else - если предыдущее условие не выполнилось, то выполняется следующий блок кода
- mas3[k]=mas2[j]; - записывает значение элемента из второго массива в третий массив
- j++; - увеличивает значение переменной j на 1
- else - если предыдущее условие не выполнилось, то выполняется следующий блок кода
- mas3[k]=mas1[i]; - записывает значение элемента из первого массива в третий массив
- i++; - увеличивает значение переменной i на 1
- k++; - увеличивает значение переменной k на 1
- for(i=0;i<15;i++) - начинает цикл, который будет выполняться 15 раз
- printf(
%.3f\n, mas3[i]); - выводит значение элемента из третьего массива с точностью до трех знаков после запятой - system(
pause); - приостанавливает выполнение программы до нажатия клавиши - return 0; - завершает работу программы