Fortgeschrittene Konzepte Unit 1 von 2 Theorie + Übungen Dauer: ~45 Min.
Ömer
Ömer sagt:

Bisher hast du immer nur Variablen gleichen Typs zusammengefasst (Arrays). Was aber wenn du eine Person speichern willst – mit Name, Alter und Note? Dafür gibt es struct! Es ist das Fundament für Klassen in anderen Sprachen. 🏛️

struct definieren struct-Variablen erstellen Mitglieder mit . abrufen typedef für bequeme Syntax Array von structs

🏛️ Was ist ein struct?

Ein struct (Struktur) fasst verschiedene Datentypen unter einem Namen zusammen – ein eigener, benutzerdefinierter Datentyp:

struct Schueler
char
name[30]
→ "Max Mustermann"
int
alter
→ 16
float
notenschnitt
→ 2.3f
char
klasse[5]
→ "3AHI"
struct_demo.cC
#include <stdio.h>
#include <string.h>

/* Struktur definieren */
typedef struct {
    char  name[30];
    int   alter;
    float schnitt;
} Schueler;   // typedef: kein 'struct' beim Verwenden nötig

void zeige_schueler(Schueler s) {
    printf("Name: %s | Alter: %d | Ø: %.1f\n",
           s.name, s.alter, s.schnitt);
}

int main() {
    Schueler s1;                  // Variable vom Typ Schueler
    strcpy(s1.name, "Oemer");
    s1.alter   = 17;
    s1.schnitt = 1.8f;

    Schueler s2 = {"Anna", 16, 2.3f}; // Kurzform

    zeige_schueler(s1);
    zeige_schueler(s2);
    return 0;
}
▶ Ausgabe
Name: Oemer | Alter: 17 | Ø: 1.8
Name: Anna | Alter: 16 | Ø: 2.3

📚 Array von structs

klasse.cC
Schueler klasse[3] = {
    {"Oemer", 17, 1.8f},
    {"Anna",  16, 2.3f},
    {"Ben",   17, 1.5f}
};
for (int i=0; i<3; i++)
    zeige_schueler(klasse[i]);

✏️ Übungen

Übung 1

struct definieren

Definiere eine Struktur Produkt mit den Feldern: Name (char[50]), Preis (float), Lagerbestand (int):

typedef struct { /* Felder hier */ } Produkt;
Übung 2 – Programm

Produkt-Verwaltung

Erstelle 3 Produkte als Array und gib alle aus. Berechne auch den Gesamtwert (Preis × Lagerbestand):

#include <stdio.h> #include <string.h> typedef struct { char name[50]; float preis; int bestand; } Produkt; void zeige_produkt(Produkt p) { printf("%-20s %.2f EUR Bestand: %d\n", p.name, p.preis, p.bestand); } int main() { Produkt lager[3] = { {"C-Buch", 29.90f, 15}, {"USB-Stick", 12.50f, 42}, {"Laptop", 899.00f, 5} }; float gesamt = 0; for (int i = 0; i < 3; i++) { zeige_produkt(lager[i]); gesamt += lager[i].preis * lager[i].bestand; } printf("Gesamtwert: %.2f EUR\n", gesamt); return 0; }
Übung 4 – Bonus

Schüler-Struct mit Notendurchschnitt

Erstelle eine Struct für Schüler mit Name, Klasse und drei Noten. Schreibe eine Funktion, die den Durchschnitt berechnet und alle Schüler nach Durchschnitt sortiert ausgibt:

#include <stdio.h> #include <string.h> typedef struct { char name[30]; char klasse[10]; float noten[3]; } Schueler; float durchschnitt(Schueler s) { return (s.noten[0] + s.noten[1] + s.noten[2]) / 3.0f; } void zeige(Schueler s) { printf("%-15s %-6s Noten: %.1f %.1f %.1f Schnitt: %.2f\n", s.name, s.klasse, s.noten[0], s.noten[1], s.noten[2], durchschnitt(s)); } int main() { Schueler klasse[] = { {"Anna Mayer", "3AHIF", {1.0f, 2.0f, 1.0f}}, {"Ben Schmidt", "3AHIF", {3.0f, 2.0f, 4.0f}}, {"Clara Huber", "3AHIF", {2.0f, 1.0f, 2.0f}} }; int n = 3; /* Bubble Sort nach Durchschnitt (aufsteigend = beste Note) */ for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - 1 - i; j++) if (durchschnitt(klasse[j]) > durchschnitt(klasse[j+1])) { Schueler tmp = klasse[j]; klasse[j] = klasse[j+1]; klasse[j+1] = tmp; } printf("Rangliste:\n"); for (int i = 0; i < n; i++) zeige(klasse[i]); return 0; }
Structs können wie normale Variablen kopiert werden (tmp = klasse[j]). Beim Sortieren tauscht man ganze Struct-Objekte – praktisch!