🏠 Zurück zur Startseite

💻 Labor 4

Arrays und Strings
Fortgeschrittene Algorithmen und Programmierung in C • HTW Berlin • WiSe 2025/26

📋 Lernziele

In diesem Labor werden Sie:

⚠️ Wichtige Hinweise

1 Array-Grundlagen

🎯 Aufgabenstellung

Schreiben Sie ein Programm, das ein int-Array mit 5 Elementen erstellt, mit Werten initialisiert und folgendes ausgibt:

  • Alle Elemente des Arrays
  • Die Summe aller Elemente
  • Den Durchschnitt (als double)
  • Das größte Element

📝 Beispielausgabe

Array: 15 22 8 31 19 Summe: 95 Durchschnitt: 19.00 Maximum: 31

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: array_stats.c

/*
 * array_stats.c
 * Grundlegende Array-Operationen: Ausgabe, Summe, Durchschnitt, Maximum
 */

#include <stdio.h>

int main()
{
    int zahlen[5] = {15, 22, 8, 31, 19};
    int summe = 0;
    int maximum = zahlen[0];

    // Array ausgeben
    printf("Array: ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", zahlen[i]);
        summe += zahlen[i];

        if (zahlen[i] > maximum)
            maximum = zahlen[i];
    }

    double durchschnitt = (double)summe / 5;

    printf("\n\nSumme: %d\n", summe);
    printf("Durchschnitt: %.2lf\n", durchschnitt);
    printf("Maximum: %d\n", maximum);

    return 0;
}

2 Benutzereingabe in Array

🎯 Aufgabenstellung

Schreiben Sie ein Programm, das:

  • Ein double-Array für 3 Preise deklariert
  • Den Benutzer auffordert, 3 Preise einzugeben
  • Die Preise in das Array speichert
  • Alle Preise formatiert ausgibt (2 Nachkommastellen)
  • Die Gesamtsumme berechnet und ausgibt

📝 Beispielausgabe

Geben Sie Preis 1 ein: 12.99 Geben Sie Preis 2 ein: 5.49 Geben Sie Preis 3 ein: 8.75 Eingegebene Preise: Preis 1: 12.99 Euro Preis 2: 5.49 Euro Preis 3: 8.75 Euro Gesamtsumme: 27.23 Euro

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: preise_eingabe.c

/*
 * preise_eingabe.c
 * Einlesen von Preisen in ein Array und formatierte Ausgabe
 */

#include <stdio.h>

int main()
{
    double preise[3];
    double summe = 0.0;

    // Preise einlesen
    for (int i = 0; i < 3; i++)
    {
        printf("Geben Sie Preis %d ein: ", i + 1);
        scanf("%lf", &preise[i]);
    }

    // Preise ausgeben
    printf("\nEingegebene Preise:\n");
    for (int i = 0; i < 3; i++)
    {
        printf("  Preis %d: %6.2lf Euro\n", i + 1, preise[i]);
        summe += preise[i];
    }

    printf("Gesamtsumme: %.2lf Euro\n", summe);

    return 0;
}

3 String-Grundlagen

🎯 Aufgabenstellung

Schreiben Sie ein Programm, das:

  • Den Benutzer nach seinem Namen fragt (max. 30 Zeichen)
  • Den Namen einliest und speichert
  • Die Länge des Namens mit strlen() ermittelt
  • Den Namen in einen zweiten String kopiert mit strcpy()
  • Beide Strings ausgibt

📝 Beispielausgabe

Geben Sie Ihren Namen ein: Maria Original: Maria Kopie: Maria Länge: 5 Zeichen

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: string_basics.c

/*
 * string_basics.c
 * Grundlegende String-Operationen mit strlen und strcpy
 */

#include <stdio.h>
#include <string.h>

int main()
{
    char name[31];
    char kopie[31];

    printf("Geben Sie Ihren Namen ein: ");
    scanf("%s", name);

    // String kopieren
    strcpy(kopie, name);

    // Länge ermitteln
    int laenge = strlen(name);

    printf("\nOriginal: %s\n", name);
    printf("Kopie: %s\n", kopie);
    printf("Länge: %d Zeichen\n", laenge);

    return 0;
}

4 String-Verkettung

🎯 Aufgabenstellung

Schreiben Sie ein Programm, das:

  • Vorname und Nachname separat einliest
  • Beide Strings zu einem vollständigen Namen verkettet
  • Einen Leerzeichenstring zwischen Vor- und Nachnamen einfügt
  • Den vollständigen Namen ausgibt

