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

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

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

Си. Задание заключается в том, чтобы максимально много использовать в коде указатели. (без malloc() free() и тп) Мой код неверен (привел в виде примера), кучу глупостей вижу, но уже больше не могу Насколько я понимаю в верном решении еще и переменные perv и posl должны быть указателями?
Листинг программы
  1. #include <stdio.h>
  2. /*В заданном одномерном массиве целого типа поменять местами следующие 2 элемента:
  3. первый и последний положительные.*/
  4. void main()
  5. {
  6. int a[3];
  7. int *i, *j, perv, posl, temp;
  8. for (i=a; i<a+3; i++)
  9. {
  10. scanf("%d", i);
  11. if (*i>0)
  12. posl = *i; //находим последний положительный элемент массива
  13. }
  14. for (j=a; j<a+3; j++)
  15. {
  16. if (*j>0)
  17. {
  18. perv = *j; //находим первый положительный элемент массива
  19. break;
  20. }
  21. }
  22. printf("\n");
  23. temp = *i;
  24. *i = *j;
  25. *j = temp;
  26. printf("%d\n", *(a+0));
  27. printf("%d\n", *(a+1));
  28. printf("%d\n", *(a+2));
  29. }

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

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

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

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

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


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

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

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы