Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte ---------------------------------------------------------------------------- 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens 5 Fehler direkt im Quelltext: @include void func(char *s, int n): #define N 20; int main() { char string[]; int i, return; for(i = 0, i < N; i++) { return = func(string, i) printf("%3d - %s\n", i, string); return(0); } ---------------------------------------------------------------------------- 2. Aufgabe (5 Punkte) Wann können Sie bei Selektionen/Entscheidungen if - else if - else if - else einsetzen und wann switch - case - case - default ? ---------------------------------------------------------------------------- 3. Aufgabe (10 Punkte) Die Funktion strupcpy() kopiert den String s2 auf den String s1 Dabei werden mit dem Makro TOUPP Kleinbuchstaben zu Grossbuchstaben konvertiert. Ist die Funktion korrekt implementiert? Was ist die Ursache des Fehlers? Korrigieren Sie den Code bzw. erstellen Sie eine korrekte Version der Funktion strupcpy(). /* CPP-Makro zur Konvertierung von Klein- nach Grossbuchstaben */ #define TOUPP(c) ((c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c) /* String s2 auf s1 kopieren, dabei Klein- in Grossbuchstaben konvertieren */ void strupcpy(char *s1, char *s2) { while(*s2) *s1++ = TOUPP(*s2++); *s1 = '\0'; } ---------------------------------------------------------------------------- 4. Aufgabe (5 Punkte) Welchen Wert hat die Variable x nach den folgenden Zuweisungen? Schreiben Sie den Wert mit 2 Nachkommastellen direkt hinter die jeweilige Zuweisung. double x; int i = 3, j = 12; x = i / j; x = (double) i / j; x = (double) (i / j); x = i / (double) j; x = (double) i / (double) j; ---------------------------------------------------------------------------- 5. Aufgabe (5 Punkte) In einer Funktion func() soll die Anzahl der Aufrufe der Funktion mit der Variablen count zur späteren Auswertung mitgezählt werden. Tragen Sie im folgenden Codefragment die Definition der Variablen und den zum Zählen notwendigen Code ein. Wie kann die Sichtbarkeit von count auf das Modul beschränkt werden? static int zaehler = 0; void func() { zaehler++; } ---------------------------------------------------------------------------- 6. Aufgabe (15 Punkte) Für ein Anwendungsprogramm sollen Sie einen Datentyp entwerfen, das die Daten von Firmenkunden modelliert. Jeder Kunde ist mit einem Namen, einem Vornamen, einer Mailadresse, einer eindeutigen Kundennummer und einem Zeiger auf die Bestellhistorie (Datentyp: struct _hist *) gespeichert. a) Modellieren Sie einen passenden Datentyp für die Kundendaten. (5 Punkte) b) Schreiben Sie eine Funktion search(), die ein unsortiertes Feld mit n Elementen des Kundendatentyps nach der Kundennummer durchsucht und den Index der gefundenen Kundendaten im Feld aller Kundendaten zurückliefert. (5 Punkte) c) Wieviele Suchvorgänge (= Schleifendurchläufe) sind im ungünstigsten Fall erforderlich, bis die Daten des gesuchten Kunden aufgefunden werden? Wie kann diese Suche erheblich beschleunigt werden? (5 Punkte) ---------------------------------------------------------------------------- 7. Aufgabe (15 Punkte) In einem Programmprojekt verwenden Sie für die Daten eine einfach verkettete Liste, wie sie auszugsweise im folgenden definiert ist: /* Datentyp für Liste */ typedef struct _list { int val1; /* Datenwert 1 */ ... /* weitere Datenwerte */ int valn; /* Datenwert n */ struct _list *next; /* Zeiger auf nächstes Listenelement */ } list_t, *list_p; list_p root; /* Root/Kopf der Liste */ a) Schreiben Sie eine Funktion count(), in der die Liste von der Root aus iterativ durchlaufen wird und die Anzahl der Elemente in der Liste gezählt und zurückgegeben wird (5 Punkte). b) Lässt sich die Zählfunktion sinnvoll auch rekursiv programmieren? Was sind in diesem Fall die Vorteile der Iteration und die Nachteile der Rekursion? (5 Punkte) c) Programmieren Sie die Zählfunktion als rekursive Funktion. (5 Punkte) ----------------------------------------------------------------------------