Указатель с массивом - C (СИ)

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

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

Здравствуйте. Дан массив целых чисел, состоящий из N элементов (N=10). Поменять местами последний элемент с элементом, который ближе всего находится к среднему значению. Подскажите,пожалуйста, как можно поправить код, чтобы избавиться от переменной c?
Листинг программы
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define N 10
  6. int main()
  7. {
  8. int a[N],*p,c;
  9. time_t t;
  10. clrscr();
  11. srand(time(&t));
  12. for(p=a;p<&a[N];p++)
  13. {
  14. *p=0+rand()%50;
  15. printf("%d ",*p);
  16. }
  17. printf("\n");
  18. for(p=a;p<&a[N];p++)
  19. {
  20. if(p==&a[4])
  21. {
  22. c=*p;
  23. *p=a[9];
  24. a[9]=c;
  25. }
  26. }
  27. for(p=a;p<&a[N];p++)
  28. {
  29. printf("%d ",*p);
  30. }
  31. getch();
  32. return 0;
  33. }

Решение задачи: «Указатель с массивом»

textual
Листинг программы
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #define N 10
  5.  
  6. int main()
  7. {
  8.     int a[N];
  9.     int* p;
  10.     int avg = 0;
  11.  
  12.     srand(time(NULL));
  13.     for(p = a; p < a + N; p++)
  14.     {
  15.         *p = rand() % 50;
  16.         avg += *p;
  17.         printf("%d ", *p);
  18.     }
  19.     avg /= N;
  20.    
  21.     printf("\nAvarage=%d\n", avg);
  22.     p = a;
  23.     for(int i = 1; i < N; i++)
  24.     {
  25.         if(abs(avg - *p) > abs(avg - a[i]))
  26.             p  = a + i;
  27.     }
  28.     /* swap most close to avg and last in a[]*/
  29.     printf("Swapping %d and %d\n", *p, a[N-1]);
  30.     if(p != &a[N-1])
  31.     {
  32.         a[N-1] = a[N-1] + *p;
  33.         *p = a[N-1] - *p;
  34.         a[N-1] = a[N-1] - *p;
  35.     }
  36.  
  37.     for(p = a; p < a + N; p++)
  38.         printf("%d ", *p);
  39.     return 0;
  40. }

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

  1. Объявлены массив a типа int и указатель p на этот массив.
  2. Инициализирован массив a случайными числами от 0 до 49.
  3. Инициализирован указатель p на первый элемент массива a.
  4. Инициализирован переменная avg для хранения среднего значения массива.
  5. Установлен начальный индекс для цикла for, который будет перебирать элементы массива от p до a + N.
  6. В каждой итерации цикла, значение текущего элемента массива присваивается указателю p.
  7. Значение текущего элемента массива добавляется к переменной avg.
  8. Значение текущего элемента массива выводится на экран через printf.
  9. После завершения цикла, переменная avg делится на размер массива N для получения среднего значения.
  10. Выводится среднее значение массива на экран через printf.
  11. Указатель p обновляется, чтобы указывать на последний элемент массива.
  12. Начинается цикл for, который будет перебирать элементы массива от p до a + N-1.
  13. В каждой итерации цикла, проверяется, является ли разница между текущим значением avg и значением элемента массива ближе к avg, чем разница между avg и последним элементом массива.
  14. Если условие выполняется, указатель p обновляется, чтобы указывать на элемент массива, ближайший к avg.
  15. Если условие не выполняется, выполняется обмен значениями между последним элементом массива и элементом, на который указывает указатель p.
  16. Завершается цикл for.
  17. Выводится сообщение о том, какие элементы были обменены.
  18. Выводится массив a от начала до конца.
  19. Программа возвращает 0, что означает успешное завершение.

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


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

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

9   голосов , оценка 3.889 из 5

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

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

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