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