📝 Beispielausgabe

Vorname: Anna Nachname: Müller Vollständiger Name: Anna Müller

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: name_verkettung.c

/*
 * name_verkettung.c
 * String-Verkettung mit strcat()
 */

#include <stdio.h>
#include <string.h>

int main()
{
    char vorname[31];
    char nachname[31];
    char vollstaendig[61] = "";  // Leerer String

    printf("Vorname: ");
    scanf("%s", vorname);

    printf("Nachname: ");
    scanf("%s", nachname);

    // Vorname in vollstaendig kopieren
    strcpy(vollstaendig, vorname);

    // Leerzeichen anhängen
    strcat(vollstaendig, " ");

    // Nachname anhängen
    strcat(vollstaendig, nachname);

    printf("\nVollständiger Name: %s\n", vollstaendig);

    return 0;
}

5 String-Vergleich

🎯 Aufgabenstellung

Schreiben Sie ein einfaches Passwort-Programm:

  • Definieren Sie ein Passwort als konstanten String (z.B. "geheim123")
  • Fordern Sie den Benutzer auf, das Passwort einzugeben
  • Vergleichen Sie die Eingabe mit dem korrekten Passwort mittels strcmp()
  • Geben Sie "Zugriff gewährt" oder "Zugriff verweigert" aus
  • Erweitert: Geben Sie dem Benutzer 3 Versuche

📝 Beispielausgabe

Geben Sie das Passwort ein: hallo Zugriff verweigert! Geben Sie das Passwort ein: geheim123 Zugriff gewährt!

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: passwort_check.c

/*
 * passwort_check.c
 * String-Vergleich mit strcmp() - mit Bonus (3 Versuche)
 */

#include <stdio.h>
#include <string.h>

int main()
{
    char passwort[] = "geheim123";
    char eingabe[51];
    int versuche = 3;
    int erfolg = 0;

    while (versuche > 0 && !erfolg)
    {
        printf("Geben Sie das Passwort ein: ");
        scanf("%s", eingabe);

        if (strcmp(eingabe, passwort) == 0)
        {
            printf("Zugriff gewährt!\n");
            erfolg = 1;
        }
        else
        {
            versuche--;
            if (versuche > 0)
            {
                printf("Zugriff verweigert! Noch %d Versuche.\n\n", versuche);
            }
            else
            {
                printf("Zugriff verweigert! Keine Versuche mehr.\n");
            }
        }
    }

    return 0;
}

✅ Grundversion (ohne Bonus)

Ohne die while-Schleife - nur eine einzige Abfrage mit if-else.

6 Mehrere Strings (2D-Array)

🎯 Aufgabenstellung

Schreiben Sie ein Programm zur Verwaltung einer kleinen Namensliste:

  • Deklarieren Sie ein 2D-Array für 3 Namen (je max. 30 Zeichen)
  • Lesen Sie 3 Namen vom Benutzer ein
  • Geben Sie alle Namen linksbündig und rechtsbündig formatiert aus
  • Geben Sie die Länge jedes Namens aus

📝 Beispielausgabe

Name 1: Anna Name 2: Maximilian Name 3: Tom Namensliste (linksbündig): Anna (Länge: 4) Maximilian (Länge: 10) Tom (Länge: 3) Namensliste (rechtsbündig): Anna (Länge: 4) Maximilian (Länge: 10) Tom (Länge: 3)

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: namensliste.c

/*
 * namensliste.c
 * 2D-Array für mehrere Strings mit formatierter Ausgabe
 */

#include <stdio.h>
#include <string.h>

int main()
{
    char namen[3][31];

    // Namen einlesen
    for (int i = 0; i < 3; i++)
    {
        printf("Name %d: ", i + 1);
        scanf("%s", namen[i]);
    }

    // Linksbündig
    printf("\nNamensliste (linksbündig):\n");
    for (int i = 0; i < 3; i++)
    {
        printf("%-15s (Länge: %d)\n", namen[i], (int)strlen(namen[i]));
    }

    // Rechtsbündig
    printf("\nNamensliste (rechtsbündig):\n");
    for (int i = 0; i < 3; i++)
    {
        printf("%15s (Länge: %d)\n", namen[i], (int)strlen(namen[i]));
    }

    return 0;
}

7 Produktverwaltung mit Arrays

🎯 Aufgabenstellung

