Поменять местами максимальный и минимальный элементы массива - 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();
 
}

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

  1. Ввод массива с помощью функции VvodMas. Эта функция считывает значения массива с помощью функции scanf.
  2. Поиск минимального элемента массива с помощью функции NaitiMin. Эта функция сравнивает каждый элемент массива с текущим минимальным значением и обновляет его, если найден элемент меньше текущего минимального значения. Функция возвращает индекс минимального элемента.
  3. Поиск максимального элемента массива с помощью функции NaitiMax. Эта функция работает аналогично функции NaitiMin, но сравнивает каждый элемент массива с текущим максимальным значением и обновляет его, если найден элемент больше текущего максимального значения. Функция возвращает индекс максимального элемента.
  4. Функция Peremeshenie меняет местами максимальный и минимальный элементы массива. Она делает это путем копирования значения минимального элемента в переменную tmp, затем копирования значения максимального элемента в позицию минимального элемента и, наконец, копирования значения tmp (которое является исходным минимальным значением) в позицию максимального элемента.
  5. Вывод массива с помощью функции VivodMas. Эта функция проходит по каждому элементу массива и выводит его значение с помощью функции printf.
  6. Основная функция main сначала запрашивает размер массива у пользователя и проверяет, что он находится в допустимом диапазоне. Затем она выделяет память для массива с помощью функции malloc. После ввода массива и вывода его на экран, функция main вызывает функцию NaitiMin для поиска индекса минимального элемента и функцию NaitiMax для поиска индекса максимального элемента. Затем она вызывает функцию Peremeshenie для обмена местами максимального и минимального элементов. После этого она снова выводит массив на экран и освобождает выделенную память с помощью функции free. Наконец, она вызывает функцию getch для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы