22.02.2017 Programmieren in C: Übungsblatt 2 Aufgabe 1: Felder I Schreiben Sie ein Programm, das ein Feld mit 100 Elementen initialisiert. Jedes Element soll den Wert seines Index enthalten. Geben Sie anschließend die letzten 10 Elemente des Feldes auf dem Bildschirm aus. Aufgabe 2: Felder II Ändern Sie das obige Programm ab. Nach der Ausgabe der initialisierten Werte soll das Programm die Werte in ein neues Feld kopieren und zu jedem Wert 10 addieren. Anschließend sollen die neuen Werte wieder auf dem Bildschirm ausgegeben werden. Aufgabe 3: Felder III Schreiben Sie ein Programm, das fünf Integer-Zahlen von der Tastatur einliest und am Ende sowohl den kleinsten als auch den größten eingegebenen Zahlenwert wieder ausgibt mit dem Satz: Sie haben Zahlenwerte zwischen XXX und YYYY eingegeben. Aufgabe 4: Felder IV Schreiben Sie ein Programm, das die Anzahl aller Primzahlen im Bereich von 1 und 100 ermittelt. In einem zweiten Schritt sollen die Werte aller Primzahlen addiert werden. Die Ergebnisse sollen mit dem folgenden Satz auf dem Bildschirm ausgegeben werden: Im Zahlenbereich zwischen 1 und 100 existieren XXX Primzahlen. Die Summe dieser Zahlen beträgt YYY. Aufgabe 5: Strings I Schreiben Sie ein Programm, das zunächst zwei Vornamen und anschließend 2 Altersangaben von der Tastatur einliest. Anschließend sollen diese Informationen wieder folgendermaßen auf dem Bildschirm ausgegeben werden: Die beiden Personen mit den Vornamen xxx und yyy sind zusammen zzz Jahre alt. Aufgabe 6: Strings II Schreiben Sie ein Programm, das die Anzahl der Vokale in dem folgenden Satz zählt: “programmieren ist ganz einfach“. Aufgabe 7: Funktionen I Das folgende Programm soll die Fläche eines Rechtecks berechnen. Arbeitet das Programm korrekt ? Welche Änderungen sind für eine einwandfreie Arbeitsweise erforderlich ? #include <stdio.h> int main() { printf("%d \n",Flaeche(6.5,5.5)); return 0; } double Flaeche(double laenge, double hoehe) { double ergebnis; ergebnis=laenge*breite; return ergebnis; } Aufgabe 8: Funktionen II a) Schreiben Sie eine Funktion, die zwei Integer-Zahlen als Argument übernimmt. Die Funktion soll die erste Zahl durch die zweite Zahl dividieren (Ganzzahldivison) und das Ergebnis zurück geben. b) Fügen Sie diese Funktion in ein vollständiges Programm ein, d.h. erstellen Sie die main-Funktion Was passiert in Ihrem Programm, wenn die zweite Zahl Null ist? Fangen Sie diese Situation mit einer if-Bedingung ab. Aufgabe 9: Funktionen III Schreiben Sie ein Programm, das fünf Integer-Werte vom Benutzer abfragt und daraus mit einer Funktion den Mittelwert berechnet und ausgibt. Aufgabe 10: Funktionen IV (Zusatzaufgabe) Bilden Sie einen Taschenrechner nach: Es werden zwei Zahlen von der Tastatur eingelesen. Die Art der Berechnung (Addition, Subtraktion, Division oder Multiplikation) wird abgefragt. Fangen Sie in Ihrem Programm die Division durch Null ab. Das Ergebnis der Berechnung soll anschließend auf dem Bildschirm ausgegeben werden. In der Hauptfunktion wird die Eingabe-Funktion solange aufgerufen, bis der Benutzer die Abfrage durch die Eingabe eines bestimmten Wertes abbricht. Aufgabe 11: rekursive Funktionen I Schreiben Sie ein Programm, das die Fakultät der Zahl n berechnet. Formel für die Berechnung: n! = 1 * 2 * ... (n - 1) * n Beispiel: 5! = 1 * 2 * 3 * 4 * 5 = 120 Testen Sie das Programm mit 4 verschiedenen Zahlen: m=5,10,15 und 20 a) ohne Verwendung einer rekursiven Funktion b) mit einem rekursiven Funktionsaufruf Aufgabe 12: rekursive Funktionen II Schreiben Sie ein Programm mit einer rekursiven Funktion, das die Potenz der Zahl 3 zu einem angegebenen Exponenten berechnet. Geben Sie die Ergebnisse von 37 und 310 aus. Aufgabe 13: rekursive Funktionen III (Zusatzaufgabe) Berechnen Sie die Fibonacci-Zahlen rekursiv. Die Folge ist rekursiv definiert durch: f0 = 0 f1 = 1 fn = fn − 1 + fn − 2 Das bedeutet in Worten: Für die beiden ersten Zahlen werden die Werte Null und Eins vorgegeben. Jede weitere Zahl ergibt sich aus der Summe ihrer beiden Vorgänger. Daraus ergibt sich der Anfang der Folge zu 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Die Rekursionsgleichung für die Berechnung lautet: f(n+1)=f(n+1)+ f(n). Aufgabe 14: (Zusatzaufgabe) Der folgende Code arbeitet nicht immer korrekt. Wenn Sie bei der Eingabe einen negativen Wert und 0 eingeben, will Ihnen das Programm vorgaukeln, dass beide Werte gleich waren. Ändern Sie das Programm, damit dieses auch auf eine Eingabe von 0 entsprechend reagiert und korrekt auswertet: #include<stdio.h> int vergleich (int wert1, int wert2); int main () { int wert1, wert2, cmp; printf("Bitte den ersten Wert eingeben \n"); scanf ("%d", &wert1); printf("Bitte den zweiten Wert eingeben \n"); scanf ("%d", &wert2); cmp= vergleich(wert1,wert2); if (cmp !=0) { printf("%d ist der hoehere Wert \n", cmp); } else { printf("Beide Werte sind gleich \n"); } return 0; } int vergleich (int wert1, int wert2) { if (wert1 > wert2) return wert1; else if (wert1 < wert2) return wert2; return 0; } Aufgabe 15: (Zusatzaufgabe) Schreiben Sie das Programm aus Aufgabe 11 so um, dass die Fakultät ohne Rekursion berechnet wird.