Указатель с массивом - 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;
- }
Объяснение кода листинга программы
- Объявлены массив
a
типа int и указательp
на этот массив. - Инициализирован массив
a
случайными числами от 0 до 49. - Инициализирован указатель
p
на первый элемент массиваa
. - Инициализирован переменная
avg
для хранения среднего значения массива. - Установлен начальный индекс для цикла for, который будет перебирать элементы массива от
p
доa + N
. - В каждой итерации цикла, значение текущего элемента массива присваивается указателю
p
. - Значение текущего элемента массива добавляется к переменной
avg
. - Значение текущего элемента массива выводится на экран через printf.
- После завершения цикла, переменная
avg
делится на размер массиваN
для получения среднего значения. - Выводится среднее значение массива на экран через printf.
- Указатель
p
обновляется, чтобы указывать на последний элемент массива. - Начинается цикл for, который будет перебирать элементы массива от
p
доa + N-1
. - В каждой итерации цикла, проверяется, является ли разница между текущим значением
avg
и значением элемента массива ближе кavg
, чем разница междуavg
и последним элементом массива. - Если условие выполняется, указатель
p
обновляется, чтобы указывать на элемент массива, ближайший кavg
. - Если условие не выполняется, выполняется обмен значениями между последним элементом массива и элементом, на который указывает указатель
p
. - Завершается цикл for.
- Выводится сообщение о том, какие элементы были обменены.
- Выводится массив
a
от начала до конца. - Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д