Поменять порядок элементов массива, стоящих на нечетных местах, на обратный - 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;
}

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

В данном коде реализован алгоритм перестановки элементов массива, стоящих на нечетных позициях, на обратный порядок.

  1. В функции reverse объявлены две переменные: last и i. Переменная last вычисляется как size - 2 + size % 2, где size - размер массива, а size % 2 - остаток от деления размера массива на 2. Это необходимо для корректной работы цикла, когда размер массива нечетный. Переменная i инициализируется значением 0.
  2. Затем в цикле for происходит перебор элементов массива, начиная с первого и заканчивая size/2. В каждой итерации выполняется следующее действие:
    • Переменная tmp копирует значение текущего элемента массива.
    • Значение текущего элемента массива присваивается значению элемента с индексом last-i, т.е. элементу, стоящему на обратной позиции относительно текущего.
    • Значение элемента с индексом last-i присваивается переменной tmp, т.е. исходному значению текущего элемента массива.
  3. В функции main объявлен массив arr и переменная size, которая вычисляется как sizeof(arr)/sizeof(arr[0]). Затем выполняется вызов функции reverse с аргументами arr и size.
  4. После этого в цикле for происходит вывод всех элементов массива с помощью функции printf.
  5. В конце функции main возвращается 0, что означает успешное выполнение программы.

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

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