обработкa одномерного массива

Дан массив A[n]. Найти произведение элементов, расположенных между первым по порядку минимальным и последним по порядку максимальным элементами массива. В моем коде не работает часть с произведением.(код ниже)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>

void main() 
{
    int a[10];
    int i;
    int max,min;
    int result;
    printf("Enter 10 numbers\n");
    for (i = 0; i<10; i++)
    {
        printf("%d: ", i);
        scanf("%d", &a[i]);
    }
    max = a[0];
    for (i = 1; i<10; i++) 
    {
        if (a[i] > max) 
        {
            max = a[i];
        }
    }
    printf("\nmax element is:  %d", max);
    min = a[0];
    for (i = 1; i<10; i++)
    {
        if (a[i]<min) 
        {
            min = a[i];
        }
    }
    printf("\nmin element is:  %d", min);
    for (i=min+1; i<max; i++)
    result *= a[i];
    printf("\nPROIZVEDENIE is: %d", result);
    getch();
}

Ответы (1 шт):

Автор решения: AlexGlebe
// gcc -Wall -std=c11 mularr.c -o mularr
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>

// возвращаемый тип по стандарту должен быть int
int main() 
{
  setlocale ( LC_ALL  , ""  ) ; // раз подключили библиотеку, то используйте
    int a[10];
    int i;
    int max,min;
    // Положение этих элементов тоже запоминать надо
    int maxi, mini ;
    int result;
    printf("Enter 10 numbers\n");
    for (i = 0; i<10; i++)
    {
        printf("%d: ", i);
        scanf("%d", &a[i]);
    }
    max = a[0];
    // задаём максимальное значение и его индекс
    maxi = 0 ;
    for (i = 1; i<10; i++) 
    {
      // последним по порядку означает, что по
      // одинаковому значению индекс тоже надо менять
        if (a[i] >= max) 
        {
            max = a[i];
            maxi = i ;
        }
    }
    printf("\nmax element is:  %d", max);
    min = a[0];
    // задаём минимальное значение и его индекс
    mini = 0 ;
    for (i = 1; i<10; i++)
    {
        if (a[i]<min) 
        {
            min = a[i];
            mini = i ;
        }
    }
    printf("\nmin element is:  %d", min);
    // вы забыли начальное значение result задать,
    // результат умножения будет неопределённым (случайным)
    result  = 1 ;
    // если максимальное значение стоит перед минимальным, то
    // нужно поменять индексы.
    if  ( mini  > maxi  ) {
       int tmp = mini  ;
       mini  = maxi  ;
       maxi  = tmp ; }
    // здесь цикл задаём по индексам, а не по значениям
    for (i=mini+1; i<maxi; i++)
      result *= a[i];
    printf("\nPROIZVEDENIE is: %d\n", result);
    //getch();
}
→ Ссылка