Prof. Dr. H. Weber Praktikum Programmieren 1 in C, WS 2004/05 Übungsblatt 10 __________________________________________________________ Aufgabe 25 Schreiben Sie ein Programm, das von der Kommandozeile aus aufgerufen werden kann und einen Bruch, bestehend aus zwei natürlichen Zahlen, gekürzt ausgibt. Implementieren Sie hierzu eine Funktion long ggt(long x, long y), welche den größten gemeinsamen Teiler zweier ganzer Zahlen berechnet. Werden beim Programmaufruf nicht genau zwei Parameter angegeben, soll eine Meldung erscheinen, welche die Verwendung des Programms erläutert. Weiterhin sollen die Eingabe von Null als Zähler oder Nenner korrekt behandelt und ganzzahlige Ergebnisse nicht als Bruch ausgegeben werden. Beispiele: > kuerzen 15 10 > 15/10 = 3/2 > kuerzen > Gibt den gekuerzten Bruch zu zwei Zahlen aus > Aufruf: kuerzen zaehler nenner > kuerzen 10 > Gibt den gekuerzten Bruch zu zwei Zahlen aus > Aufruf: kuerzen zaehler nenner > kuerzen 10 20 2 > Gibt den gekuerzten Bruch zu zwei Zahlen aus > Aufruf: kuerzen zaehler nenner > kuerzen 0 10 > 0/10 = 0 > kuerzen 10 0 > Fehler: Nenner ist Null > kuerzen 10 2 > 10/2 = 5 Einheften in Praktikumsordner: Listing, Resultate Aufgabe 26 Teil 1 Sind die folgenden Schreibweisen für Zahlenkonstanten in C zulässig? (Begründung!) a) b) c) d) 13.3E22 -1.33E22 0.000133E-22 +196 e) f) g) h) 10.79E6.3 -1,234 0123 6/7 i) j) k) l) 0xff 1.E1 .1E1 pi Teil 2 Was sind die Werte der Variablen a, b, c, d und e wenn im folgende n Programmstück die Variable x die Werte –1, 0, 5 und 10 hat? typedef int bool; a) bool a = x > 0 && x <= 10; b) bool b = x < 0 || x > 9; c) bool c = ! ( b || a); d) bool d = a || (b & !c); e) bool e = !d || !(‘A’ > ‘B’) & ‘e’ > ‘d’; Teil 3 Welche der folgende if-Anweisungen sind identisch mit if (a && b) x=0; ? a) if (a) { x = 0; if (b) x=0; } b) if (a) if (b) x=0; c) if (x) d) if (a) x=0; x=0; else if (b) if (b) x=0; x=0; e) if (a) { if (b) x=0; } else x=0; f) if (a) x=0; if (b) x=0; else x=0; g) if (a&&b) h) if (a) x=0; if (!b) { } else { } else x=0; Teil 4 Setzen Sie in den folgenden Ausdrücken in der Weise Klammern, wie der CCompiler sie auswerten würden. a) b) c) d) e) f) g) h) i) a = b*c == 2; a = f(x) && a > 100; a == b && x != y; a = b += 2 + f(2) a = s.f + x.y a = b >> 2 + 4; a = b && a > z ? x = y : z; a = * ++ * p; a = b ^ c & d; (Lösung auf Papier bearbeiten, wird vom Übungsleiter eingesammelt und bewertet).