Erstellen Sie ein Programm zur Verwaltung von Produktdaten:

  • Verwenden Sie parallel Arrays für Produktnamen (Strings), Mengen (int) und Preise (double)
  • Speichern Sie 3 Produkte
  • Berechnen Sie für jedes Produkt: Gesamtpreis = Menge × Preis
  • Geben Sie eine formatierte Tabelle aus
  • Berechnen Sie die Rechnungssumme
  • Erweitert: Lassen Sie den Benutzer die Produktdaten eingeben (Namen, Mengen, Preise)

📝 Beispielausgabe

Nr. Produkt Menge Preis Gesamt --- -------------- ----- ------- ------- 1 Apfel 2 1.45 2.90 2 Milch 7 0.85 5.95 3 Brot 3 0.75 2.25 ------- Rechnungssumme: 11.10

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: produktverwaltung.c

/*
 * produktverwaltung.c
 * Parallele Arrays für Produktverwaltung mit Benutzereingabe (Bonus)
 */

#include <stdio.h>
#include <string.h>

int main()
{
    char produkte[3][31];
    int mengen[3];
    double preise[3];
    double rechnungsSumme = 0.0;

    // Produktdaten einlesen (BONUS)
    for (int i = 0; i < 3; i++)
    {
        printf("Produkt %d:\n", i + 1);
        printf("  Name: ");
        scanf("%s", produkte[i]);
        printf("  Menge: ");
        scanf("%d", &mengen[i]);
        printf("  Preis: ");
        scanf("%lf", &preise[i]);
        printf("\n");
    }

    // Tabellenkopf
    printf("Nr.  Produkt         Menge  Preis    Gesamt\n");
    printf("---  --------------  -----  -------  -------\n");

    // Tabellenzeilen
    for (int i = 0; i < 3; i++)
    {
        double gesamt = mengen[i] * preise[i];
        printf("%d    %-15s %5d  %7.2lf  %7.2lf\n",
               i + 1, produkte[i], mengen[i], preise[i], gesamt);
        rechnungsSumme += gesamt;
    }

    // Rechnungssumme
    printf("                                       -------\n");
    printf("Rechnungssumme:                         %7.2lf\n", rechnungsSumme);

    return 0;
}

✅ Grundversion (ohne Bonus)

Initialisieren Sie die Arrays direkt im Code:

char produkte[3][31] = {"Apfel", "Milch", "Brot"};
int mengen[3] = {2, 7, 3};
double preise[3] = {1.45, 0.85, 0.75};

8 Array umkehren (Reverse)

🎯 Aufgabenstellung

Schreiben Sie ein Programm, das:

  • Ein int-Array mit 7 Elementen deklariert und initialisiert
  • Das Array vorwärts ausgibt
  • Das Array rückwärts ausgibt
  • Die Elemente des Arrays in umgekehrter Reihenfolge im Array selbst speichert
  • Das umgekehrte Array ausgibt

📝 Beispielausgabe

Original: 10 20 30 40 50 60 70 Rückwärts: 70 60 50 40 30 20 10 Nach Umkehrung: 70 60 50 40 30 20 10

💡 Hinweise

🔒 Musterlösung
Falsches Passwort!

Dateiname: array_reverse.c

/*
 * array_reverse.c
 * Array-Elemente umkehren (in-place reverse)
 */

#include <stdio.h>

int main()
{
    int zahlen[7] = {10, 20, 30, 40, 50, 60, 70};
    int temp;

    // Original ausgeben
    printf("Original: ");
    for (int i = 0; i < 7; i++)
    {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Rückwärts ausgeben (ohne zu ändern)
    printf("Rückwärts: ");
    for (int i = 6; i >= 0; i--)
    {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    // Array tatsächlich umkehren
    for (int i = 0; i < 3; i++)
    {
        temp = zahlen[i];
        zahlen[i] = zahlen[6 - i];
        zahlen[6 - i] = temp;
    }

    // Umgekehrtes Array ausgeben
    printf("Nach Umkehrung: ");
    for (int i = 0; i < 7; i++)
    {
        printf("%d ", zahlen[i]);
    }
    printf("\n");

    return 0;
}

✅ Erklärung

Bei 7 Elementen (Indizes 0-6) tauschen wir:

  • zahlen[0] ↔ zahlen[6]
  • zahlen[1] ↔ zahlen[5]
  • zahlen[2] ↔ zahlen[4]

Das mittlere Element (Index 3) bleibt an seiner Position.