Поменять местами максимально положительный и минимально отрицательный элементы массива - 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;
}

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

В данном коде реализованы три функции:

  1. max_positive(const int* ptr, size_t len) - функция для поиска максимального положительного элемента в массиве. Работает следующим образом:
    • инициализирует переменную retval как NULL, которая будет хранить максимальный положительный элемент;
    • перебирает все элементы массива, начиная с первого;
    • если retval равен NULL, то текущий элемент больше 0 и становится новым значением retval;
    • если retval не равен NULL, то текущий элемент сравнивается с текущим значением retval. Если текущий элемент больше значения retval, то он становится новым значением retval.;
    • по окончанию цикла возвращает retval.
  2. min_negative(const int *ptr, size_t len) - функция для поиска минимального отрицательного элемента в массиве. Работает аналогично функции max_positive, но с использованием знака < вместо >.
  3. swap(int ptr1, int ptr2) - функция для обмена значений двух указателей. Если оба указателя не равны NULL, то происходит обмен значений между ними. В функции main создается массив array размером 14, заполняемый случайными числами от -10 до 10 с шагом 1. Затем вызывается функция max_positive, которая возвращает указатель на максимальный положительный элемент массива, и функция min_negative, которая возвращает указатель на минимальный отрицательный элемент массива. После чего вызывается функция swap, которая меняет местами максимальный положительный и минимальный отрицательный элементы массива. И, наконец, выводится исходный массив и массив после обмена элементов.

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


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

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

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