Bin gerade dabei für eine C-Klausur zu lernen und hab hier eine alte Aufgabe, bei der ich nicht weiterkomme.
Schreiben sie ein Programm, das eine gebrochene Zahl x von der Tastatur einliest und geben Sie den Vorkomma- und Nachkommaanteil auf dem Bildschirm aus. Benutzen sie dabei die Standardfunktion modf. Der Vorkommaanteil ist das Funktionsergebnis, x ist der erste Parameter und der zweite ist der Nachkommaanteil.
Ich kannte die Funktion bis jetzt nicht und ich kann mit der Beschreibung
double modf( double num, double \*i );
nicht wirklich viel anfangen.
Bis jetzt bin ich soweit:
#include
#include
int main(void)
{
double x;
printf("Geben sie eine gebr. Zahl x ein: x= ");
scanf("%lf", &x);
........
printf(" "); /\* Ausgabe Vorkomma-, Nachkommaanteil \*/
}
Nach dem einlesen muss ja jetzt die Funktion modf kommen, aber ich weiss nicht genau, wie ich das machen muss.
Kann mir das jemand erklären?
Ein kleiner Blick unter http://www.galileocomputing.de/openbook/c_von_a_bis_…
Zitat: „double modf(double1 zahl1, double2 *zahl2)“ & „Zerlegt den Wert von zahl1 in einen gebrochenen und einen ganzzahligen Wert. Der ganzzahlige Wert (Vorkommateil) befindet sich dann in der Adresse von zahl2.“
Muss man also nur noch in den Code einbauen und geeignet aufrufen.
Bin gerade dabei für eine C-Klausur zu lernen und hab hier
eine alte Aufgabe, bei der ich nicht weiterkomme.
Schreiben sie ein Programm, das eine gebrochene Zahl x von
der Tastatur einliest und geben Sie den Vorkomma- und
Nachkommaanteil auf dem Bildschirm aus. Benutzen sie dabei die
Standardfunktion modf. Der Vorkommaanteil ist das
Funktionsergebnis, x ist der erste Parameter und der zweite
ist der Nachkommaanteil.
Ich kannte die Funktion bis jetzt nicht und ich kann mit der
Beschreibung
double modf( double num, double *i );
nicht wirklich viel anfangen.
Bis jetzt bin ich soweit:
#include #include
int main(void)
{
double x;
printf(„Geben sie eine gebr. Zahl x ein: x= „);
scanf(“%lf“, &x);
Wie dein Problem zu lösen ist, hast du ja bereits erfahren. Ich erlaube mir trotzdem noch ein paar Anmerkungen:
> #include
> #include
>
> int main(void)
> {
> double x;
>
> printf("Geben sie eine gebr. Zahl x ein: x= ");
> scanf("%lf", &x);
scanf liefert einen Rückgabewert, den solltest du auch auswerten. Im günstigsten Fall erzeugt nämlich die Weiterverwendung einer fehlerhaften Eingabe einen Programmabsturz, im ungünstigeren Fall hast du gerade eine Sicherheitslücke programmiert. Insbesondere musst du dir bei jeder Benutzereingabe überlegen, was der User da alles verbrechen könnte:
Das reicht von der Eingabe von Text, wo du gerne eine Zahl hättest (und natürlich umgekehrt) über die Eingabe von „nasichernicht“, wenn du mit „j“ oder „n“ gerechnet hattest (Stichwort Buffer Overflow) bis zu [user weiss nicht was er tun soll und drückt mal ENTER].
Die Eingabe sollte also lauten:
int ok = 0;
[...]
ok = scanf("%lf", &x);
if (1 != ok)
{
// deine Fehlerbehandlung
}
Das bringt mich auch gleich (ungefragt) zum nächsten Steckenpferd von mir. Vergleiche mit Konstanten schreibe ich immer so: " == ". Das hat den Vorteil, dass bei einer Verwechslung von „==“ mit „=“ der Compiler meckert. Das nur so am Rande…
Vermutlich verwendest du einen miesen Compiler; du hattes nämlich oben geschrieben „int main“, schliesst aber nicht mit "return " ab. Abgesehen davon, dass das schlechter Stil ist, ist es auch falsch. Also immer schön brav einen Rückgabewert verwenden, im Ausnahmefall ist zu dokumentieren, warum das an genau dieser Stelle keinen Sinn hat.
Nix für ungut, sollten nur ein paar hilfreiche Hinweise sein.
Wie dein Problem zu lösen ist, hast du ja bereits erfahren.
Ich erlaube mir trotzdem noch ein paar Anmerkungen:
Sicher
scanf liefert einen Rückgabewert, den solltest du auch
auswerten. Im günstigsten Fall erzeugt nämlich die
Weiterverwendung einer fehlerhaften Eingabe einen
Programmabsturz, im ungünstigeren Fall hast du gerade eine
Sicherheitslücke programmiert. Insbesondere musst du dir bei jeder Benutzereingabe überlegen, was der User da alles
verbrechen könnte:
Ich weiss, allerdings stellt unser Prof da schon sehr präzise Aufgaben, wenns nicht drinsteht müssen wirs auch nicht machen *g* und wir müssen das ganze nur auf dem Papier lösen.
Vermutlich verwendest du einen miesen Compiler; du hattes
nämlich oben geschrieben „int main“, schliesst aber nicht mit
"return " ab. Abgesehen davon, dass das
schlechter Stil ist, ist es auch falsch. Also immer schön brav
einen Rückgabewert verwenden, im Ausnahmefall ist zu
dokumentieren, warum das an genau dieser Stelle keinen Sinn
hat.
*gg* Ich hatte es schlicht und einfach vergessen zu tippen
Nix für ungut, sollten nur ein paar hilfreiche Hinweise sein.