Zur Startseite

Probeklausur mit Loesungen

Grundlagen der Programmierung

Vorlesungen 1-13

Wintersemester 2025/26 | HTW Berlin

Prof. Dr. Alexandra Mikityuk

Pruefungsinformationen

Wichtig: Bitte tragen Sie auf jeder Seite Ihren Namen und Ihre Matrikelnummer ein!

Teil 1: Grundlagen & Datentypen (20 Punkte)
Aufgabe 1.1: Datentypen 8 Punkte

Welchen Datentyp wuerden Sie fuer folgende Variablen verwenden? Begruenden Sie kurz.

Variable Datentyp Begruendung
Alter einer Person
Preis eines Produkts (z.B. 19.99 EUR)
Ein einzelner Buchstabe
Ob ein Licht an oder aus ist
Loesung anzeigen/verbergen
Variable Datentyp Begruendung
Alter einer Person int Ganze Zahl, keine Nachkommastellen noetig
Preis eines Produkts float oder double Kommazahl fuer Cent-Betraege
Ein einzelner Buchstabe char Speziell fuer einzelne Zeichen
Ob ein Licht an oder aus ist int (0/1) C hat keinen bool-Typ, 0=aus, 1=an
Aufgabe 1.2: Variablen und Ausgabe 12 Punkte

Was gibt folgendes Programm aus? Schreiben Sie die exakte Ausgabe auf.

#include <stdio.h> int main() { int a = 10; int b = 3; int c = a / b; int d = a % b; printf("a / b = %d\n", c); printf("a %% b = %d\n", d); printf("a + b * 2 = %d\n", a + b * 2); return 0; }

Ausgabe:

Loesung anzeigen/verbergen
a / b = 3 a % b = 1 a + b * 2 = 16

Erklaerung:

  • 10 / 3 = 3 (Integer-Division, Rest wird abgeschnitten)
  • 10 % 3 = 1 (Modulo = Rest bei Division)
  • 10 + 3 * 2 = 10 + 6 = 16 (Punkt vor Strich!)
Teil 2: Verzweigungen (20 Punkte)
Aufgabe 2.1: If-Else Strukturen 10 Punkte

Schreiben Sie ein Programm, das eine Note (1-6) einliest und die entsprechende Bewertung ausgibt:

Loesung anzeigen/verbergen
#include <stdio.h> int main() { int note; printf("Note eingeben (1-6): "); scanf("%d", ¬e); if (note == 1 || note == 2) { printf("Sehr gut bis Gut\n"); } else if (note == 3 || note == 4) { printf("Befriedigend bis Ausreichend\n"); } else if (note == 5 || note == 6) { printf("Mangelhaft bis Ungenuegend\n"); } else { printf("Ungueltige Note\n"); } return 0; }
Aufgabe 2.2: Logische Operatoren 10 Punkte

Welchen Wert haben folgende Ausdruecke? (1 = wahr, 0 = falsch)

Gegeben: int a = 5, b = 10, c = 5;

Ausdruck Ergebnis (0 oder 1)
a == c
a != b
a > b || c == 5
a < b && b > c
!(a == b)
Loesung anzeigen/verbergen
Ausdruck Ergebnis Erklaerung
a == c 1 5 == 5 ist wahr
a != b 1 5 != 10 ist wahr
a > b || c == 5 1 5 > 10 ist falsch, ABER 5 == 5 ist wahr -> ODER ergibt wahr
a < b && b > c 1 5 < 10 ist wahr UND 10 > 5 ist wahr -> UND ergibt wahr
!(a == b) 1 5 == 10 ist falsch, NOT falsch = wahr
Teil 3: Schleifen (20 Punkte)
Aufgabe 3.1: For-Schleife 10 Punkte

Schreiben Sie ein Programm, das die Summe aller Zahlen von 1 bis n berechnet.

Beispiel: Fuer n = 5 soll ausgegeben werden: "Summe von 1 bis 5 = 15"

Loesung anzeigen/verbergen
#include <stdio.h> int main() { int n, summe = 0; printf("n eingeben: "); scanf("%d", &n); for (int i = 1; i <= n; i++) { summe = summe + i; } printf("Summe von 1 bis %d = %d\n", n, summe); return 0; }
Aufgabe 3.2: While-Schleife 10 Punkte

Schreiben Sie ein Programm mit einer while-Schleife, das die Quersumme einer Zahl berechnet.

Beispiel: Quersumme von 123 = 1 + 2 + 3 = 6

Hinweis: Verwenden Sie zahl % 10 fuer die letzte Ziffer und zahl / 10 um die letzte Ziffer zu entfernen.
Loesung anzeigen/verbergen
#include <stdio.h> int main() { int zahl, quersumme = 0; printf("Zahl eingeben: "); scanf("%d", &zahl); int original = zahl; // Original speichern fuer Ausgabe while (zahl > 0) { quersumme = quersumme + (zahl % 10); // letzte Ziffer addieren zahl = zahl / 10; // letzte Ziffer entfernen } printf("Quersumme von %d = %d\n", original, quersumme); return 0; }

