C Berechnung Durchschnittsnote

Quackmoor

Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
2.806
Hallo liebe CB'ler,
Ich muss ein Programm in C mit Visual 2008 schreiben, um eine Durchschnittsnote zu berechnen.
Text:
Die Gesamtnote eines Prüfungsverfahrens werde ermittelt, in dem die Teilnote der münd-
lichen Teilprüfung mit doppelter Wertigkeit, die Teilnote der schriftlichen Prüfung mit
einfacher Wertigkeit und die Teilnote der praktischen Prüfung mit dreifacher Wertigkeit
in die Berechnung des Durchschnitts eingehen. Die Teilnoten sind jeweils ganze Noten
ohne Komma.
Schreiben Sie ein Programm zur Berechnung der Gesamtnote, die mit einer Genauigkeit
von einer Nachkommastelle auf dem Bildschirm ausgegeben werden soll. Die Teilnoten
sind jeweils von der Tastatur einzulesen.

Bisher habe ich:
Code:
#include <stdio.h>;

int main (){
int NMue,NSchr,NPra;
float NGes;
printf("Bitte geben Sie die Note der mündlichen Prüfung ein: ");
scanf("%d",&NMue);
printf("Bitte geben Sie die Note der schriftlichen Prüfung ein: ");
scanf("%d",&NSchr);
printf("Bitte geben Sie die Note der praktischen Prüfung ein: ");
scanf("%d",&NPra);
NGes = ( 2 * NMue + NSchr + 3 * NPra ) / 6;
printf("Die Gesamtnote ist: %.1f ",NGes);
system("pause");
return 0;

}
Das Programm schneidet aber die Nachkommastellen ab. Ich brauche Hilfe.
Das es sonst auch unvollständig ist, weiß ich, tut hier aber nichts zur Sache.

Danke im Voraus

Q.
 
Wenn ich mich nicht täusche (was eher wahrscheinlich ist) liegt das an deiner Zusammenrechnung.
Code:
NGes = ( 2 * NMue + NSchr + 3 * NPra ) / 6;

Hier müsste man die einzelnen Variabeln eventuell als floats verrechen, was so aussehen dürfte:

Code:
Nges = ( 2 * (float) NMue + (float) NSchr + 3 * (float) NPra ) / 6;

Wahrscheinlich falsch, aber versuchen könntest du es ja mal...
 
Code:
#include <stdio.h>[COLOR="Red"];[/COLOR]
->
Code:
#include <stdio.h>
;)

Und zu deinem Fehler:
Code:
NGes = ( 2 * NMue + NSchr + 3 * NPra ) / 6;
->
Code:
NGes = ( 2 * NMue + NSchr + 3 * NPra ) / 6[COLOR="Red"].0[/COLOR];

Ansonsten wird zunächst Integer durch Integer geteilt (-> Nachkommastellen werden abgeschnitten) und das Ergebnis zu Float gecastet. Schreibst du "6.0", dann wird der linke Teil der Division zu float gecastet, und es ist eine Division float durch float, bei der keine Nachkommasetlle verloren geht ;)

EDIT: Mist, zu langsam! :rolleyes:
 
Zuletzt bearbeitet:
@mib: ich weiß nicht mehr mit welchem compiler es war, aber ich hatte auch schonmal das problem, dass dem float automatisch die nachkommastellen gefehlt hatn, sobald mit einem int gerechnet wurde.
 
1668mib schrieb:
@AP Nova: Es reicht wenn ein Gleitkomma-Wert in der Rechnung auftaucht...
Falsch

Code:
printf("%f",(1/2)*3.0f);

Gibt eben nicht 1.5 aus, sondern 0.0 - warum? 1/2 entspricht int/int (0) - multipliziert mit 3.0f ergibt immer noch 0. Da kann die 3.0 ein Float sein, ein Double oder ein Weihnachtsplätzchen.

Die zuerst evaluierte Term bestimmt den Ergebnistyp des Gesamtausdrucks.

Richtig müsste es also heißen:

Code:
printf("%f",(1.0f/2)*3);

Das 'f'-Suffix erzwingt die Repräsentation als Float. Das 'd'-Suffix eine Repräsentation als Double (ein Punkt in einem Wert impliziert in C übrigens die doppelte Präzision).

Wenn man auf Nummer sicher gehen will, erledigt man das - wie bereits durch Beispiele gezeigt - explizit via Typecast oder man benutzt von Anfang an Fließkommatypen.
 
@XunnD: Entschuldige, in "dieser" statt in "der". Ich hatte wohl zu viel Intelligenz beim Leser erwartet, der den Unterschied zwischen "der" und "einer" kennt.
 
Zurück
Oben