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