Каждый i-ый элемент массива заменить минимальным среди первых i элементов - C (СИ)
Формулировка задачи:
Каждый из элементов ti массива T(m) заменить минимальным среди первых i элементов этого массива. Для m>=4 предусмотреть заполнение массива случайными числами из диапазона –10 до 10.
Решение задачи: «Каждый i-ый элемент массива заменить минимальным среди первых i элементов»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- int int_cmp(const void* a, const void* b)
- {
- return ((*(int*)a) < (*(int*)b));
- }
- void* min_element(const void* first, const void* last, const size_t element_size,
- int (*compare)(const void*, const void*))
- {
- void* min = (void*)first;
- while (first != last)
- {
- if (compare(first, min)) min = (void*)first;
- first = (unsigned char*)first + element_size;
- }
- return min;
- }
- void fill(void* first, const void* last, const size_t element_size, const void* const value)
- {
- while (first != last)
- {
- memcpy(first, value, element_size);
- first = (unsigned char*)first + element_size;
- }
- }
- int main(void)
- {
- int m;
- scanf("%d", &m);
- int a[m];
- if (m >= 4)
- {
- srand(time(NULL));
- for (int i = 0; i < m; i++) a[i] = rand() % 21 - 10;
- }
- else
- {
- for (int i = 0; i < m; i++) scanf("%d", &a[i]);
- }
- printf("Array:\n");
- for (int i = 0; i < m; i++) printf("%3d ", a[i]);
- printf("\n");
- int first_i;
- scanf("%d", &first_i);
- fill(&a[0], &a[m], sizeof(int), min_element(&a[0], &a[first_i], sizeof(int), int_cmp));
- printf("Array:\n");
- for (int i = 0; i < m; i++) printf("%3d ", a[i]);
- printf("\n");
- return 0;
- }
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Ввод начального значения массива:
Изначально в основной функции
main
программа запрашивает у пользователя размер массиваm
. Затем, в зависимости от размера массива, программа либо генерирует случайные значения для элементов массива, либо просит пользователя ввести значения вручную. После этого выводится начальный массив. - Поиск минимального элемента:
Программа запрашивает у пользователя номер первого элемента, который будет использоваться для поиска минимального элемента. Функция
min_element
ищет минимальный элемент в заданном диапазоне массива, используя функцию сравненияint_cmp
. - Замена элементов массива:
С помощью функции
fill
найденное минимальное значение заменяется на все элементы массива, начиная с указанного пользователем первого элемента. - Вывод измененного массива: После замены элементов программа выводит измененный массив. Примечание: В данном коде не учитывается случай, когда первый элемент, который необходимо заменить, является минимальным элементом всего массива.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д