Поменять порядок элементов массива, стоящих на нечетных местах, на обратный - C (СИ)
Формулировка задачи:
Составить функцию, которая меняет порядок элементов массива, стоящих на нечетных местах, на обратный. Например, для исходного массива 1,2,3,4,5,6 результатом является 5,2,3,4,1,6
помогите,поажлуйста
#include <stdio.h> #include <stdlib.h> #include <time.h> int nol(int a[], int b) { int i; for (i = 1; i<b; i++) a[i] = 0; return 0; } int zap(int a[], int b, int d1, int d2){ srand(time(NULL)); int i; for (i = 0; i<b; i++) a[i] = d1 + rand() / (RAND_MAX / (d2 - d1 + 1)); return 0; } int vivod(int a[], int b){ int i; for (i = 0; i<b; i++) printf("%d ", a[i]); printf("\n"); return 0; } void f(int *m, int s) { int temp; int b = 0; int e = 0; if (s = 1) e = s - 1; else e = s - 2; while (b < e) { temp = m[b]; m[b] = m[e]; m[e] = temp; b += 2; e -= 2; } } int main(void) { int mas[10]; zap(mas, 10, 1, 50); vivod(mas, 10); f(mas, 10); zap(mas, 10, 1, 50); vivod(mas, 10); return 0; }
Решение задачи: «Поменять порядок элементов массива, стоящих на нечетных местах, на обратный»
textual
Листинг программы
#include <stdio.h> void reverse(int* arr, int size) { int last = size - 2 + size%2; int i; for (i = 0; i < size/2; i += 2) { int tmp = arr[i]; arr[i] = arr[last-i]; arr[last-i] = tmp; } } int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; int size = sizeof(arr)/sizeof(arr[0]); int i; reverse(arr, size); for (i = 0; i < size; ++i) { printf("%d ", arr[i]); } return 0; }
Объяснение кода листинга программы
В данном коде реализован алгоритм перестановки элементов массива, стоящих на нечетных позициях, на обратный порядок.
- В функции
reverse
объявлены две переменные:last
иi
. Переменнаяlast
вычисляется какsize - 2 + size % 2
, гдеsize
- размер массива, аsize % 2
- остаток от деления размера массива на 2. Это необходимо для корректной работы цикла, когда размер массива нечетный. Переменнаяi
инициализируется значением 0. - Затем в цикле
for
происходит перебор элементов массива, начиная с первого и заканчиваяsize/2
. В каждой итерации выполняется следующее действие:- Переменная
tmp
копирует значение текущего элемента массива. - Значение текущего элемента массива присваивается значению элемента с индексом
last-i
, т.е. элементу, стоящему на обратной позиции относительно текущего. - Значение элемента с индексом
last-i
присваивается переменнойtmp
, т.е. исходному значению текущего элемента массива.
- Переменная
- В функции
main
объявлен массивarr
и переменнаяsize
, которая вычисляется какsizeof(arr)/sizeof(arr[0])
. Затем выполняется вызов функцииreverse
с аргументамиarr
иsize
. - После этого в цикле
for
происходит вывод всех элементов массива с помощью функцииprintf
. - В конце функции
main
возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д