Поменять местами максимально положительный и минимально отрицательный элементы массива - 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
, которая меняет местами максимальный положительный и минимальный отрицательный элементы массива. И, наконец, выводится исходный массив и массив после обмена элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д