Нахождение минимального и максимального значения, сохраненного в пользовательском массиве ввода в C - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сделать две основные вещи с этой программой:

  • Получение пользователем ввода цифр, пока они не введут 0 или пока они не достигнут конца массива.
  • Во второй части я хочу найти минимальное и максимальное значения, хранящиеся в массиве, и распечатать их.

Максимальное значение печатается точно, однако минимальное значение печатает что-то похожее на адрес.

Это мой код, не могли бы вы мне помочь?

#include<stdio.h>

#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;
    int min = array[0], max = array[0];

    do
    {
        printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
        scanf("%d", &store);
        array[count ++] = store;
    } while ( count < SIZE && store != 0 );

    total = count;
    printf("Total number of values in array is %d.\n", total);

    for ( count = 0 ; count <= total && array[count] != 0 ; count ++)
    {
        if(array[count] < min)
        {
            min = array[count];
        }

        if(array[count] > max)
        {
            max = array[count];
        }
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);

    return 0;
}

Ответы [ 4 ]

0 голосов
/ 30 марта 2020

в вашем коде есть ошибки. Сначала эта инициализация пропускается int min = array[0], max = array[0];, вы не можете присвоить значение array[0] другим переменным, когда у вас его нет. эта инициализация должна идти после do-while. (иначе это похоже на использование неинициализированных переменных)

секунда array[count != 0] это должно быть array[count]!=0.

, также вы должны проверить этот оператор после сканирования array if(count==1) return 0 это означает, что пользователь не вводил никаких входных данных.

также отметьте здесь count<=total вы проходите границы вашего `массива, что приведет к неопределенному поведению.

#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;

    do
    {
        printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
        scanf("%d", &store);
        array[count++] = store;
    } while (count < SIZE && store != 0);
    int min = array[0], max = array[0];
  if(count==1)
 {
  printf("no data");
  return 0;
 }
    total = count;
    printf("Total number of values in array is %d.\n", total);

    for (count = 0; count < total && array[count]!=0; count++)//or use count < total-1 instead of  total && array[count]!=0
    {
        if (array[count] < min)
        {
            min = array[count];
        }

        if (array[count] > max)
        {
            max = array[count];
        }
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);

    return 0;
}
0 голосов
/ 30 марта 2020

Эта задача может быть выполнена с помощью очень оптимизированного кода, в вашем коде много ошибок. Но здесь я просто делаю исправления в вашем коде и предоставляю комментарии к каждому исправлению, чтобы оно помогло вам найти причину, по которой оно не работает, и помочь вам понять программу.

См. Приведенный ниже код и обязательно прочитайте все комментарии в коде

#include<stdio.h>
#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;
    //int min = array[0], max = array[0];
    // above line will set garbase in min and max
     int min=0, max=0; // we will initialize it later
    do
    {
    printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
    scanf("%d", &store);
   if(store == 0){
       break;
     /* if you should not break here it put 0 in array so
       you always fiind 0 as min*/
    }
    array[count ++] = store;
    //above count ++ , its post increament so count is one more than total elements
    } while ( count < SIZE && store != 0 );

    total = count-1;
    /*count - 1 , reason , when you put last value in count,
    it increamented after that, because you are using post
    increament operator after that*/
    printf("Total number of values in array is %d.\n", total);
    if(total > 0)
    { /*it helps to initialize min with first element then
    it will update with your condition*/
      min = array[0];
      max = array[0];
    }
    for ( count = 0 ; count < total && array[count != 0] ; count ++)
    { // count < total, because loop starts from 0
    if(array[count] < min)
    {
        min = array[count];
    }

    if(array[count] > max)
    {
        max = array[count];
    }
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);
    return 0;
}

Если есть путаница, вы должны спросить в комментарии, Удачи. Код проверен на Turbo- C

Ниже приведен код с некоторыми изменениями в вашей программе, он помогает вам понять следующий уровень и вы можете подумать о более лучшем подходе.

#include<stdio.h>
#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;
    int min, max; // we will initialize it later
    do
    {
    printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
    scanf("%d", &store);
    if(store == 0){
     break;
    }
    array[count++] = store;
    if(count == 1){
      min = array[0];
      max = array[0];
    }
    if(store < min)
    {
        min = store;
    }

    if(store > max)
    {
        max = store;
    }
    } while ( count < SIZE);
    if(count > 0){
     printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);
    }
    else{
     printf("No element in array");
    }
    return 0;
}
0 голосов
/ 30 марта 2020

Проблема с вашим кодом (я думаю, вы неправильно его набрали) является вторым условием для l oop. Если вы проверите для array [count != 0], значение выражения count != 0 может быть либо 1, либо 0, поэтому вы просто получаете доступ к array[0] или array[1].

. Если вы хотите исправить просто замените его на array[count] != 0, но это не очень хорошее решение. Вы уже посчитали, сколько чисел вам нужно проверить, почему бы просто не проигнорировать последнее (которое равно 0)?

При этом, это код, который вы хотели:

#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;

    do
    {
        printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
        scanf("%d", &store);
        array[count ++] = store;
    } while ( count < SIZE && store != 0 );

    int min = array[0], max = array[0];

    total = count;
    printf("Total number of values in array is %d.\n", total);

    for (count = 0; count < total-(total != SIZE); count ++)
    {
        if(array[count] < min)
            min = array[count];

        if(array[count] > max)
            max = array[count];
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);

    return 0;
}

Обратите внимание, что ваше старое условие в for l oop count <= total вызывает неопределенное поведение, так как вы получаете доступ На 1 элемент правее.

Я также забыл упомянуть, но я думаю, что вы читали это в других ответах ... вам нужно переместить строку, когда вы установите значение min и max до первого числа в массиве ПОСЛЕ того, как вы прочитаете массив. Наличие min = array[0] до того, как вы прочитали любой ввод, установит значение мусора на min и затем выдаст неопределенное поведение.


Редактировать: если вы не уверены, что все входные последовательности заканчиваются на 0 Вы должны изменить условие for, чтобы также проверять последний элемент, который в данном случае не является 0. Вы можете сделать это, просто заменив условие for l oop:

// until here the code is the same.

for (count = 0; count < total-(total != SIZE); count ++)

// and from here the code is the same.

При этом ваш код должен вести себя следующим образом:

  • Если SIZE 10, и вы вводите числа: 1, 2, 3, 4, 0, для l oop будут проверяться только 1, 2, 3 и 4.
  • Если SIZE равно 10 и вы вводите числа: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, для l oop проверит все числа, потому что выражение (total != SIZE) оценивается как 0 и, следовательно, total-(total != SIZE) совпадает с total-0.
0 голосов
/ 30 марта 2020

Переместите объявление мин. И макс. Переменных после заполнения массива, например:

#include<stdio.h>

#define SIZE 100
int main()
{
    int count = 0, store, array[SIZE], total;

    do
    {
        printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
        scanf("%d", &store);
        array[count ++] = store;
    } while ( count < SIZE && store != 0 );

    int min = array[0], max = array[0];

    total = count;
    printf("Total number of values in array is %d.\n", total);

    for ( count = 0 ; count <= total && array[count != 0] ; count ++)
    {
        if(array[count] < min)
        {
            min = array[count];
        }

        if(array[count] > max)
        {
            max = array[count];
        }
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);

    return 0;
}

, тогда значение mininum всегда будет 0, если вы напишите 0, чтобы прекратить вставку чисел

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