Neu in C, und alle mathematischen Berechnungen sind etwas aus

8

Ich bin in einer Programmierklasse, in der wir gerade von Python zu C gewechselt sind. Ich habe ein paar Probleme damit, denn C scheint keine mathematischen Operationen mit der Leichtigkeit auszuführen, die Python macht, oder ich Ich vermisse etwas, wenn es um Mathe in C geht.

Für meine Hausaufgaben schreibe ich ein Programm, das sammelt, wie viele Meilen ein Auto von einem Gallone-Nutzer bekommt, wie hoch die Gaskosten pro Gallone sind und wie viele Kilometer sie jeden Monat fahren. Das Programm sagt ihnen dann, wie viel sie erwarten können, für den laufenden Monat Gas zu zahlen. Mein aktueller Code ist wie folgt:

%Vor%

Wenn ich das Programm mit den Werten 24 für "mpg", 3,00 für "gas_price" und 1000 für Meilen ausführe, kommt die Summe auf $ 123,00. Dies ist nicht korrekt, und ist etwa zwei Dollar weniger als der tatsächliche Preis. Wenn du ((1000/24) * 3.00) nimmst, solltest du 125 sogar erhalten. Ich fügte eine Zeichenfolge hinzu, um alle Werte auszudrucken, um zu sehen, was C für die Formel in Zeile 23 verwendet hat. Während mpg und gas_price korrekt sind, wird "meilen" mit einem Wert von 1.074.266.112 angezeigt. Ich weiß, dass es hier einen Fehler geben muss, da dies das Ergebnis um mehr als 2 Dollar hinauswerfen würde, aber ich kann nicht anders, als zu denken, dass es verwandt ist.

Ich entschuldige mich für die Länge der Frage, aber ich wollte so genau wie möglich sein, und ich bin völlig ratlos, warum C das so seltsam liest.

    
Batteries 28.02.2012, 00:28
quelle

4 Antworten

14

Sie machen hier eine Ganzzahl-Division:

%Vor%

Übergeben Sie einen der beiden Operanden an ein double zuerst:

%Vor%

Ganzzahlige Division schneidet den Bruchteil ab. Deshalb sind deine Zahlen ausgeschaltet.

Sie haben hier einen anderen Fehler:

%Vor%

Ihre printf Formatbezeichner stimmen nicht mit den Operanden überein. Es sollte sein:

%Vor%     
Mysticial 28.02.2012, 00:30
quelle
4

Dieser Ausdruck:

%Vor%

wird als

geparst %Vor%

wobei die Division vor der Multiplikation ist. Beide Operanden der Division sind Ganzzahlen, daher gibt C Ihnen ein ganzzahliges (abgeschnittenes) Ergebnis. Um dies zu einer Gleitkommaberechnung zu machen, tun Sie Folgendes:

%Vor%     
Greg Hewgill 28.02.2012 00:31
quelle
1

Ändern Sie int mpg, miles; in double mpg, miles; . Das Problem ist, dass miles/mpg eine ganzzahlige Division verwendet, die ein Ergebnis von 41 statt von 41.66 .... ergibt.

    
markgz 28.02.2012 00:31
quelle
0

Die ganzzahlige Division von miles / mpg verliert etwas an Genauigkeit. In der letzten Zeile gibt es auch einen Printf-Formatbezeichner, der nicht übereinstimmt. Sie sollten %f oder etwas, das damit in Beziehung steht, anstatt %d verwenden, wenn Sie gas_price drucken.

    
Carl Norum 28.02.2012 00:30
quelle

Tags und Links