Programmieren bei Dr. Robert Heß TM&M1, IST1 und ET1 Anfang SS 2003 Klausur 1. Aufgabe (2 Punkte) Kodieren Sie folgende Dezimalzahlen in Binärzahlen um. Zeigen Sie den Rechenweg, die negative Zahl soll im 8 Bit Zweierkomplement dargestellt werden. 123 10-9 10 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben. dual/binär oktal (hexa-) sedezimal 10011110 2 365 8 1C3 16 3. Aufgabe (5 Punkte) Welche der folgenden Zeichenketten sind als Variablennamen in C erlaubt und welche nicht? Antworten sie mit Ja oder Nein. Wenn Nein, begründen Sie ihre Antwort. Ja Nein Begründung (Nur wenn Nein) size2 O O char O O Index-a O O 2Stufe O O Case O O Heß O O Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 1 von 6
4. Aufgabe (2 Punkte) Bestimmen Sie den Zahlenbereich der aufgeführten Datentypen. Nehmen Sie an, dass der Typ int auf Ihrem Rechner 2 Byte beansprucht. Sie können auch Formeln eintragen. Typ kleinster Wert größter Wert int unsigned char 5. Aufgabe (5 Punkte) Nehmen Sie an, folgende Variablen seien definiert worden: char c; int i=7; long li=4; float f; double d=2.2; Bestimmen Sie Typ und Wert folgender Ausdrücke: Ausdruck Typ Wert i+5l i<<2 c='b'+li!i li!=4 1?2:3 f=(long)d 10/4*d (i-li!=2)?4:5 ~li&li ++li*i++ 6. Aufgabe (2 Punkte) Nennen Sie die vier Eigenschaften von Variablen: Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 2 von 6
7. Aufgabe (7 Punkte) Betrachten Sie folgendes Programm: #include <stdio.h> void Funktion(int Zahl); int main() { Funktion(10); return 0; void Funktion(int Zahl) { if(zahl>0) { Funktion(Zahl/2); printf("%d", Zahl%2); Erstellen Sie das Struktogramm für die Funktion Funktion. Wie sieht die Ausgabe auf dem Bildschirm aus? 8. Aufgabe (5 Punkte) Erstellen Sie eine C-Funktion, die als Parameter eine ganze Zahl n vom Typ short übernimmt, und bei positiven Werten die Summe der Zahlen 1 bis n berechnet (1+2+3+... +n). Da das Ergebnis größer als der Wertebereich des Parameters werden kann, soll der Rückgabewert vom Typ long sein. Bei Zahlen kleiner oder gleich null soll der Wert null zurückgegeben werden. Der Name der Funktion ist Summe. Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 3 von 6
9. Aufgabe (7 Punkte) Das folgende Struktogramm gibt die Definition einer Funktion wieder, welche als Parameter zwei Zahlen vom Typ unsigned übernimmt und ebenfalls den Typ unsigned zurückgibt. Machen Sie sich mit der Arbeitsweise dieser Funktion vertraut. Welcher Wert wird zurückgegeben, wenn die Zahlen 8 und 12 übergeben wurden: Welcher Wert wird zurückgegeben, wenn die Zahlen 6 und 15 übergeben wurden: Geben Sie der Funktion einen sinnvollen Namen und schreiben Sie den geeigneten Code dazu. Geben Sie nur die Funktion selbst (Definition, inkl. Funktionskopf) ohne den Überbau (#include, Deklaration, main() etc.) wieder. Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 4 von 6
10. Aufgabe (4 Punkte) Definieren Sie eine Funktion in C, die für die übergebene Zahl ermittelt, ob sie sich durch zwei oder drei teilen lässt (Rückgabewert 1) oder nicht (Rückgabewert 0). int TwoOrThree(int Value) { 11. Aufgabe (2 Punkte) Nehmen wir an, es wurden folgende Variablen definiert: char* text = "Sie haben es bald geschafft!"; int list[] = { 3, 4, 2, 9, 13, 2, 1 ; Was ist der Wert folgender Ausdrücke? list[0] text[5] *text *(list+4) 12. Aufgabe (2 Punkte) Welchen Wert haben nach diesem Programmstück die Variablen x und y? double x=3.2, y=3.2; double *pd; pd = &y; x = *pd/2; *pd = 3.0/2; pd = &x; *pd /= 2; Antwort: x hat den Wert... und y hat den Wert... Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 5 von 6
13. Aufgabe (4 Punkte) Im folgenden Programmcode haben sich 8 Fehler eingeschlichen. Finden Sie diese Fehler und tragen Sie die gefundenen Fehler in die Tabelle ein. Zeile 1: /* Prim1.c: Einfaches Programm zur Berechnung von Primzahlen */ Zeile 2: include <stdio.h> Zeile 3: Zeile 4: /* Größte zu testende Zahl */ Zeile 5: #define MAX_ZAHL 100 Zeile 6: Zeile 7: int main() Zeile 8: { Zeile 9: int Proband; /* aktuelle Zahl, die geprüft werden soll */ Zeile 10: int Divisor; /* aktueller Divisor */ Zeile 11: char Primzahl; /* Marke für Primzahl */ Zeile 12: Zeile 13: /* Überschrift /* Zeile 14: printf("primzahlen zwischen 1 und %d:\n", MAX_ZAHL); Zeile 15: Zeile 16: /* Schleife für alle zu prüfenden Zahlen */ Zeile 17: for(proband=1, Proband<=MAX_ZAHL, Proband++) { Zeile 18: Zeile 19: Primzahl := 1; /* Annahme: Es ist eine Primzahl */ Zeile 20: Zeile 21: /* Schleife für alle Divisoren */ Zeile 22: Divisor = 2; Zeile 23: while(primzahl && Divisor<Proband) { Zeile 24: /* Wenn kein Rest bei Division: keine Primzahl */ Zeile 25: if(proband%divisor==0) Primzahl = 0 Zeile 26: else Divisor++; Zeile 27: Zeile 28: Zeile 29: /* Ggf. Primzahl ausgeben */ Zeile 30: if(primzahl) printf(%8d, Proband); Zeile 31: Zeile 32: printf("\n"); /* Zeilenvorschub */ Zeile 33: Zeile 34: return; Zeile 35: Zeile gefundener Fehler korrekter Code Programmieren TMM1, IST1, ET1 Anfang Sommersemester 2003 Seite 6 von 6