Поменять местами максимальный и минимальный элементы массива - C (СИ)
Формулировка задачи:
Ошибка тут скорее всего не одна))реализовывал программу через глобальные переменные,теперь требуется без них.Помогите разобраться,заранее благодарен.
Программа делает вот что : Находит мин.элемент и макс.элемент и меняет их местами
#include <stdio.h>
void VvodMas(int aa[],int *nn)
{
int i;
scanf("%d",nn);
for (i = 0;i < *nn;i++)
{
scanf ("%d",&aa[i]);
}
}
int NaitiMin(int aa[],int nn,int ind_min_a)
{
int i;
int min = aa[0];
ind_min_a = 0;
for(i = 1;i < nn;i++)
{
if (aa[i] < min)
{
min = aa[i];
ind_min_a = i;
}
}
return ind_min_a;
}
int NaitiMax(int aa[],int nn,int ind_max_a)
{
int i;
int max = aa[0];
ind_max_a = 0;
for(i = 1;i < nn;i++)
{
if (aa[i] > max)
{
max = aa[i];
ind_max_a = i;
}
}
return ind_max_a;
}
int Peremeshenie(int aa[])
{
int ind_min;
int ind_max;
int tmp;
tmp = aa[ind_min];
aa[ind_min] = aa[ind_max];
aa[ind_max]=tmp;
return tmp;
}
void VivodMas(int aa[],int nn)
{
int i;
for(i = 0;i < nn;i++)
{
printf("%d",&aa[i]);
}
}
void main()
{
int a[10];
int n;
int ind_min;
int ind_max;
VvodMas(a,&n);
NaitiMin(a,n);
NaitiMax(a,n);
Peremeshenie(a);
VivodMas(a,n);
}Решение задачи: «Поменять местами максимальный и минимальный элементы массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void VvodMas(int aa[], int nn)
{
int i;
for (i = 0; i < nn ;i++)
{
printf("a[%d] = ", i);
scanf ("%d",&aa[i]);
}
}
int NaitiMin(int aa[],int nn)
{
int i, ind_min_a;
int min = aa[0];
ind_min_a = 0;
for(i = 1;i < nn;i++)
{
if (aa[i] < min)
{
min = aa[i];
ind_min_a = i;
}
}
return ind_min_a;
}
int NaitiMax(int aa[],int nn)
{
int i, ind_max_a;
int max = aa[0];
ind_max_a = 0;
for(i = 1;i < nn;i++)
{
if (aa[i] > max)
{
max = aa[i];
ind_max_a = i;
}
}
return ind_max_a;
}
void Peremeshenie(int aa[], int ind_min, int ind_max)
{
int tmp;
tmp = aa[ind_min];
aa[ind_min] = aa[ind_max];
aa[ind_max]=tmp;
}
void VivodMas(int aa[],int nn)
{
int i;
for(i = 0;i < nn;i++)
{
printf("%d ",aa[i]);
}
printf("\n");
}
void main()
{
int *a;
int n; //размерность массива
do
{
printf("n = ");
scanf("%d",&n);
} while (n < 0 || n > 10);
a = (int *)malloc(n * sizeof(int));
int ind_min;
int ind_max;
VvodMas(a, n);
printf("Massiv: \n");
VivodMas(a,n);
ind_min = NaitiMin(a,n);
printf("ind_min = %d\n",ind_min);
ind_max = NaitiMax(a,n);
printf("ind_max = %d\n",ind_max);
Peremeshenie(a,ind_min,ind_max);
printf("Massiv: \n");
VivodMas(a,n);
free(a);
getch();
}
Объяснение кода листинга программы
- Ввод массива с помощью функции VvodMas. Эта функция считывает значения массива с помощью функции scanf.
- Поиск минимального элемента массива с помощью функции NaitiMin. Эта функция сравнивает каждый элемент массива с текущим минимальным значением и обновляет его, если найден элемент меньше текущего минимального значения. Функция возвращает индекс минимального элемента.
- Поиск максимального элемента массива с помощью функции NaitiMax. Эта функция работает аналогично функции NaitiMin, но сравнивает каждый элемент массива с текущим максимальным значением и обновляет его, если найден элемент больше текущего максимального значения. Функция возвращает индекс максимального элемента.
- Функция Peremeshenie меняет местами максимальный и минимальный элементы массива. Она делает это путем копирования значения минимального элемента в переменную tmp, затем копирования значения максимального элемента в позицию минимального элемента и, наконец, копирования значения tmp (которое является исходным минимальным значением) в позицию максимального элемента.
- Вывод массива с помощью функции VivodMas. Эта функция проходит по каждому элементу массива и выводит его значение с помощью функции printf.
- Основная функция main сначала запрашивает размер массива у пользователя и проверяет, что он находится в допустимом диапазоне. Затем она выделяет память для массива с помощью функции malloc. После ввода массива и вывода его на экран, функция main вызывает функцию NaitiMin для поиска индекса минимального элемента и функцию NaitiMax для поиска индекса максимального элемента. Затем она вызывает функцию Peremeshenie для обмена местами максимального и минимального элементов. После этого она снова выводит массив на экран и освобождает выделенную память с помощью функции free. Наконец, она вызывает функцию getch для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.