2017-02-05 3 views
1

Я пишу эти коды, чтобы найти максимум и минимум в пяти разных целых числах.Используйте «если», чтобы найти максимум и минимум

Я знаю, что это не лучший подход. Он мог найти максимум, но значение «min» всегда равно «a», которое было назначено в начале.

#include <stdio.h> 
#include <stdlib.h> 
//Enter five numbers and find the maximum and minimum. 
int main() 
{ 
    int a = 1, b = 2, c = 3, d = 4, e = 5, max = a, min = a; 
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e); 
    if (b > max) { 
     max = b; 
    } 
    if (c > max) { 
     max = c; 
    } 
    if (d > max) { 
     max = d; 
    } 
    if (e > max) { 
     max = e; 
    } 
    if (b < min) { 
     min = b; 
    } 
    if (c < min) { 
     min = c; 
    } 
    if (d < min) { 
     min = d; 
    } 
    if (e < min) { 
     min = e; 
    } 
    printf("Maximum: %d\nMinimum: %d", max, min); 
    return 0; 
} 
+7

Вы должны инициализировать 'мин = INT_MAX' и' макс = INT_MIN'. (определяется в файле «limits.h»). –

+1

@barakmanos Нет, это не имеет смысла. Правильный подход состоит в том, чтобы инициализировать 'min' или' max' значение 'a',' b' и т. Д. – Stargateur

+0

@Stargateur: Почему это не имеет смысла? –

ответ

2

Ваш max и min устанавливаются 1 в начале, но после ввода, значение a изменения, но максимум и минимум остаются 1.

Вы можете решить эту проблему путем инициализации max и min после scanf заявления или вы могли бы просто инициализировать max и min к INT_MAX и INT_MIN, определенной в limits.h как указал Barak Manos.

#include <stdlib.h> 
//Enter five numbers and find the maximum and minimum. 
int main() 
{ 
    int a,b,c,d,e; 
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e); 
    int max = a, min = a; 
    .... 
    .... 
} 

Кроме того, простая версия будет хранить все входные числа в массиве и вызвать min и max на этом массиве.

+0

Немного благодарности оригинальному комментарию (заявив то же самое) никому не повредит ... –

+0

Это решит проблему. Огромное спасибо. – Jack

+0

Но когда я запускаю исходный код и вводим 22, 33, 44, 55, 66, его доза распечатывается '** Максимум: 66 Минимум: 1 **' (только «max' был изменен), что действительно смутило меня , – Jack

4

Вы инициализировать max и min со значением aперед вы просите для ввода пользователя. Обновление a не обновляет min и max.

Выражение max = a копирует значение a в max. Он не устанавливает max для отслеживания a.

Поскольку вы не указали a из всех расчетов, минимальные и максимальные значения не учитываются.

2

Это потому, что вы inizialize min и max до воздействия a.

int a; 
int b; 
int c; 
int d; 
int e; 
// you should check the return of function 
if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5) { 
    return 1; 
} 
int max = a; 
int min = a; 

Кстати, в вашем случае правильный прототип главной является int main(void);

2

Restructure ваш код таким образом:

int main() 
{ 
    int a = 1, b = 2, c = 3, d = 4, e = 5; 
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e); 
    int min = a, max = a; 
    // rest of your code here; 
} 

Кроме того, не видят использование инициализации, b, c, d и e с разными значениями, когда вы собираетесь сканировать эти входы со стандартного ввода.

Этот код не будет работать в тех случаях, когда пользователь вводит все 0s в качестве входных данных. Тогда ваш минимальный расчет будет неправильным.

Так что лучше инициализировать мин с INT_MAX и макс с INT_MIN

3

Вы также можете ввести значения в массив. Если вы используете этот метод, вы можете установить max и min к array[0] и итерации от i=1 к i=n и сравнить array[i] со значениями max и min. если найдено новое значение max или min, установите их в array[i].

Вот пример:

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

#define SIZE 5 

int main(void) { 
    int array[SIZE], min, max; 

    printf("Enter %d numbers:\n", SIZE); 
    for (size_t i = 0; i < SIZE; i++) { 
     if (scanf("%d", &array[i]) != 1) { 
      printf("Invalid number entered\n"); 
      exit(EXIT_FAILURE); 
     } 
    } 

    max = min = array[0]; 
    for (size_t i = 1; i < SIZE; i++) { 
     if (array[i] > max) { 
      max = array[i]; 
     } else if (array[i] < min) { 
      min = array[i]; 
     } 
    } 

    printf("Maximum: %d\nMinimum: %d\n", max, min); 

    return 0; 
} 
1

Привет вы можете реализовать следующие по этому коду. Если вы задаете значения max и min перед сканированием значения, может возникнуть проблема.

Для примера: я ввожу 5 чисел 3,4,5,6,7 следующим образом. Я получу 1 как значение для min из вашего кода. Таким образом, эту проблему можно удалить просто, указав max и min после ввода пользователя ,

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

//Enter five numbers and find the maximum and minimum. 
int main(void) { 
    int a, b, c, d, e, min, max; 

    if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5) 
     return 1; 

    min = max = a; 
    if (b > max) { 
     max = b; 
    } 
    if (c > max) { 
     max = c; 
    } 
    if (d > max) { 
     max = d; 
    } 
    if (e > max) { 
     max = e; 
    } 
    if (min > b) { 
     min = b; 
    } 
    if (min > c) { 
     min = c; 
    } 
    if (min > d) { 
     min = d; 
    } 
    if (min > e) { 
     min = e; 
    } 
    printf("Maximum: %d\nMinimum: %d", max, min); 
    return 0; 
} 

Cheers!

+0

Я не получил вас, сэр. –

+0

Получил это sir.Cheers !! –

0

Как уже поставлен диагноз:

  • min и max устанавливаются 1 до значения a считывается от пользователя. Исправление состоит в том, чтобы инициализировать min и maxпосле, считывая значения.
  • Инициализация a, b, c, d и e бесполезна.
  • должно быть проверено на возврат значения scanf(), чтобы избежать неопределенного поведения.
  • прототип для main без аргументов int main(void).
  • последние printf должны выводить окончательную новую строку для обеспечения правильной промывки на всех платформах.

Вот другой подход с одним циклом. Он использует классический трюк, чтобы сделать все сравнения родовое: min инициализируется в максимально возможной int стоимости и max к наименьшему:

#include <limits.h> 
#include <stdio.h> 
#include <stdlib.h> 

#define SIZE 5 

int main(void) { 
    int array[SIZE], min = INT_MAX, max = INT_MIN; 

    printf("Enter %d numbers:\n", SIZE); 
    for (size_t i = 0; i < SIZE; i++) { 
     if (scanf("%d", &array[i]) != 1) { 
      printf("Invalid number entered\n"); 
      exit(EXIT_FAILURE); 
     } 
     if (max < array[i]) { 
      max = array[i]; 
     } 
     if (min > array[i]) { 
      min = array[i]; 
     } 
    } 
    printf("Maximum: %d\nMinimum: %d\n", max, min); 
    return 0; 
} 
Смежные вопросы