Technische Universität Braunschweig

Werbung
Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Programmieren I
Dr. Werner Struckmann
13. März 2017
Name:
Vorname:
Matrikelnummer:
Anrede:
Frau
Kennnummer:
Herr
Studiengang: Bachelor
Master
Fachrichtung: Informatik
Mobilität und Verkehr
Elektrotechnik
Diplom
Frühstudium
Wirtschaftsinformatik
Psychologie
Erasmus
Mathematik
Physik
Maschinenbau ( Mechatronik)
Wirtschaftsingenieurwesen ( Bauing E-Technik Maschbau)
Finanz- und Wirtschaftsmathematik
Versuch der Notenverbesserung:
IST
Sonstige:
Bitte kreuzen Sie an, falls Sie teilgenommen haben:
Programmierlabor, Legolabor.
Die Bearbeitungszeit beträgt 120 Minuten. Die Klausur besteht aus 6 Aufgaben. Sie haben
die Klausur bestanden, wenn Sie mindestens 35 von 70 möglichen Punkten erreicht haben.
Aufgabe
1
2
3
4
5
6
Σ
max. Punkte
5
8
16
11
8
22
70
Punkte
Note:
Bitte prägen Sie sich Ihre Kennnummer gut ein. Aus Datenschutzgründen wird das Klausurergebnis nur unter dieser Kennnummer bekannt gegeben. Aus den gleichen Gründen
können Ergebnisse weder telefonisch noch per E-Mail mitgeteilt werden.
Die Ergebnisse der Klausur erfahren Sie voraussichtlich ab dem 24. März 2017 auf der
Web-Seite dieser Veranstaltung. Ihre Klausur können Sie am
Mittwoch, den 12. April 2017,
von 09:00 bis 11:30 Uhr und von 13:30 bis 16:30 Uhr im Raum 251 des Informatikzentrums
einsehen.
Aufgabe 1: Bitte kreuzen Sie die wahren Aussagen an. Für die vollständigen richtigen
Antworten einer Gruppe erhalten Sie einen Punkt. Die Fragen dieser Aufgabe beziehen
sich auf Java 8.
Ausnahmebehandlung/Exception Handling:
Die catch-or-throw-Regel gilt für RuntimeExeception nicht.
Die throw-Anweisung leitet die Exception weiter.
Eine try-catch-Anweisung muss mindestens eine catch-Klausel enthalten.
Literale:
Es gilt 0x8 != 8.
5e5 ist ein Literal von Typ double.
+4_4 ist ein Literal für einen ganzzahligen primitiven Typ.
Objektorientierung:
Zwei abgeleitete Klassen können dieselbe Basisklasse besitzen.
Innerhalb einer Klasse kann eine Methode
nicht den gleichen Namen wie ein Attribut der Klasse besitzen.
Es kann Variable geben, die während ihrer Gültigkeit
auf Objekte verschiedener Typen verweisen können.
Abstrakte Klassen:
Eine abstrakte Klasse kann konkrete Methoden enthalten.
Eine abstrakte Klasse kann von mehreren Klassen erweitert werden.
Klassen, die nur konkrete Methoden enthalten,
dürfen den Modifikator abstract verwenden.
Deklarationen: Einzelne Deklarationen in der main-Methode:
Die Deklaration int i = 0.0;
führt zu einem Übersetzungsfehler.
Die Deklaration int main = ’0’;
führt zu einem Übersetzungsfehler.
Die Deklaration int j = (short) 0;
führt zu einem Übersetzungsfehler.
5 Punkte
Aufgabe 2: (Zahldarstellung in Java) Schreiben Sie die Dezimalzahl 74 als Binär-, Oktalund Hexadezimalzahl in Java. Durch welche Bitfolge wird der byte-Wert −11 in Java
gespeichert?
a) (74)10 als Binärzahl in Java:
b) (74)10 als Oktalzahl in Java:
c) (74)10 als Hexadezimalzahl in Java:
d) byte-Darstellung von −11:
8 Punkte
Aufgabe 3: (Kontrollstrukturen, Operatoren, Arrays) Welche der beiden folgenden Schleifen terminieren? Geben Sie im Falle der Terminierung an, welche Werte die Variablen
besitzen, nachdem die jeweiligen Anweisungen ausgeführt wurden.
a)
int a = 3;
int b = 1;
do {
a = a + b;
if (b == 4)
continue;
else
b++;
if ((a * b) % 3 == 1) break;
a--;
} while (a > b);
Die Schleife terminiert:
b)
int x = 5;
int y = 1;
for (int i = 1; i <
x += 4 - y;
switch (y % 4) {
case 1 : y = x
case 2 : y = x
case 3 : y = x
default : y = x
}
}
Die Schleife terminiert:
ja nein a =
b =
x =
y =
x; i++) {
+
+
-
4;
3;
2;
1;
break;
break;
ja nein Geben Sie für jeden der folgenden Ausdrücke den primitiven Typ und den Wert des Ausdrucks an. Setzen Sie vor jedem Ausdruck die Deklaration int x = 17; voraus.
c)
((4 | x ) ^ 5)
pr. Typ:
Wert:
d)
(x % 9 + ~(-1) + 2)
pr. Typ:
Wert:
e)
((x & 1) == (x >> 4))
pr. Typ:
Wert:
Es sei a durch int[] a = new int[6]; deklariert. Geben Sie den Inhalt des Felds nach
Ausführung der beiden folgenden Anweisungen an:
f)
for (int i = 5; i > -1; i--) a[i] = 3 + (i + i*2)/3;
for (int i = 1; i < 7; i++) a[i-1] = a[a[i-1] - 3] + a[i-1];
a[0] =
a[1] =
a[2] =
a[3] =
a[4] =
a[5] =
16 Punkte
Aufgabe 4: (Rekursion) Gegeben sei die folgende rekursive Methode:
static int f(int x, int y) {
if (x == 1)
return y + 1;
else if (x == y)
return f(x - 2, y);
else
return f(x % 2, f(x - 2, y + 1) + 2);
}
Welchen Wert liefert der Aufruf f(11, 8)? In welcher Reihenfolge und mit welchen Parametern wird f dabei aufgerufen? Geben Sie die Reihenfolge der Aufrufe explizit an.
Wie groß ist die maximale Rekursionstiefe, d. h. die maximale Anzahl gleichzeitig aktiver
Aufrufe?
Liefert für alle int-Werte x ≥ 0, y ≥ 0 der Aufruf f(x, y) einen int-Wert? Begründen
Sie Ihre Antwort.
11 Punkte
Lösung:
–4–
Aufgabe 5: (Programmverständnis) Gegeben seien die Methode
public static boolean f(int i) {
if (i <= 1) return false;
int s = 1;
for (int j = 2; j <= i/2; j++) {
if (i % j == 0) s += j;
}
return s == i;
}
und das Programmfragment
for (int i = 2; i <= 8; i++) {
if (f(i)) {
String t = ""+ i + "_=_" + "1";
for (int j = 2; j <= i/2; j++)
if (i%j == 0) { t = t+"_+_"+j; }
System.out.println(t);
}
}
a) Was berechnet die Methode f in Abhängigkeit vom Parameter i?
b) Wie lautet die Ausgabe des Programmfragments?
8 Punkte
Lösung:
–5–
Aufgabe 6: (Programmerstellung) Eine natürliche Zahl n > 0 heißt Nivenzahl, wenn die
Quersumme von n ein echter Teiler von n ist. Ein Beispiel für die Nivenzahlen ist 156, denn
die Quersumme von 156 ist 12 = 1 + 5 + 6 und es gilt 156 = 12 ∗ 13. Die Mathematik hat
bewiesen, dass die Zahlen 111, 222, 333, 444, 555, 666, 777, 888 und 999 Nivenzahlen sind.
Schreiben Sie ein lauffähiges Java-Programm, das für alle dreistelligen natürlichen Zahlen
prüft, ob es sich bei dieser Zahl um eine Nivenzahl handelt. Ist eine Zahl eine Nivenzahl,
so soll die Ausgabe wie folgt aussehen:
Quersumme(156) = 12
und
156 = 12 * 13
Beschreiben Sie Ihren Algorithmus. Schreiben Sie Ihren Programmcode auf die nächste
Seite. Sie dürfen eigene Hilfsmethoden schreiben und verwenden, aber weder Klassen noch
Methoden importieren. Auf diese Aufgabe erhalten Sie nur dann Punkte, wenn Sie ein
Java-Programm angeben, das erkennbar geeignet ist, die Problemstellung zu lösen.
In den 22 Punkten sind 4 Punkte für fehlerfrei compilierenden Code enthalten.
22 Punkte
Lösung:
–6–
–7–
–8–
Herunterladen