Zurück zur Startseite

Labor 4

Arrays, Strings, Funktionen & Algorithmen
Grundlagen der Programmierung in C - HTW Berlin - WiSe 2025/26
Dauer: ca. 180 Minuten

Lernziele

In diesem Labor werden Sie:

Wichtige Konzepte

Teil 1: Arrays & Strings (ca. 60 Min)

1 Array anlegen & ausgeben

Aufgabenstellung

Legen Sie ein Array mit 5 Noten an und geben Sie alle Werte mit einer for-Schleife aus.

Anforderungen

Beispielausgabe

Note 1: 2 Note 2: 1 Note 3: 3 Note 4: 2 Note 5: 4
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int noten[5] = {2, 1, 3, 2, 4};

    for (int i = 0; i < 5; i++) {
        printf("Note %d: %d\n", i + 1, noten[i]);
    }

    return 0;
}

2 Notendurchschnitt berechnen

Aufgabenstellung

Berechnen Sie die Summe und den Durchschnitt der Noten aus dem Array.

Das Akkumulator-Muster

Eine Variable sammelt schrittweise alle Werte auf:

int summe = 0; // Startwert ist 0 for (i = 0; i < 5; i++) { summe += noten[i]; // jedes Element dazu addieren } double schnitt = (double)summe / 5; // (double) fuer Nachkommastellen!

Ohne (double) wuerde C eine Ganzzahl-Division machen und die Nachkommastellen verlieren.

Anforderungen

Beispielausgabe

Summe: 12 Durchschnitt: 2.40
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int noten[5] = {2, 1, 3, 2, 4};
    int summe = 0;

    for (int i = 0; i < 5; i++) {
        summe += noten[i];
    }

    double schnitt = (double)summe / 5;

    printf("Summe: %d\n", summe);
    printf("Durchschnitt: %.2f\n", schnitt);

    return 0;
}

3 Begrüßung mit Strings

Aufgabenstellung

Lesen Sie einen Namen ein und bauen Sie damit eine Begrüßung zusammen.

