Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren Datentypen für ganzzahlige Werte in C? b) Was versteht man unter expliziter bzw. impliziter Typumwandlung? Nennen Sie jeweils ein Beispiel. Aufgabe 2: Quickies: Operatoren a) Geben Sie die natürliche Abarbeitungsfolge der folgenden Ausdrücke durch entsprechende Klammerung an. j < m && n < m m + n!p x * 5 5 && m / n j <= 10 && x >= 5 && m b) Erläutern Sie den Unterschied zwischen dem Pre- und Postinkrement- Operator. S. 1 / 6
Aufgabe 3: Kontrollstrukturen: Schleifen Geben Sei folgender Algorithmusschritt: Die Variable i wird auf 10 gesetzt SOLANGE i größer als 0 ist FÜHRE AUS Drucke den Wert i aus i wird dekrementiert ENDE SOLANGE Drucke Los geht s aus Übersetzen Sie diesen Algorithmusschritt dreimal in C- Code. 1. Verwenden Sie eine while- Schleife 2. Verwenden Sie eine do-while- Schleife 3. Verwenden Sie eine for- Schleife Zusatz- Aufgabe 4: Kontrollstrukturen: Fallunterscheidung Schreiben Sie ein C- Programm, das prüft, ob eine eingegebene Uhrzeit (d.h. Stunde, Minute und Sekunde) korrekt ist. (Optional: Schreiben Sie dafür Testfunktionen wie iststundekorrekt(...) etc.) Hinweis: Überlegen Sie sich, welche Werte für Stunde sowie Minute und Sekunde zulässig sind. Aufgabe 5: Maximum aus drei Zahlen a) Entwickeln Sie eine C- Funktion max3_1(x, y, z), die das Maximum aus drei übergebenen Zahlen bestimmt und zurückliefert. b) Entwickeln Sie eine C- Funktion max3_2(x, y, z), die das Maximum aus drei übergebenen Zahlen bestimmt und zurückliefert. Verwenden Sie dabei folgende C- Funktion: int max(int x, int y) { int ergebnis; if ( x > y ) { ergebnis = x; else { ergebnis = y; return ergebnis; c) Schreiben Sie ein C- Hauptprogramm, das mit Hilfe von max3_1(x, y, z) und max3_2(x, y, z) das Maximum aus 0, - 5 und 14 bestimmt und am Bildschirm ausgibt. S. 2 / 6
Aufgabe 6: Modularisierung durch Funktionen Modularisieren Sie das angegebene C- Programm, in dem Sie die Berechnung des Mittelwertes als C- Funktion implementieren. Diese neue C- Funktion soll lediglich die Berechnung (mit Eingabe der einzelnen Zahlen), aber selbst keine Ausgabe- Operationen enthalten. Bitte geben Sie das vollständige C- Programm mit der neuen C- Funktion und der adaptierten main- Funktion an. #include <stdio.h> // Ermittlung und Ausgabe des // Mittelwertes einer Zahlenfolge void main(void) { int zahl, summe, i; printf("mittelwert\n"); summe = 0; i = 1; while (i <= 4) { printf("zahl = "); scanf("%d", &zahl); summe = summe + zahl; i = i+1; printf("mittelwert = %d \n", summe/4); Aufgabe 7: Aufruf von Funktionen / Call- by- Value Geben Sie die Ausgabe des folgenden Programms an: #include <stdio.h> int fun(int x, int y) { int res; x = x + y; y++; res = x - y; printf("fun: x = %d, y = %d, res = %d\n", x, y, res); return res; void main(void) { int a = 5, b = 2, ergebnis; printf("a = %d, b = %d\n", a, b); ergebnis = fun(a, b); printf("a = %d, b = %d, ergebnis = %d\n", a, b, ergebnis); S. 3 / 6
Aufgabe 8: Funktionen im Zusammenspiel "Reihenentwicklung" a) Entwickeln Sie einen Algorithmus mit Namen natlog1, der bei seinem Aufruf als Parameter ein reelles z mit 0 < z <= 2 übernimmt, den Wert des natürlichen Logarithmus' mit der übernommenen Genauigkeit epsilon berechnet und zurückliefert. Zur Berechnung des natürlichen Logarithmus soll die nachfolgend aufgeführte Reihenddarstellung verwendet werden: 2 ln 1 + x = ( 1) +,-./ +34 für - 1 < x 1 +01 b) Übersetzen Sie den Algorithmus in eine C- Funktion natlog1(). c) Schreiben sie eine C- Funktion natlog2(), die bei ihrem Aufruf als Parameter ein reelles z mit z > 0 sowie ein reelles epsilon (Genauigkeit) übernimmt, den Wert des natürlichen Logarithmus' mit der übernommenen Genauigkeit epsilon berechnet und zurückliefert. Zur Berechnung des natürlichen Logarithmus wurde die nachfolgend aufgeführte Reihenddarstellung verwendet: ln x = 2 5.,71 5+01 5+01,01 +34 für x > 0 d) Entwickeln Sie eine Hauptfunktion in C (main()) : die den reellen Wert für z einliest und die Genauigkeit epsilon auf 10-6 setzt, die die Funktionen natlog1() und natlog2() mit dem eingelesenen Wert für z aufruft und die die berechneten Werte auf dem Bildschirm ausgibt. Nicht ausgelastet? Modifizieren Sie das C- Programm so, dass das C- Programm testet, welche der beiden Reihen für ln(2) schneller konvergiert. Zusatz- Aufgabe 9: Umrechnung kw nach PS Schreiben Sie ein C- Programm, das folgende Tabellen ausgibt: S. 4 / 6
Die Umrechnung von kw nach PS erfolgt nach der Formel: 1 kw = 1.35962173 PS und soll in einer Funktion kw2ps erfolgen. Ändern Sie das Programm so, dass die Werte in Fünfer- Abständen angezeigt werden, die Ausgabe mit 4 Nachkommastellen erfolgt und Start- und Endwert variabel sind, also eingegeben werden können. Erstellen Sie jeweils eine Version des Programms mit for-, while- bzw. do-while- Schleife. Zusatz- Aufgabe 10: Umrechnungen Schreiben Sie C- Funktionen, die jeweils folgende Umrechnungen durchführen können: a) von Grad Celsius nach Grad Fahrenheit: F = ( C * 9/5) + 32 b) von Kilometer nach Meilen: 1 mile = 1,609 km c) von Zentimeter nach Zoll: 1 Zoll = 25,4 mm Schreiben Sie eine Benutzeroberfläche zur Auswahl der Umrechnung. Ein mögliches Auswahlmenü könnte wie folgt aussehen: Umrechnungen: [1] PS -> KW [2] C -> F [3] km -> Meilen [4] cm -> Zoll [5] Abbruch -------------------- Ihre Auswahl? Nicht ausgelastet? Erweitern Sie Ihr Programm um Umrechnungsfunktionen in die jeweils andere Richtung, d.h. Von PS nach kw S. 5 / 6
von Grad Fahrenheit nach Grad Celsius von Meilen nach Kilometer von Zoll nach Zentimeter S. 6 / 6