Поменять местами первый и последний положительный элементы(указатели) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Си. Задание заключается в том, чтобы максимально много использовать в коде указатели. (без malloc() free() и тп) Мой код неверен (привел в виде примера), кучу глупостей вижу, но уже больше не могу Насколько я понимаю в верном решении еще и переменные perv и posl должны быть указателями?
#include <stdio.h>
/*В заданном одномерном массиве целого типа поменять местами следующие 2 элемента:
первый и последний положительные.*/
void main()
{
    int a[3];
    int *i, *j, perv, posl, temp;
    for (i=a; i<a+3; i++)
    {
        scanf("%d", i);
        if (*i>0)
            posl = *i; //находим последний положительный элемент массива
    }
    for (j=a; j<a+3; j++)
    {
        if (*j>0)
        {
            perv = *j; //находим первый положительный элемент массива
            break;
        }
    }
    printf("\n");
    temp = *i;
    *i = *j;
    *j = temp;
    printf("%d\n", *(a+0));
    printf("%d\n", *(a+1));
    printf("%d\n", *(a+2));
}

Решение задачи: «Поменять местами первый и последний положительный элементы(указатели)»

textual
Листинг программы
while (*(++first) <= 0);

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

  1. first - указатель на первый элемент в массиве
  2. * - оператор разыменования указателя
  3. (++first) - выражение, увеличивающее значение указателя на единицу (указатель на следующий элемент)
  4. <= 0 - условие, проверка, что значение элемента меньше или равно нулю
  5. while - цикл, выполняющийся до тех пор, пока условие верно В данном коде, переменная first указывает на первый элемент в массиве. Цикл while будет выполняться до тех пор, пока значение элемента, на который указывает first, меньше или равно нулю. Поскольку в начале цикла first увеличивается на единицу, то в итоге цикл будет выполняться до тех пор, пока не будет найден положительный элемент (или, если массив пустой, до тех пор, пока не будет достигнут конец массива). Однако, в данном коде не выполняется обмен первого и последнего положительного элемента. Это потому, что в условии цикла нет оператора обмена. Если бы был добавлен оператор обмена, код мог бы работать корректно. Но без этого, код просто ищет первый положительный элемент и затем выходит из цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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