Переворачивание массива задом наперед
нужно перевернуть массив задом на перед(первый элемент меняется местами с последним, второй с предпоследним и тд.)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <locale.h>
void scan(int* , size_t );
void print(int* , size_t );
int get_max(int* , size_t );
int get_min(int* , size_t );
void invert(int*, size_t);
float get_average(int* a, size_t);
int main()
{
setlocale(LC_ALL, "Russian");
size_t n;
printf("Введите размер массива: ");
scanf("%llu", &n);
int* bebra = (int*)calloc(n, sizeof(int));
scan(bebra, n);
print(bebra, n);
int max = get_max(bebra, n);
printf("Значение максимального элемента: %d\n", max);
int min = get_min(bebra, n);
printf("Значение минимального элемента: %d\n", min);
float avg = get_average(bebra, n);
printf("Средне арифметическое значение: %f\n", avg);
invert(bebra, n);
print(bebra, n);
}
void scan(int* a, size_t n)
{
printf("Ввод массива: \n");
for (size_t i = 0; i < n; i++)
{
printf("arr[%llu] = ", i);
scanf("%d", &a[i]);
}
}
void print(int* a, size_t n)
{
printf("Печать массива: \n");
for (size_t i = 0; i < n; i++)
{
printf("arr[%llu] = %d\n", i, a[i]);
}
}
int get_max(int* a, size_t n)
{
int max = INT_MIN;
for (size_t i = 0; i < n; i++)
{
if (max < a[i])
{
max = a[i];
}
}
return max;
}
int get_min(int* a, size_t n)
{
int min = INT_MAX;
for (size_t i = 0; i < n; i++)
{
if (min > a[i])
{
min = a[i];
}
}
return min;
}
void invert(int* a, size_t n)
{
for (size_t i = 0; i < n; i++)
{
a[i] = a[i] * -1;
}
}
float get_average(int* a, size_t n)
{
float sum = 0;
for (size_t i = 0;i < n;i++)
{
sum = sum + a[i];
}
return sum / n;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Попробуйте разобраться, как работает этот код:
void invert(int* a, size_t n)
{
for(size_t i = 0, j = n-1; i < j; i++, j--)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}