Übungsaufgaben
Zehn Übungen zum Klicken, Zuordnen, Nachverfolgen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du nicht weiterkommst, helfen dir die gestuften Tipps.
In C bekommt jede Variable einen festen Typ. Ordne jeden Wert dem Datentyp zu, in dem er ohne Verlust gespeichert wird.
'7' ist keine Zahl, sondern ein Zeichen — die einfachen Anführungszeichen machen es zum char. Und 100.0 ist wegen des Punkts ein double, obwohl der Wert „glatt“ ist. Negative Zahlen passen problemlos in int.int punkte = 85; double preis = 2.5; char note = 'B';
Gib zu jedem Aufruf die Ausgabe an, indem du beide verbindest.
%f gebe die Zahl „so wie sie ist“ aus. Ohne Genauigkeitsangabe schreibt printf aber immer sechs Nachkommastellen. Das doppelte %% ist nötig, weil ein einzelnes % eine neue Formatangabe einleiten würde.%d und %c — die sind eindeutig.%f ohne Zusatz zeigt 6 Nachkommastellen, %.1f genau eine.Fünf Behauptungen über Variablen und Ausgabe. Nenne jeweils, ob sie stimmt.
int steckt, verliert still die Nachkommastellen.char). Doppelte: ein Text.int a = 17, b = 5; double x = 17;
Berechne den Wert jedes Ausdrucks. Schreib Kommazahlen mit Punkt oder Komma.
| Ausdruck | Wert |
|---|---|
a / b | |
a % b | |
x / b | |
(double) a / b | |
(double) (a / b) | |
a / 2 * 2 | |
b % a |
(double) (a / b): Die Klammer wird zuerst ausgewertet — als Ganzzahldivision mit Ergebnis 3. Der cast macht daraus nur noch 3.0. Bei (double) a / b wird dagegen a vor der Division umgewandelt, also 3.4. Und a / 2 * 2 ist nicht 17, sondern 8 · 2 = 16. b % a ist 5: 5 geteilt durch 17 ergibt 0 Rest 5.int tag = 12; double temp = 7.456; char einheit = 'C'; int feuchte = 64;
Tag 12: 7.46 C Luftfeuchte: 64%
Bestimme die Formatangaben so, dass genau diese Ausgabe entsteht.
printf("Tag : ", tag, temp, einheit); printf("Luftfeuchte: %d\n", feuchte);
%f für die Temperatur — das ergibt 7.456000. Erst %.2f rundet auf zwei Stellen: 7.46. Beim Prozentzeichen hilft kein Backslash: \% ist keine gültige Escape-Sequenz, gcc warnt. Richtig ist das doppelte %%.tag ist int, temp ist double, einheit ist char.printf("[%9.3f]\n", -2.5);
Die eckigen Klammern zeigen, wo die Ausgabe beginnt und endet. Ermittle, wie viele Leerzeichen zwischen [ und der Zahl stehen.
-2.500 — das sind 6 Zeichen, Minuszeichen und Punkt mitgezählt. Die Feldbreite 9 füllt printf von links mit 9 − 6 = 3 Leerzeichen auf: [ -2.500]. Wer das Minus oder den Punkt vergisst, kommt auf 4 oder 5.%.3f sie formatiert.Beim Vokabeltrainer werden 23 Punkte aus 4 Runden gemittelt.
int summe = 23; int anzahl = 4; double m1 = summe / anzahl; double m2 = (double) summe / anzahl; int rest = summe % anzahl; printf("%.2f %.2f %d %.2f\n", m1, m2, rest, anzahl * m2);
Wende die Rechenregeln von C auf den Ausschnitt an und gib die Werte Schritt für Schritt an.
-
Wert von
m1 -
Wert von
m2 -
Wert von
rest -
Wert von
anzahl * m2
m1: Obwohl die Variable ein double ist, rechnet C summe / anzahl mit zwei int-Werten — das Ergebnis 5 wird erst danach in 5.0 umgewandelt. Entscheidend ist der Typ der Operanden, nicht der Typ der Zielvariablen. Mit dem cast stimmt der Mittelwert: 5.75 · 4 = 23./?Die Mensa-Kasse soll ausgeben: Summe: 3.60, Rabatt: 10%, E und eine Kopfzeile mit Tabulator. Untersuche den Code — drei Zeilen sind fehlerhaft.
int * double wird das int automatisch umgewandelt, das Produkt ist 3.6. Gefährlich an den drei Fehlern: gcc gibt nur Warnungen aus und erzeugt trotzdem ein Programm — mit falscher Ausgabe. Deshalb immer mit -Wall übersetzen.printf-Zeile die Formatangabe mit dem Typ der Variablen.% im Text.Hier treffen Datentypen auf die Übersetzungsstationen aus 2.1.1. Beurteile die Aussagen und markiere alle, die zutreffen.
int x = 2.9; ist erlaubt — gcc warnt mit -Wall nicht einmal. Eine nicht deklarierte Variable meldet schon der Compiler (undeclared), denn er prüft jeden Namen in deiner Datei. Der Präprozessor kümmert sich nur um #-Zeilen, und 7 / 2 wäre ohnehin 3.char fasst genau ein Zeichen.int a = 9, b = 4;
Vergleiche die Werte der sechs Ausdrücke und sortiere sie aufsteigend — der kleinste Wert steht oben.
b / a ist 0 (4 : 9 ergibt 0 Rest 4), und a / b * b ist 2 · 4 = 8, weil der Rest schon bei der Division verloren geht. Erst mit 1.0 bzw. (double) wird mit Nachkommastellen gerechnet: 2.25 und 9. Reihenfolge: 0, 1, 2, 2.25, 8, 9.double beteiligt ist, bleiben die Nachkommastellen erhalten — vorher nicht.