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