Aufgabe 1: Lokale Variable

Was gibt das folgende Programm aus?

#include <stdio.h>

int main(void) {
    int x = 5;
    printf("%d\n", x);
    return 0;
}
Musterlösung: Lokale Variable
5
Begründung:
x ist eine lokale Variable in main und wird direkt ausgegeben.

Aufgabe 2: Globale und lokale Variable

Welche Werte werden ausgegeben?

#include <stdio.h>

int x = 23;

int main(void) {
    printf("%d\n", x);
    int x = 8;
    printf("%d\n", x);
    return 0;
}
Musterlösung: Globale und lokale Variable
23
8

Begründung:
Vor der lokalen Deklaration wird die globale Variable verwendet. Danach überdeckt die lokale Variable die globale.

Aufgabe 3: Block-Scope

Welche Ausgabe entsteht?

#include <stdio.h>

int main(void) {
    int a = 5;

    if (1) {
        int a = 10;
        printf("%d\n", a);
    }

    printf("%d\n", a);
    return 0;
}
Musterlösung: Block-Scope
10
5

Begründung:
Die Variable a im if-Block ist nur dort gültig und überdeckt die äußere Variable.

Aufgabe 4: Variable nur im Block sichtbar

Ist dieses Programm korrekt? Begründe.

#include <stdio.h>

int main(void) {
    if (1) {
        int x = 7;
    }
    printf("%d\n", x);
    return 0;
}
Musterlösung: Variable nur im Block sichtbar

Nicht korrekt – Compilerfehler

Begründung:
x ist nur im if-Block gültig und außerhalb nicht sichtbar.


Aufgabe 5: Funktions-Scope

Was wird ausgegeben?

#include <stdio.h>

int x = 2;

void test(void) {
    printf("%d\n", x);
}

int main(void) {
    int x = 5;
    test();
    return 0;
}
Musterlösung: Funktions-Scope
2

Begründung:
test() hat keine lokale Variable x und greift deshalb auf die globale Variable zu.

Aufgabe 6: Verschachtelte Blöcke

Bestimme die Ausgabe.

#include <stdio.h>

int main(void) {
    int x = 1;

    {
        int x = 2;
        {
            int x = 3;
            printf("%d\n", x);
        }
        printf("%d\n", x);
    }

    printf("%d\n", x);
    return 0;
}
Musterlösung: Verschachtelte Blöcke
3
2
1

Begründung:
Jeder Block hat seine eigene Variable x, die jeweils die äußeren überdeckt.

Aufgabe 7: Gleicher Name in Funktion und Block

Was gibt das Programm aus?

#include <stdio.h>

int value = 100;

void print(void) {
    printf("%d\n", value);
}

int main(void) {
    int value = 50;

    if (1) {
        int value = 25;
        print();
    }

    return 0;
}
Musterlösung: Gleicher Name in Funktion und Block
100

Begründung:
print() greift immer auf die globale Variable value zu, unabhängig von lokalen Variablen in main.

Aufgabe 8: Mehrere Scopes kombiniert

Welche Ausgabe entsteht?

#include <stdio.h>

int x = 1;

void test(void) {
    int x = 2;
    printf("%d\n", x);
}

int main(void) {
    printf("%d\n", x);

    if (1) {
        int x = 3;
        printf("%d\n", x);
        test();
    }

    printf("%d\n", x);
    return 0;
}
Musterlösung: Mehrere Scopes kombiniert
1
3
2
1

Begründung:
- main zuerst: globale x
- if-Block: blocklokales x
- test: lokale Variable der Funktion
- zurück in main: wieder globale x

Aufgabe 9: Globale Variable, Funktionsaufruf, Blocküberdeckung

Welche Ausgabe erzeugt das folgende Programm?

#include <stdio.h>

int x = 10;

void change(void) {
    printf("%d\n", x);
}

int main(void) {
    printf("%d\n", x);

    int x = 5;
    printf("%d\n", x);

    if (1) {
        int x = 20;
        printf("%d\n", x);
        change();
    }

    printf("%d\n", x);
    change();

    return 0;
}
Musterlösung: Globale Variable, Funktionsaufruf, Blocküberdeckung
10
5
20
10
5
10

Begründung:
- Erste Ausgabe: globale x
- Danach lokale x in main
- Blocklokales x im if
- change() greift immer auf die globale Variable zu
- Nach dem Block gilt wieder das x aus main

Aufgabe 10: Mehrere Funktionen, gleichnamige Variablen

Bestimme die vollständige Ausgabe.

#include <stdio.h>

int value = 1;

void f1(void) {
    printf("%d\n", value);
}

void f2(void) {
    int value = 2;
    printf("%d\n", value);
    f1();
}

int main(void) {
    int value = 3;

    printf("%d\n", value);
    f1();
    f2();

    return 0;
}
Musterlösung: Mehrere Funktionen, gleichnamige Variablen
3
1
2
1

Begründung:
- main: lokale Variable value = 3
- f1: keine lokale Variable → globale value = 1
- f2: eigene lokale Variable value = 2
- Aufruf von f1 aus f2: erneut globale Variable

Nach oben scrollen