Aufgabenblock — AFB I
Zehn Standardaufgaben zum Reproduzieren: Ausgaben ablesen, Werte bestimmen, Begriffe zuordnen. Das sind die sicheren Punkte in jeder Arbeit zu C und C++ — zu jeder Aufgabe gibt es eine Erinnerung und die Lösung zum Aufklappen.
Beim Übersetzen mit gcc prog.c -o prog läuft der Quelltext durch drei Stationen: 1 Präprozessor, 2 Compiler, 3 Linker. Jedes der drei Programme enthält genau einen Fehler.
#include <stdio.h> #include "werte.h" int main(void) { printf("Start\n"); return 0; }
#include <stdio.h> int main(void) { printf("Start\n"); retrun 0; }
#include <stdio.h> int mian(void) { printf("Start\n"); return 0; }
Ordne jedem Programm die Nummer der Station zu, die den Fehler meldet.
#-Zeilen, der Compiler prüft die Anweisungen (Syntax, Namen), der Linker setzt am Ende alle Teile zusammen und sucht dabei auch main.Lösung anzeigen
a) Die Datei werte.h gibt es nicht — schon der Präprozessor bricht ab: fatal error: werte.h: No such file or directory → Station 1
b) retrun ist ein Tippfehler; der Compiler kennt den Namen nicht: error: 'retrun' undeclared → Station 2
c) Syntaktisch ist alles korrekt — es gibt nur keine Funktion main. Das merkt erst der Linker: undefined reference to `main' → Station 3
int a = 17, b = 5; printf("%d\n", a / b); printf("%d\n", a % b); printf("[%8.2f]\n", (double) a / b);
Gib die drei Ausgabezeilen an. Trage bei der dritten Zeile ein, wie viele Leerzeichen zwischen [ und der ersten Ziffer stehen.
int, schneidet / die Nachkommastellen ab; % liefert den Rest. %8.2f heißt: mindestens 8 Zeichen breit, 2 Nachkommastellen, rechtsbündig.Lösung anzeigen
17 = 3 · 5 + 2, also 17 / 5 = 3 und 17 % 5 = 2.
Der Cast macht a zur Kommazahl: 17,0 / 5 = 3,4. Mit zwei Nachkommastellen ist 3.40 4 Zeichen lang; bis zur Breite 8 fehlen 4 Leerzeichen.
3 2 [ 3.40]
int s = 0; for (int i = 2; i <= 10; i += 2) { s += i; } printf("%d\n", s);
Stelle den Ablauf in einer Tabelle mit den Spalten i und s dar. Wie oft läuft der Schleifenrumpf, und welcher Wert wird ausgegeben?
for (Start; Bedingung; Schritt): Erst wird die Bedingung geprüft, dann der Rumpf ausgeführt, danach der Schritt i += 2.Lösung anzeigen
| Durchlauf | i | s danach |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 4 | 6 |
| 3 | 6 | 12 |
| 4 | 8 | 20 |
| 5 | 10 | 30 |
Danach ist i = 12, die Bedingung 12 <= 10 ist falsch. → 5 Durchläufe, Ausgabe 30
