2017-02-05 3 views
1

Ich schreibe diese Codes, um das Maximum und Minimum in fünf verschiedenen Ganzzahlen zu finden.Verwenden Sie 'if', um Maximum und Minimum zu finden

Ich weiß, das ist nicht der beste Ansatz. Es könnte das Maximum finden, aber der Wert von 'min' ist immer gleich 'a', der zu Beginn zugewiesen wurde.

#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

Sie initialisieren sollte 'min = INT_MAX' und' max = INT_MIN'. (definiert in der Datei "limits.h"). –

+1

@barakmanos Nein, das hat keinen Sinn. Der richtige Ansatz besteht darin, "min" oder "max" auf einen Wert von "a", "b" usw. zu initialisieren. – Stargateur

+0

@Stargateur: Warum macht das keinen Sinn? –

Antwort

2

Ihre max und min sind 1 am Anfang gesetzt, aber nach dem Eingang der Wert von a ändert aber max und min bleiben 1.

Sie können dieses Problem lösen, indem Sie die max und min nach der scanf Anweisung initialisiert oder Sie könnten nur max und min zu INT_MAX und INT_MIN in limits.h definiert initialisieren, wie durch Barak Manos hingewiesen.

#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; 
    .... 
    .... 
} 

Auch eine einfache Version wäre speichern alle eingegebenen Zahlen in einem Array und rufen min und max auf diesem Array.

+0

Ein bisschen Kredit auf den ursprünglichen Kommentar (Angabe der genau dasselbe) würde niemandem weh tun ... –

+0

Dies löst das Problem. Ich danke dir sehr. – Jack

+0

Aber wenn ich den ursprünglichen Code laufen lasse und 22, 33, 44, 55, 66 eingib, distrahiere ich '** Maximum: 66 Minimum: 1 **' (nur 'max' wurde geändert), das verwirrte mich wirklich . – Jack

4

Sie initialisieren max und min mit dem Wert von avor Sie für die Benutzereingabe fragen. Die Aktualisierung a aktualisiert min und max nicht.

Der Ausdruck max = a kopiert den Wert a in max. Es setzt max nicht auf a.

Da Sie a aus allen Berechnungen weggelassen haben, wird das Minimum und Maximum nicht berücksichtigt.

2

Es ist, weil Sie min und max vor dem Einfluss a inizialisieren.

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; 

By the way, die richtige Prototyp des Haupt in Ihrem Fall ist int main(void);

2

Restructure Code auf diese Weise:

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; 
} 

Auch sehen nicht die Verwendung einer der Initialisierung, b, c, d und e mit verschiedenen Werten, wenn Sie diese Eingaben von der Standardeingabe scannen.

Dieser Code funktioniert nicht, wenn der Benutzer alle 0 als Eingabe eingegeben hat. Dann ist Ihre Mindestberechnung falsch.

So ist es am besten min zu initialisieren mit INT_MAX und max mit INT_MIN

3

Sie können auch geben Sie die Werte in ein Array. Wenn Sie diese Methode verwenden, können Sie max und min zu array[0] gesetzt und iterieren i=1-i=n und vergleichen array[i] mit den max und min Werte. Wenn ein neuer Wert max oder min gefunden wird, setzen Sie sie auf array[i].Hier

ein Beispiel:

#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

Hallo Sie können die folgenden durch diesen Code implementieren. Wenn Sie Werte von Max und Min vor dem Scannen eines Wertes zuweisen, könnte ein Problem auftreten.

Für ex: Ich gebe 5 Zahlen 3,4,5,6,7 wie folgt ein Ich werde 1 als Wert für min aus Ihrem Code.So dieses Problem kann einfach durch die Festlegung von max und min nach der Benutzereingabe entfernt werden .

#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; 
} 

Prost!

+0

Ich habe Sie nicht bekommen Sir. –

+0

Bekam es.Cheers !! –

0

Wie andere haben diagnostiziert:

  • min und max werden auf 1, bevor der Wert von a vom Benutzer gelesen wird. Die Lösung besteht darin, die Werte min und maxnach zu initialisieren.
  • die Initialisierung von a, b, c, d und e ist nutzlos.
  • sollte der Rückgabewert von scanf() getestet werden, um undefiniertes Verhalten zu vermeiden.
  • der Prototyp für main ohne Argumente ist int main(void).
  • Die letzte printf sollte eine endgültige Newline ausgeben, um eine ordnungsgemäße Spülung auf allen Plattformen zu gewährleisten.

Hier ist ein anderer Ansatz mit einer einzigen Schleife. Es verwendet einen klassischen Trick, um alle Vergleiche generic: min auf den grösstmöglichen int Wert initialisiert und max zum kleinsten:

#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; 
} 
Verwandte Themen