Указатель с массивом - 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, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д