Ablauf fuer zahl = 123:

  • 123 % 10 = 3, quersumme = 3, zahl = 12
  • 12 % 10 = 2, quersumme = 5, zahl = 1
  • 1 % 10 = 1, quersumme = 6, zahl = 0
  • zahl = 0 -> Schleife endet
Teil 4: Arrays & Funktionen (25 Punkte)
Aufgabe 4.1: Array-Grundlagen 10 Punkte

Was gibt folgendes Programm aus?

#include <stdio.h> int main() { int arr[5] = {10, 20, 30, 40, 50}; printf("arr[0] = %d\n", arr[0]); printf("arr[4] = %d\n", arr[4]); arr[2] = arr[0] + arr[1]; printf("arr[2] = %d\n", arr[2]); int summe = 0; for (int i = 0; i < 5; i++) { summe = summe + arr[i]; } printf("Summe = %d\n", summe); return 0; }

Ausgabe:

Loesung anzeigen/verbergen
arr[0] = 10 arr[4] = 50 arr[2] = 30 Summe = 150

Erklaerung:

  • arr[0] = 10 (erstes Element)
  • arr[4] = 50 (letztes Element, Index beginnt bei 0!)
  • arr[2] = 10 + 20 = 30 (ueberschreibt den alten Wert 30)
  • Summe = 10 + 20 + 30 + 40 + 50 = 150
Aufgabe 4.2: Funktion schreiben 15 Punkte

Schreiben Sie eine Funktion int findeMaximum(int arr[], int n), die das groesste Element in einem Array findet und zurueckgibt.

Schreiben Sie auch ein main(), das die Funktion testet.

Loesung anzeigen/verbergen
#include <stdio.h> int findeMaximum(int arr[], int n) { int max = arr[0]; // Erstes Element als Startwert for (int i = 1; i < n; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } int main() { int zahlen[] = {15, 42, 8, 99, 23, 56}; int n = 6; int maximum = findeMaximum(zahlen, n); printf("Das Maximum ist: %d\n", maximum); return 0; }

Ausgabe: Das Maximum ist: 99

Teil 5: Array-Manipulation (15 Punkte)
Aufgabe 5.1: Array umkehren (Reverse) 8 Punkte

Vervollstaendigen Sie den Code, um ein Array umzukehren (in-place, ohne zweites Array).

#include <stdio.h> int main() { int arr[5] = {1, 2, 3, 4, 5}; int n = 5; int left = 0; int right = _______; // (a) Was kommt hier hin? while (left < right) { // (b) Schreiben Sie hier den Tausch-Code left++; right--; } // Ausgabe for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; }

(a) Was kommt bei right = _______?

(b) Schreiben Sie den Tausch-Code:

Loesung anzeigen/verbergen

(a) right = n - 1; (letzter Index im Array)

(b) Tausch-Code:

int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp;

Vollstaendiger Code:

#include <stdio.h> int main() { int arr[5] = {1, 2, 3, 4, 5}; int n = 5; int left = 0; int right = n - 1; while (left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } // Ausgabe: 5 4 3 2 1 for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; }
Aufgabe 5.2: Palindrom pruefen 7 Punkte

Ist folgendes Array ein Palindrom? Begruenden Sie!

int arr[] = {1, 2, 3, 2, 1};

Beschreiben Sie in eigenen Worten, wie man mit der Zwei-Zeiger-Technik prueft, ob ein Array ein Palindrom ist:

Loesung anzeigen/verbergen

Antwort: Ja, {1, 2, 3, 2, 1} ist ein Palindrom.

Begruendung: Das Array liest sich von vorne und hinten gleich:

  • arr[0] = 1 == arr[4] = 1 ✓
  • arr[1] = 2 == arr[3] = 2 ✓
  • arr[2] = 3 (Mitte, muss nicht verglichen werden)

Zwei-Zeiger-Technik:

  1. Setze einen Zeiger (left) auf den Anfang (Index 0)
  2. Setze einen Zeiger (right) auf das Ende (Index n-1)
  3. Vergleiche arr[left] mit arr[right]
  4. Wenn ungleich: Kein Palindrom!
  5. Wenn gleich: left++, right--, weitermachen
  6. Wenn left >= right: Es ist ein Palindrom!

Gesamtpunktzahl: _____ / 100 Punkte
Viel Erfolg!
Diese Probeklausur deckt den Stoff der Vorlesungen 1-13 ab: Datentypen, Variablen, Operatoren, Verzweigungen (if/else), Schleifen (for/while), Arrays, Funktionen, und Array-Manipulation (Kopieren, Umkehren, Palindrom).