Поменять местами максимально положительный и минимально отрицательный элементы массива - C (СИ)
Формулировка задачи:
Помогите пожалуйста, надо поменять местами максимально положительный и минимально отрицательный элементы массива Т(14)
Решение задачи: «Поменять местами максимально положительный и минимально отрицательный элементы массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int* max_positive(const int* ptr, size_t len)
{
size_t i = 0;
int* retval = NULL;
for (i = 0; i < len; i++)
{
if (retval == NULL && ptr[i] > 0)
{
retval = ptr + i;
}
else if (retval != NULL && ptr[i] > *retval)
{
retval = ptr + i;
}
}
return retval;
}
int* min_negative(const int *ptr, size_t len)
{
size_t i = 0;
int* retval = NULL;
for (i = 0; i < len; i++)
{
if (retval == NULL && ptr[i] < 0)
{
retval = ptr + i;
}
else if (retval != NULL && ptr[i] < *retval)
{
retval = ptr + i;
}
}
return retval;
}
void swap(int *ptr1, int* ptr2)
{
if (ptr1 != NULL && ptr2 != NULL)
{
int buf = *ptr1;
*ptr1 = *ptr2;
*ptr2 = buf;
}
}
#define SIZE 14
int main()
{
int array[SIZE];
size_t i = 0;
srand(time(NULL));
for (i = 0; i < SIZE; i++)
{
printf("%d ", array[i] = rand() % 21 - 10);
}
swap(max_positive(array, SIZE), min_negative(array, SIZE));
putchar('\n');
for (i = 0; i < SIZE; i++)
{
printf("%d ", array[i]);
}
putchar('\n');
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
В данном коде реализованы три функции:
- max_positive(const int* ptr, size_t len) - функция для поиска максимального положительного элемента в массиве. Работает следующим образом:
- инициализирует переменную
retvalкакNULL, которая будет хранить максимальный положительный элемент; - перебирает все элементы массива, начиная с первого;
- если
retvalравенNULL, то текущий элемент больше 0 и становится новым значениемretval; - если
retvalне равенNULL, то текущий элемент сравнивается с текущим значениемretval. Если текущий элемент больше значенияretval, то он становится новым значениемretval.; - по окончанию цикла возвращает
retval.
- инициализирует переменную
- min_negative(const int *ptr, size_t len) - функция для поиска минимального отрицательного элемента в массиве. Работает аналогично функции
max_positive, но с использованием знака<вместо>. - swap(int ptr1, int ptr2) - функция для обмена значений двух указателей. Если оба указателя не равны
NULL, то происходит обмен значений между ними. В функцииmainсоздается массивarrayразмером 14, заполняемый случайными числами от -10 до 10 с шагом 1. Затем вызывается функцияmax_positive, которая возвращает указатель на максимальный положительный элемент массива, и функцияmin_negative, которая возвращает указатель на минимальный отрицательный элемент массива. После чего вызывается функцияswap, которая меняет местами максимальный положительный и минимальный отрицательный элементы массива. И, наконец, выводится исходный массив и массив после обмена элементов.