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

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

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

Здравствуйте. Дан массив целых чисел, состоящий из N элементов (N=10). Поменять местами последний элемент с элементом, который ближе всего находится к среднему значению. Подскажите,пожалуйста, как можно поправить код, чтобы избавиться от переменной c?
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
int main()
{
 int a[N],*p,c;
 time_t t;
 clrscr();
 srand(time(&t));
   for(p=a;p<&a[N];p++)
   {
      *p=0+rand()%50;
      printf("%d ",*p);
   }
   printf("\n");
   for(p=a;p<&a[N];p++)
   {
      if(p==&a[4])
      {
    c=*p;
    *p=a[9];
    a[9]=c;
      }
   }
   for(p=a;p<&a[N];p++)
   {
   printf("%d ",*p);
   }
getch();
return 0;
}

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

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
 
int main()
{
    int a[N];
    int* p;
    int avg = 0;
 
    srand(time(NULL));
    for(p = a; p < a + N; p++)
    {
        *p = rand() % 50;
        avg += *p;
        printf("%d ", *p);
    }
    avg /= N;
    
    printf("\nAvarage=%d\n", avg);
    p = a;
    for(int i = 1; i < N; i++)
    {
        if(abs(avg - *p) > abs(avg - a[i]))
            p  = a + i;
    }
    /* swap most close to avg and last in a[]*/
    printf("Swapping %d and %d\n", *p, a[N-1]);
    if(p != &a[N-1])
    {
        a[N-1] = a[N-1] + *p;
        *p = a[N-1] - *p;
        a[N-1] = a[N-1] - *p;
    }
 
    for(p = a; p < a + N; p++)
        printf("%d ", *p);
    return 0;
}

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

  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
Похожие ответы