Strings sind char-Arrays

  • Ein String ist ein char-Array, das mit '\0' endet.
  • scanf("%s", name) liest ein Wort ein - ohne &!
  • strcat(ziel, quelle) haengt Strings aneinander (braucht #include <string.h>).

Anforderungen

Beispielausgabe (Eingabe Anna)

Wie heisst du? Anna Hallo, Anna!
Musterlösung Falsches Passwort!
#include <stdio.h>
#include <string.h>

int main() {
    char gruss[50] = "Hallo, ";
    char name[30];

    printf("Wie heisst du? ");
    scanf("%s", name);

    strcat(gruss, name);
    strcat(gruss, "!");

    printf("%s\n", gruss);

    return 0;
}

4 String-Länge & Vergleich

Aufgabenstellung

Bestimmen Sie die Länge zweier Wörter und prüfen Sie, ob sie gleich sind.

strlen und strcmp

  • strlen(s) gibt die Länge eines Strings zurück (ohne das '\0').
  • strcmp(a, b) vergleicht den Inhalt: Rückgabe 0 bedeutet gleich.
  • Verwenden Sie NIEMALS == zum Vergleichen von Strings!

Anforderungen

Beispielausgabe

Laenge wort1: 5 Laenge wort2: 5 Die Woerter sind verschieden.
Musterlösung Falsches Passwort!
#include <stdio.h>
#include <string.h>

int main() {
    char wort1[20] = "Apfel";
    char wort2[20] = "Birne";

    printf("Laenge wort1: %d\n", (int)strlen(wort1));
    printf("Laenge wort2: %d\n", (int)strlen(wort2));

    if (strcmp(wort1, wort2) == 0) {
        printf("Die Woerter sind gleich.\n");
    } else {
        printf("Die Woerter sind verschieden.\n");
    }

    return 0;
}

Teil 2: Funktionen (ca. 60 Min)

5 Funktion mit Rückgabewert

Aufgabenstellung

Schreiben Sie eine Funktion quadrat, die das Quadrat einer Zahl zurückgibt.

Aufbau einer Funktion

Eine Funktion besteht aus Rückgabetyp, Name, Parametern und Rumpf.

int quadrat(int x); // Prototyp: steht UEBER main // ... main ... int quadrat(int x) { // Definition: steht UNTER main return x * x; }

Anforderungen

Beispielausgabe

1 hoch 2 = 1 2 hoch 2 = 4 3 hoch 2 = 9 4 hoch 2 = 16 5 hoch 2 = 25
Musterlösung Falsches Passwort!
#include <stdio.h>

int quadrat(int x);

int main() {
    for (int i = 1; i <= 5; i++) {
        printf("%d hoch 2 = %d\n", i, quadrat(i));
    }
    return 0;
}

int quadrat(int x) {
    return x * x;
}

6 void-Funktion mit Parameter

Aufgabenstellung

Schreiben Sie eine void-Funktion, die ein Dreieck aus Sternen druckt.

void-Funktionen

  • Eine void-Funktion gibt nichts zurück, sie tut etwas (z.B. ausgeben).
  • Parameter steuern das Verhalten - hier die Höhe des Dreiecks.

Anforderungen

Beispielausgabe

* * * * * * * * * *
Musterlösung Falsches Passwort!
#include <stdio.h>

void drucke_dreieck(int hoehe);

int main() {
    drucke_dreieck(4);
    return 0;
}

void drucke_dreieck(int hoehe) {
    for (int i = 1; i <= hoehe; i++) {
        for (int j = 0; j < i; j++) {
            printf("* ");
        }
        printf("\n");
    }
}

7 Array an Funktion übergeben

Aufgabenstellung

Übergeben Sie ein Array an Funktionen, die es ausgeben und seine Summe berechnen.

Arrays als Parameter

  • Ein Array übergibt man als int arr[] zusammen mit der Größe n.
  • Die Funktion kann das Array durchlaufen und z.B. die Summe zurückgeben.

Anforderungen

Beispielausgabe

10 20 30 40 50 Summe: 150
Musterlösung Falsches Passwort!
#include <stdio.h>

void zeige_array(int arr[], int n);
int summe_array(int arr[], int n);

int main() {
    int zahlen[5] = {10, 20, 30, 40, 50};

    zeige_array(zahlen, 5);
    int s = summe_array(zahlen, 5);
    printf("Summe: %d\n", s);

    return 0;
}

void zeige_array(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int summe_array(int arr[], int n) {
    int summe = 0;
    for (int i = 0; i < n; i++) {
        summe += arr[i];
    }
    return summe;
}

Teil 3: Algorithmen — Tauschen & Extremwerte (ca. 60 Min)

8 Werte tauschen (Swap)

Aufgabenstellung

Schreiben Sie ein Programm, das die Werte zweier int-Variablen tauscht.

Der Swap-Algorithmus

Um zwei Werte zu tauschen, brauchen wir eine temporäre Variable:

// FALSCH (Wert geht verloren!): a = b; // a wird ueberschrieben! b = a; // beide haben jetzt den gleichen Wert // RICHTIG (mit temp): temp = a; // Schritt 1: a zwischenspeichern a = b; // Schritt 2: b nach a b = temp; // Schritt 3: alten a-Wert nach b

Anforderungen

Beispielausgabe

Vor dem Tausch: a = 5, b = 10 Nach dem Tausch: a = 10, b = 5
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;

    printf("Vor dem Tausch: a = %d, b = %d\n", a, b);

    int temp = a;  // Schritt 1: a speichern
    a = b;          // Schritt 2: b nach a
    b = temp;       // Schritt 3: altes a nach b

    printf("Nach dem Tausch: a = %d, b = %d\n", a, b);

    return 0;
}

9 Array-Elemente tauschen

Aufgabenstellung

Erstellen Sie ein Array mit 5 Zahlen und tauschen Sie das erste und letzte Element.

Anforderungen

Beispielausgabe

Vorher: 10 20 30 40 50 Nachher: 50 20 30 40 10
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[5] = {10, 20, 30, 40, 50};

    printf("Vorher: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    int temp = zahlen[0];
    zahlen[0] = zahlen[4];
    zahlen[4] = temp;

    printf("Nachher: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    return 0;
}

10 Maximum & Minimum finden

Aufgabenstellung

Finden Sie das Maximum und das Minimum in einem Array - in EINEM Durchlauf.

Maximum und Minimum gleichzeitig

  • Das erste Element ist der Startwert für max UND min.
  • Ab i = 1 vergleichen wir jedes Element mit beiden.
  • So findet man beide Werte in einem einzigen Durchlauf.

Anforderungen

Beispielausgabe

Maximum: 89 Minimum: 12
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int zahlen[6] = {34, 78, 12, 89, 45, 23};
    int max = zahlen[0];
    int min = zahlen[0];

    for (int i = 1; i < 6; i++) {
        if (zahlen[i] > max) {
            max = zahlen[i];
        }
        if (zahlen[i] < min) {
            min = zahlen[i];
        }
    }

    printf("Maximum: %d\n", max);
    printf("Minimum: %d\n", min);

    return 0;
}

11 Position des Maximums + switch/case

Aufgabenstellung

Finden Sie die Position der schlechtesten (größten) Note und geben Sie mit switch/case den passenden Notentext aus.

Index merken & switch/case

  • Statt des Wertes merkt man sich den Index (maxPos).
  • Mit switch/case kann man je nach Wert verschiedene Texte ausgeben.
  • Jedes case braucht ein break!

Anforderungen

Beispielausgabe

Schlechteste Note: 5 an Position 4 mangelhaft
Musterlösung Falsches Passwort!
#include <stdio.h>

int main() {
    int noten[5] = {3, 1, 4, 2, 5};
    int maxPos = 0;

    for (int i = 1; i < 5; i++) {
        if (noten[i] > noten[maxPos]) {
            maxPos = i;
        }
    }

    printf("Schlechteste Note: %d an Position %d\n", noten[maxPos], maxPos);

    switch (noten[maxPos]) {
        case 1: printf("sehr gut\n"); break;
        case 2: printf("gut\n"); break;
        case 3: printf("befriedigend\n"); break;
        case 4: printf("ausreichend\n"); break;
        case 5: printf("mangelhaft\n"); break;
        default: printf("ungueltige Note\n");
    }

    return 0;
}

Zusammenfassung: Die wichtigsten Muster

Muster Kernidee Beispiel
Array-Durchlauf jedes Element besuchen for i=0..n-1 / arr[i]
Durchschnitt Summe durch Anzahl summe += arr[i]; (double)summe/n
String-Länge Zeichen zählen (ohne '\0') strlen(s)
String-Vergleich Inhalt vergleichen strcmp(a, b) == 0
Funktion mit Rückgabe liefert ein Ergebnis return wert;
void-Funktion tut etwas, kein return void f(...) { ... }
Array an Funktion Array + Größe übergeben int arr[], int n
Swap tauschen über Zwischenspeicher temp=a; a=b; b=temp;
Maximum größten Wert finden start arr[0]; if arr[i]>max
Minimum kleinsten Wert finden start arr[0]; if arr[i]
Position Index statt Wert merken maxPos = i;

🔑 Passwörter für die Musterlösungen

Die Passwörter stehen unten — frei zugänglich. Bitte fair spielen: erst selbst probieren, dann mit der Musterlösung vergleichen. Eine Lösung, die ihr nur abgeschrieben habt, hilft euch in der Klausur nicht.

AufgabeThemaPasswort
Aufgabe 1Array anlegen & ausgebenarr101
Aufgabe 2Notendurchschnitt berechnenavg202
Aufgabe 3Begrüßung mit Stringsstr303
Aufgabe 4String-Länge & Vergleichcmp404
Aufgabe 5Funktion mit Rückgabewertfkt505
Aufgabe 6void-Funktion mit Parameterdreieck606
Aufgabe 7Array an Funktion übergebenarrfn707
Aufgabe 8Werte tauschen (Swap)swap808
Aufgabe 9Array-Elemente tauschenswap909
Aufgabe 10Maximum & Minimum findenminmax10
Aufgabe 11Position des Maximums + switch/casemaxpos11