Программа на C: обновление максимального и минимального целых чисел без использования массивов - PullRequest
0 голосов
/ 18 февраля 2019

Я экспериментирую с простой программой на C, которая должна предложить пользователю ввести выбранное количество натуральных чисел.У меня проблема с получением максимума и минимума набора целых чисел, которые я ввожу без использования массива.

Способ, который у меня сейчас есть, заключается в том, что он обновит максимальное и минимальное значения среди последних двух введенных значений.Если кто-то не против посмотреть, что я делаю неправильно, это будет оценено.

посмотрите здесь:

#include<stdio.h>

int main()
{
   int N ,i, value=0, min=0, max=0, sum=0, oldmin=0, Newmin=0, oldmax=0, Newmax=0;
double mean;

do{

  printf("How many values are to be entered?: ");
  scanf("%d", &N);
  printf("\n");

  if (N>0){

  do{   
     if (N>0){

                                // 1st value updated
     for (i=1;i<=N;i++)
     {   

         printf("Value %d:\n",i);
         scanf("%d", &value);
         sum  = sum+value; 
      }
       mean = (double)sum/(double)N;

      //max
         if(oldmax<Newmax){
            max = Newmax;
         }
         else max = oldmax;

      //min
        if(oldmin>Newmin){
            min = Newmin;
         }
         else min = oldmin;

  }

  else printf("INPUT ERROR!\n");
  }
  while(N<0);
      printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf.",min,max,mean);

      }else printf("INPUT ERROR!\n");
  } while(N<0);

return 0;}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

некоторые замечания:

  • вам нужно установить минимальное / максимальное значение из значение в том же цикле, что вы делаете sum = sum+value;, это причина вашей проблемы смин / макс
  • проверьте результат сканирования, чтобы убедиться, что число было введено
  • if (N>0){ do{ if (N>0){, поэтому две проверки, но N никогда не изменится
  • if (N > 0) { do { ... } while (N<0); } это не имеет смысла
  • встроенные циклы не имеют смысла, нужен только 1 цикл

Предложение, устраняющее проблемы:

#include<stdio.h>

int main()
{
   int N;

   fprintf(stderr, "How many values are to be entered?: ");
   if ((scanf("%d", &N)  != 1) || (N <= 0))
     printf("INPUT ERROR!\n");
   else {
     int i, min, max, sum = 0;

     for (i = 0; i < N; ++i) {
       int value;

       fprintf(stderr, "Value %d:\n",i);
       if (scanf("%d", &value) != 1) {
         printf("INPUT ERROR!\n");
         return -1;
       }
       sum  = sum+value; 
       if (i == 0) {
         min = max = value;
       }
       else {
         if (value < min)
           min = value;
         if (value > max)
           max = value;
       }
     }

     printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf\n",
            min,max, (double)sum/(double)N);
   }

   return 0;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
How many values are to be entered?: 3
Value 0:
1
Value 1:
2
Value 2:
3

The minimum value is 1, the maximum value is 3, and the average value is 2.00

Я использовал fprintf , чтобы очистить сообщение с \ n, и я установил первое значение min и max напервый ход, чтобы не использовать MIN_INT MAX_INT может быть не определен для вас

0 голосов
/ 18 февраля 2019
if(oldmax<Newmax){

Не сравнивайте newmax и oldmax.Сравните max и value.То же самое с min.

Я даже не уверен насчет цели Newmax и oldmax.Удалите эти переменные все вместе, так как это вас просто запутает.

Просто используйте min, max и value.Это разберутся.

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