MINT üben

Programmieren mit C & C++

Zehn Grundaufgaben zum ganzen Kapitel — wer sie sicher löst, hat die ersten Punkte der Arbeit schon in der Tasche.

Dein Fortschritt:
0 / 0 Aufgaben
1

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.

A1
Wer meldet den Fehler?
AFB I

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.

C · Programm a
#include <stdio.h>
#include "werte.h"

int main(void) {
    printf("Start\n");
    return 0;
}
C · Programm b
#include <stdio.h>

int main(void) {
    printf("Start\n");
    retrun 0;
}
C · Programm c
#include <stdio.h>

int mian(void) {
    printf("Start\n");
    return 0;
}

Ordne jedem Programm die Nummer der Station zu, die den Fehler meldet.

Drei Stationen: Der Präprozessor bearbeitet die #-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

A2
Division und printf
AFB I
C
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.

Ganzzahldivision: Sind beide Operanden 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.

Ausgabe
3
2
[    3.40]
A3
Eine Zählschleife verfolgen
AFB I
C
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-Schleife: for (Start; Bedingung; Schritt): Erst wird die Bedingung geprüft, dann der Rumpf ausgeführt, danach der Schritt i += 2.
Lösung anzeigen
Durchlaufis danach
122
246
3612
4820
51030

Danach ist i = 12, die Bedingung 12 <= 10 ist falsch. → 5 Durchläufe, Ausgabe 30