C Как найти минимальные и максимальные значения в одномерном массиве из n элементов?

#c #arrays #max #min

#c #массивы #макс #минимум

Вопрос:

Напишите программу, которая просит пользователя ввести целое число n. Программа должна предложить пользователю ввести n целых чисел и сохранить их в одномерном массиве. Затем программа должна вывести минимальные и максимальные элементы в массиве.

 int main()
{
    int n,a,b;
    cin>>n;
    int ma=0,mi=0;
    int num[n];
    cin>>num[0];
    for(int i=1;i<n;i  )
    {
        cin>>num[i];
        a=num[i];
        b=num[i-1];
        if(a>b)
            ma=a;
        if(a<b)
            mi=a;
    }

    cout<<mi<<endl;
    cout<<ma;
}
  

При заданных элементах он неправильно отображает минимальные и максимальные значения. В чем моя ошибка?

Комментарии:

1. Вы должны пометить этот запрос соответствующим языком. Это C? C ? …

2. этот код написан на c

3. Значение является максимальным, когда оно больше предыдущего максимума , а не когда оно больше предыдущего значения 🙂

4. В стандартной <algorithm> библиотеке есть std::minmax_element() функция именно для этой цели.

Ответ №1:

Вы пропустили, что первое значение в вашем алгоритме никогда не будет установлено как минимальное или как максимальное значение. Давайте предположим, что все числа положительные

 int main()
{
    int n;
    cin>>n;
    int ma=0,mi=2147483647;
    int num[n];
    for(int i=0;i<n;i  )
        {
            cin>>num[i];
            if(num[i] > ma)
                ma = num[i];
            if(num[i] < mi)
                mi = num[i];
        }


    cout<<mi<<endl;
    cout<<ma;
}
  

Ответ №2:

Я бы попробовал следующий код:

 std ::vector < int > v (n);
std ::copy_n (std ::istream_iterator < int, char > (cin), begin (v), n);
auto const r ((std ::minmax_element) (begin (v), end (v)));
return std ::cout << * r .first << 'n' << * r .second ? EXIT_SUCCESS: EXIT_FAILURE;
  

Комментарии:

1. Почему std ::istream_iterator < int, char > ?

2. Это итератор, который принимает символьный входной поток и ссылается на последовательные целые числа из него.

3. Хорошо, интересно, я раньше не видел такого использования, спасибо. Кроме того, этот код фактически не компилируется

4. Меня так раздражает ввод этих сущностей / конечных элементов, что у меня есть свои собственные перегрузки для самих контейнеров, поэтому я просто ввел то, что я бы ввел в свой код (за исключением std ).