Frage von phillip12397, 32

c programm Hilfe bin im ersten Semester?

ich bin schon längere zeit an dieser aufgabe obwohl diese den meisten wahrscheinlich einfach fallen würde:

Schreiben Sie ein C-Programm, das einen Nettobetrag von der Tastatur einliest, die Mehrwertsteuer mit 19 % und den Bruttobetrag berechnet und alle 3 Werte 8-stellig mit 2 Nachkommastellen formatiert ausgibt. Die Ausgabe des Programms sollte in etwa so aussehen:

Programm zur Berechnung eines Bruttobetrages

Bitte geben Sie den Nettobetrag in EUR ein: ___________

Nettobetrag = xxxxx.xx EUR Mehrwertsteuersatz 19.00 % = xxxxx.xx EUR Bruttobetrag = xxxxx.xx EUR

meine jetzige lösung davon ist:

#include<stdio.h>

int main() { double netto, brutto, ergebnis, steuer; printf("Programm zur Berechnung eines Bruttobetrages\n\n"); printf("Bitte geben Sie den Nettobetrag in EUR ein: %d \n"); scanf("%d, &netto“); printf("Nettobetrag = netto\n“); steuer = 0,19; ergebnis = netto * steuer; brutto = netto – ergebnis; Printf("Mehrwersteuersatz 19% = ergebnis\n"); Printf("Bruttobetrag = brutto"); }

Bitte nicht nur die erklärung bei den fehlern die ich gemacht habe sondern auch direkt beispiele, und bitte einfach formulieren bin im ersten semester und kenne noch nicht soviele Fachbegriffe. Danke im vorraus :D

Antwort
von surbahar53, 24

int main()
{
float netto, brutto, ergebnis, steuer;

printf("Programm zur Berechnung eines Bruttobetrages\n\n");
printf("Bitte geben Sie den Nettobetrag in EUR ein: \n");

scanf("%f", &netto);
printf("Nettobetrag = %.2f EUR\n“, netto );

steuer = 19.0f;
ergebnis = netto * steuer / 100.0f;
brutto = netto – ergebnis;

printf("Mehrwersteuersatz %.2f %% = %.2f EUR\n", steuer, ergebnis);
printf("Bruttobetrag = %.2f EUR", brutto);
}

Kommentar von ralphdieter ,

Nur 4 Fehler :-)

  • printf() ist undefiniert
  • printf("Netto...: schließendes " fehlt (typographische Symbole funktionieren nicht)
  • brutto = netto – ergebnis: unbekanntes Zeichen (–)
  • }: kein Rückgabewert.
Antwort
von Balco, 26

Dein Code sieht eigentlich gut aus, was funktioniert denn noch nicht? Ich kann das gerade nicht testen.

Etwas habe ich jedoch noch gesehen: Du musst, um den Bruttopreis zu berechnen, die Mehrwertsteuer zum Nettopreis addieren, nicht abziehen.

Antwort
von triopasi, 29

Was ist/sind denn der/die Fehler??

Antwort
von NoHumanBeing, 22

Sorry, kann hier keinen Code einfügen.

Bitte hier anschauen: http://pastebin.com/PMvMX6eg

Code ist kommentiert.

Kommentar von ralphdieter ,

Du hast fast alles repariert. Aber dort hapert's noch:

scanf("%d",&netto);

"%f", denn netto ist ein double.

printf("Nettobetrag = %.2d EUR\n", netto);

"%.2f", denn netto ist immernoch double.

printf("Mehrwertsteuersatz 19 % = %.2d EUR", ergebnis);

Ein Prozentzeichen wird mit "%%" ausgegeben. Herumstreunende einzelne "%" im Formatstring produzieren gern lustige Ausgaben oder Schlimmeres.

Und natürlich auch hier wieder (und weiter unten nochmal): "%.2f"

Kommentar von ralphdieter ,

Mein Fehler: Bei scanf() muss es für double natürlich "%lf" heißen.

Kommentar von NoHumanBeing ,

Sorry, ich hab's nicht compiliert/getestet, sondern nur "aus dem Gedächtnis" geschrieben, aber Du hast Recht.

Kommentar von ralphdieter ,

WOW, dafür war das dann echt gut. Ich kenne sonst nur Leute, die ganz nervös werden, wenn ihr Code nicht sofort beim Tippen knallebunt wird. Die könnten keine drei Zeilen ohne ihre geliebte Entwicklungsumgebung schreiben :-/

Kommentar von phillip12397 ,

warum soll ich den double benutzen und nicht float, was sind die auswirkungen von den einzelnen ?

Kommentar von NoHumanBeing ,

Den double habe ich einfach übernommen, da Du bereits double benutzt hast.

Bei double handelt es sich um eine 64-bit Gleitkommazahl, bei float um eine 32-bit Gleitkommazahl. Deshalb bietet double eine höhere Genauigkeit, als float.

Ich würde standardmäßig immer double benutzen, außer Du hast einen bestimmten Grund, float zu benutzen. Die einzigen Gründe, float zu benutzen, die mir einfallen, sind folgende.

  • Du musst für eine bestimmte Datenstruktur oder API float benutzen.
  • Du möchtest Millionen von Gleitkommazahlen (z. B. in einem Array) ablegen oder sonst irgendwo aggressiv Speicher sparen (z. B. auf einem "embedded system" mit sehr knappen Ressourcen).
  • Du rechnest auf einer Prozessorarchitektur, die float effizienter verarbeiten kann, als double. Bei den meisten Grafikprozessoren (GPUs) ist das der Fall. Bei Prozessoren mit x86(-64)-Architektur ist es egal, da die Gleitkommaeinheit ohnehin mit 64 oder gar 80 Bit Präzision arbeitet. Hier ist double eventuell sogar etwas schneller, als float.


Im Grunde ist double vs. float ein bisschen so, wie int vs. short. Du würdest (auch für kleine Zahlen) nicht explizit short benutzen, außer Du hast wirklich einen Grund, dies zu tun.

Da dies nur ein "Uniprojekt" ist, ist es egal, aber bei professionellen Anwendungen rechnet man niemals mit Gleitkommazahlen, wenn es um Geld geht, da Gleitkommaoperationen nicht exakt sind, sondern es eine so genannte "Maschinengenauigkeit" gibt.

Kommentar von phillip12397 ,

aber wenn ich jetzt bei scanf ("%lf", &netto); eingebe und es dann ausführe ( habe 50 eingegeben ) kommt dann 1074339840 davor mit float hats geklappt

Kommentar von phillip12397 ,

also die anderen habe ich natürlich auch verändert nicht nur scanf

Kommentar von NoHumanBeing ,

Ich habe gerade folgenden Code geschrieben (zum Testen).

#include "stdio.h"

int main (int argc, char** argv)
{
double d;
scanf("%lf", &d);
printf("%lf\n", 2.0 * d);
return 0;
}

Dann compiliert und ausgeführt.

$ cc -o test test.c
$ ./test
50
100.000000
$

Scheint zu funktionieren. ;-)

Kommentar von ralphdieter ,

Purer Zufall! "%lf" ist bei printf() nicht definiert. "%f" passt für float und double, da float automatisch in double umgewandelt wird. Aber die meisten Implementierungen ignorieren das 'l' einfach.

Vielleicht klappt's nur beim Fragesteller nicht. Das allereinfachste wäre immernoch, alle Compiler-Warnungen einzuschalten und zu lesen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten