2017-08-26 3 views
-6

Ich habe einen Code geschrieben Maximal- und Minimalsumme zu finden, die aus vier Zahlen von fünf Zahlen in c berechnet werden können ++Max und Min Summe

code

aber es erzeugt nicht den auf gewünschten Ausgang große Werte z Eingabe gebe ich und gebe ich aus?

image

+2

Es wäre am besten, wenn Sie den Code und die Ausgabe in die Frage stellen würden. Dann können die Leute den Code kopieren und einfügen und anschauen. – nalyd88

+3

Bitte fügen Sie den formatierten Code in die ursprüngliche Frage ein. – DyZ

+2

Sie sollten auch an Ihrer Codeausrichtung arbeiten. Ich bin mir sicher, dass es Bugs gibt, die du wegen deiner schrecklichen Codeausrichtung einfach verpasst hast. –

Antwort

1

Es sieht aus wie Sie Überlauf Probleme haben. Der maximale Wert für den langen Typ beträgt 2.147.483.647 auf 32-Bit-Systemen und unter Windows 64 Bit (siehe this reference). Wenn Sie alle eingegebenen Werte addieren, erhalten Sie 3.001,208,382. Ich bin in der Lage, Ihren Fehler (min ist negativ) auf meinem Mac zu reproduzieren, indem Sie long zu int (wodurch Überlauf versucht, die Zahlen als 32-Bit-Werte speichern) zu ändern. Versuchen

long a[5], max=0, min=10000, sum; 

zu

long long a[5], max=0, min=10000, sum; // long long is 64bit on Win 

verändern und sehen, wenn Sie nicht-negative Werte erhalten. Da es in Ihrem Algorithmus keine Subtraktion gibt und Sie nur positive Werte eingegeben haben, ist der Überlauf nur möglich, wenn sum negativ ist.

Auch mit den eingegebenen Zahlen sum wird nie weniger als 10000 sein. Ich würde vorschlagen, Ihre Min und Max anders zu initialisieren. Vielleicht setzen Sie min und max gleich sum nach der ersten inneren Schleife Iteration.

+0

selbst nach der Verwendung von double statt lang die minimale Summe stellt sich als negativ heraus –

0

Verwenden long long int oder unsigned long long int

Sie haben höhere Bereiche:

long long int: -9.223.372.036.854.775.807 zu 9.223.372.036.854.775.807

unsigned long long int: 0 bis 18.446.744.073.709.551.615

+0

Ich vermute, dass es einen logischen Fehler im Code gibt, den ich nicht herausfinden kann. –

0
  1. Die Art und Weise Ihren Code ausgerichtet ist, ist hässlich und Fehler anfällig.
  2. Die for ohne Klammern sind verwirrend.
  3. Es ist wahrscheinlich kein onverflow. (long Arbeit auf meinem Rechner) ssoguy.png

Was möchten Sie tun lesen ist fünf Werte in Ein- und Ausgabe der min, die max und die sum. Es gibt mehrere Möglichkeiten, dies zu tun.

Eine der Möglichkeiten besteht darin, zu überprüfen, ob die Werte kleiner oder größer sind als der aktuelle Wert min/max, während Sie sie lesen, und danach zu sum hinzuzufügen. Sie müssen überprüfen, ob sie mit der aktuellen min/max, nicht mit der sum vergleichen.

if(a[i] > max) 
    max = a[i]; 
else if (a[i] < min) 
    min = a[i]; 

sum += a[i]; 

Weitere (besser) Weg, es zu tun, ist mit std::valarray und die Methoden verwenden, bietet es abzurufen, was Sie brauchen.

Meine Empfehlung ist es, lernen cpp von einem besseren source.

+0

ich danke Ihnen so sehr. Ich werde versuchen, mich zu verbessern. –

+0

Es sieht so aus, als ob das OP Windows verwendet, das kleinere "lange" als andere 64-Bit-Systeme hat. – nalyd88