Programmieren in C

Arbeitsblatt 1
Datentypen und Ein- / Ausgabe

Dieses Arbeitsblatt leitet Sie durch die ersten Erfahrungen mit der Programmiersprache C. Als Lernziel sollen Sie sich das Konzept der Datentypen vergegenwärtigen und üben, wie Sie die Funktionen printf und scanf verwenden können. Lesen Sie dazu bitte die Kapitel 3, 4 und 5 im Skript Programmieren in C.

Multiple Choice-Frage Mit diesem Symbol gekennzeichnete Aufgaben sind Multiple-Choice-Fragen. Bearbeiten Sie diese in der Brad-Umgebung. Diese Aufgaben fließen in die Gesamtwertung des Praktikums ein.
Programmieraufgabe in Brad Mit diesem Symbol gekennzeichnete Aufgaben sind Programmieraufgaben. Bearbeiten Sie diese in Brad. Sobald Brad 1/1 Punkte anzeigt, überträgt es Ihre Lösung automatisch per Internet an den Lehrstuhl. Brad kann aber nicht eindeutig feststellen, ob eine Lösung richtig ist. Das müssen Sie entscheiden. Deshalb können Sie mehrere Lösungen zu einer Aufgabe einreichen; wir werten nur die beste. Bitte prüfen Sie in Brad am Ende jedes Arbeitsblattes, ob all Ihre Lösungen tatsächlich übertragen werden konnten! Diese Aufgaben fließen in die Gesamtwertung des Praktikums ein.

Aufgabe 101
Grundlagen zu Zeichenketten und Steuerzeichen

Mit dieser Aufgabe sollen Sie üben, Text exakt auszugeben. Dabei stellen Sie auch Sonderzeichen mit Hilfe von Steuerzeichen (auch Escape-Sequenzen genannt) dar. Betrachten Sie dazu insbesondere die Beispiele im unten angegebenen Kapitel des Skripts.

  1. Multiple Choice-Frage Was ist ein Steuerzeichen?

    Mausgeste des Programmierers
    C-Befehl zum Bewegen des Mauszeigers
    Hinweis für den Benutzer
    Sonderzeichen in einem C-String

  2. Multiple Choice-Frage Mit welchem Zeichen beginnen Steuerzeichen in C?

    \
    #
    /
    &

  3. Multiple Choice-Frage Mit welchem Steuerzeichen können Sie einen Zeilenumbruch erzeugen?

    \\
    \n
    \t
    %n

  4. Multiple Choice-Frage Mit welchem Steuerzeichen können Sie ein Anführungszeichen (") darstellen?

    \a
    \"\
    \n
    \"

  5. Multiple Choice-Frage Mit welchem Steuerzeichen können Sie einen Backslash (\) ausgeben?

    \b
    \\
    \t
    \n

  6. Programmieraufgabe in Brad Der unten stehende Text soll auf dem Bildschirm angezeigt werden. Achten Sie darauf, dass die Ausgabe exakt Zeichen für Zeichen mit der Vorgabe übereinstimmt.

    "Wir programmieren in 'C' (ANSI)."
    "  a[0] = 1; b = 2; x = 3 * a[0] + b"
    "Sie sagte: "Ich mag keine Hunde!""
    "Der Slash ("/") und der Backslash ("\") werden manchmal verwechselt"
    

    Die äußersten Anführungszeichen in jeder Zeile sind kein Teil der Ausgabe, sondern die Begrenzung des auszugebenden Textes. Geben Sie am Ende jeder Zeile auch einen Zeilenumbruch aus.

  7. Fügen Sie nun gezielt falsche Zeichen ein (auch an verschiedenen Stellen Leerzeichen), damit Sie sehen, welche Meldungen Brad in einem solchen Fall erzeugt.

Icon für C-Quellcode-Datei

Aufgabe 102
Grundlagen zu printf

Lernen Sie in dieser Aufgabe kennen, wie Sie Zahlen und Text mit der Funktion printf am Bildschirm ausgeben können. Dabei können Sie in der Formatbeschreibung (auch Formatstring genannt) beeinflussen, wie printf die Ausgabe darstellen soll. Verwendet Sie in dieser Aufgabe nur Konstanten, keine Variablen. Das folgende kleine Beispielprogramm zeigt dazu eine typische Verwendung von printf. Betrachten Sie auch die Beispiele im unten angegebenen Kapitel!

1  #include <stdio.h>
2
3  int main()
4  {
5    printf("Hallo!\n");
6    printf("Ich heiße Klaus. Und wie ein auserwählter ");
7    printf("Kreis weiterer besonderer Personen habe auch ");
8    printf("ich am %02i.%02i. Namenstag.\n", 6, 12);
9  }
  1. Multiple Choice-Frage Wie lautet der Platzhalter für eine ganze Zahl (z.B. 1) im Formatstring von printf?

    %g
    %z
    %i
    %f

  2. Multiple Choice-Frage Wie lautet der Platzhalter für eine Gleitkommazahl (z.B. 10,2) im Formatstring von printf? (Beachten Sie bitte, dass C einen Punkt als Dezimaltrennzeichen erwartet.)

    %lf
    %c
    %d
    %s

  3. Multiple Choice-Frage Wie lautet der Platzhalter für ein Zeichen (z.B. a) im Formatstring von printf?

    %g
    %i
    %c
    %lf

  4. Programmieraufgabe in Brad Schreiben Sie ein Programm, dass die unten stehende Ausgabe erzeugt. Dabei sollen Sie den Ausgabewert als Konstante durch einen Platzhalter in der Formatbeschreibung einbinden (z.B. printf("%.1lf\n", 1.0); oder Codezeile 8 im Beispiel oben). Lösen Sie die Aufgabe also mit Konstanten, aber ohne Variablen und benutzen Sie Platzhalter in der Formatbeschreibung.

    "42"
    "14.21"
    "A"
    

    Wieder sind die äußersten Anführungszeichen in jeder Zeile kein Teil der Ausgabe, sondern die Begrenzung des auszugebenden Textes. Geben Sie also keine Leerzeichen am Anfang und am Ende jeder Zeile aus, aber einen Zeilenumbruch am Ende jeder Zeile.

Icon für C-Quellcode-Datei

Aufgabe 103
Grundlagen zu Datentypen und Variablen

Sehen Sie in dieser Aufgabe, wie Sie Variablen Werte zuweisen können. Jede Variable speichert dabei den Wert eines bestimmten Datentyps. Sie können dann den Inhalt einer Variablen genauso ausgeben, wie eine Konstante in Aufgabe 102.

  1. Multiple Choice-FrageWelche Art von Information kann eine Variable vom Typ double aufnehmen?

    Zwei Zahlen
    Eine komplexe Zahl
    Einze Ganzzahl
    Eine Gleitkommazahl

  2. Multiple Choice-FrageWelche Art von Information kann eine Variable vom Typ char aufnehmen?

    Einen Zeiger
    Eine Gleitkommazahl
    Ein Zeichen
    Eine Zeichenkette

  3. Multiple Choice-FrageWelche Art von Information kann eine Variable vom Typ int aufnehmen?

    Eine Ganzzahl
    Eine Gleitkommazahl
    Einen internationalen Landescode
    Ein Integral

  4. Multiple Choice-FrageC ordnet auch einem konstanten Wert (Literal) einen Datentyp zu. Von welchem Datentyp ist das Literal -2.01?

    int
    double
    char
    float

  5. Multiple Choice-FrageVon welchem Datentyp ist das Literal -2000?
    Die Antwort steht nicht im Skript. Sie ist aber eindeutig im C-Standard festgelegt. Suchen Sie im Internet. Bitte markieren Sie die korrekte Antwort.

    char
    int
    double
    short

  6. Programmieraufgabe in Brad Schreiben Sie nun Ihren Code von Aufgabe 102 so um, dass Sie jeden Wert nicht direkt ausgeben. Stattdessen legen Sie zuerst für alle drei Daten je eine eigene Variable mit einem passenden Datentyp an und weisen ihnen den entsprechenden Wert zu. Geben Sie anschließend die Variablen mit printf aus. (Beachten Sie dabei, dass in C alle Variablen am Anfang des Programms angelegt (definiert) werden müssen.) Benutzen Sie für diese Aufgabe die Datentypen char, double und int.

Icon für C-Quellcode-Datei

Aufgabe 104
Grundlagen zu scanf

Ein Programm gibt aber üblicherweise nicht nur Text aus, sondern fragt auch Zahlen, Zeichen und Wörter vom Benutzer ab. Diese Aufgabe erledigt die Funktion scanf in C. Vergegenwärtigen Sie sich in dieser Aufgabe den grundlegenden Umgang mit scanf.

  1. Multiple Choice-Fragescanf speichert den vom Benutzer eingelesenen Wert in einer Variablen. Welches Zeichen muss vor dieser Variablen stehen (im Unterschied zu printf)?

    \
    *
    &
    /

  2. Multiple Choice-FrageWerte welchen Typs kann die Zeile scanf("%i", &i); vom Benutzer einlesen?

    char
    int
    double
    float

  3. Multiple Choice-Frage Werte welchen Typs kann die Zeile scanf(" %c", &c); vom Benutzer einlesen?

    char
    int
    string
    double

  4. Multiple Choice-Frage Werte welchen Typs kann die Zeile scanf("%lf", &d); vom Benutzer einlesen?

    char
    float
    int
    double

  5. Programmieraufgabe in Brad In dieser Teilaufgabe schreiben Sie nun ein einfaches Programm, das das typische Zusammenspiel zwischen Ein- und Ausgabe zeigt. Ihr Programm soll eine Gleitkommazahl vom Benutzer einlesen und als Nächstes wieder ausgeben. Der Quellcode ist soweit fertig; es fehlt lediglich noch eine scanf-Anweisung. Bitte ergänzen Sie das Programm geeignet.

    15  #include <stdio.h>
    16  
    17  
    18  int main()
    19  {
    20    double zahl = 0.0;
    21    printf("Zahl: ");
    22  
    23    /* Fügen Sie hier Ihre scanf-Anweisung ein. */
    24  
    25  
    26    printf("Sie haben %.2lf eingegeben.\n", zahl);
    27  }
    
  6. Multiple Choice-FrageWas bedeutet der Platzhalter %.2lf in der letzten Zeile der vorherigen Teilaufgabe?

    Ausgabe von zwei Punkten
    Ausgabe der Zahl mit zwei Nachkommastellen
    Ausgabe der Zahl in zweistelliger Form
    Ausgabe der Zahl mit zwei Vorkommastellen

Icon für C-Quellcode-Datei

Aufgabe 105
Kugeloberfläche und -volumen berechnen

Das gegebene Programm berechnet die Oberfläche einer Kugel.

23  #include <stdio.h>
24
25
26  int main()
27  {
28    const double PI = 3.14159;  /* Kreiskonstante pi */
29    double r = 0.0;             /* Radius der Kugel */
30    double A = 0.0;             /* Oberfläche der Kugel */
31
32    /* Radius vom Benutzer einlesen */
33    printf("Kugelradius: ");
34    scanf("%lf", &r);
35
36    /* Berechnungen durchführen */
37    A = 4.0 * PI * r * r;
38
39    /* Ausgabe des Ergebnisses */
40    printf("Radius: %.2lf\n", r);
41    printf("Oberflaeche: %.2lf\n", A);
42  }
  1. Arbeiten Sie bitte als Erstes obigen Code durch und versuchen Sie ihn zu verstehen. Prägen Sie sich auch seine Struktur und seine wesentlichen Merkmale ein. Kompilieren Sie dazu das gegebene Programm und vergegenwärtigen Sie sich seine Funktion durch mehrmaliges Ausprobieren mit verschiedenen Zahlen.

  2. Programmieraufgabe in Brad Ihr Programm soll nun zusätzlich zur Oberfläche auch noch das Volumen der Kugel berechnen. Die mathematische Formel hierfür lautet V = 4/3 π r3. (Benutzen Sie r*r*r für r3.) Zur Ausgabe wird der Text

    "Volumen: "

    gefolgt vom Wert des Volumens (wieder mit genau zwei Nachkommastellen) in einer eigenen Zeile dargestellt. Fügen Sie diese Berechnung in den gegebenen Quellcode ein. Beachten Sie dazu bitte auch die Ausgaben des Musterlösungsprogramms. Sie müssen diese identisch nachbilden (Zeichen für Zeichen)!

  3. Erhöhen Sie nun schrittweise die Anzahl der Nachkommastellen in allen drei Ausgaben und beachten Sie dabei, wie printf immer mathematisch richtig rundet. Ab wievielen Nachkommastellen tritt das erste Mal bei einer der drei Ausgaben ein Fehler auf? Benutzen Sie dazu verschiedene Radiuseingaben. (Der Fehler wird durch die begrenzte Rechengenauigkeit des Typs double verursacht.)

Icon für C-Quellcode-Datei

Aufgabe 106
Fehler suchen

Der folgende Code enthält vier typische Fehler. Nur einen kann bereits der Compiler finden, die verbleibenden drei sind für den Compiler dagegen unsichtbar. (Selbst erfahrene Programmierer schreiben fehlerhaften Code. Deswegen ist es wichtig, das systematische Suchen von Programmierfehlern zu üben.)

19  #include <stdio.h>
20
21
22  int main()
23  {
24    int i
25    printf("Bitte geben Sie eine ganze Zahl ein: ");
26    scanf("%lf", i);
27    printf("Die eingegebene Zahl war %i.\n", &i);
28  }
  1. Multiple Choice-Frage Welche Art von Fehlern kann der C-Compiler erkennen?

    Alle Tippfehler
    Alle Syntaxfehler
    Alle logischen Fehler
    Alle Fehler in der Aufgabenstellung

  2. Multiple Choice-Frage Welche Art von Fehlern können dagegen nur Sie als Programmierer erkennen?

    Syntaxfehler
    Logische (inhaltliche) Fehler

  3. Programmieraufgabe in Brad Korrigieren Sie den Code. Vergleichen Sie dazu das Verhalten des fehlerhaften Programms (106c_angabe.c) mit der korrekten Musterlösung (106c_loesung). Ihre Ausgabe muss identisch mit der Ausgabe dieser Referenz Sein!

Icon für C-Quellcode-Datei

Aufgabe 107
Umwandeln von Groß- in Kleinschreibung

Ihr Programm macht aus einem Großbuchstaben einen Kleinbuchstaben.

  1. Multiple Choice-Frage Wieviel Speicher in Bit belegt eine Variable vom Typ char?

    8
    10
    16
    20

  2. Multiple Choice-Frage Was beschreibt der ASCII-Zeichensatz?

    Die maximale Menge an Zeichen, die jeder Computer darstellen kann
    Die Zuordnung zwischen Bitmuster und Zahlenwert
    Die Zuordnung zwischen Bitmuster und darzustellendem Zeichen

  3. Multiple Choice-Frage Welche Bitfolge ist darin dem Zeichen A zugeordnet?

    00000000
    01000001
    01010101
    11111111

  4. Multiple Choice-Frage Welche Hexadezimalzahl ergibt sich, wenn man diese Bitfolge als Dualzahl interpretiert?

    0x00
    0x01
    0x41
    0xFF

  5. Multiple Choice-Frage Welcher Dezimalzahl entspricht diese Bitfolge, wenn man sie als Dualzahl interpretiert?

    0
    1
    65
    100

  6. Programmieraufgabe in Brad Schreiben Sie nun ein Programm, das einen Großbuchstaben in einen Kleinbuchstaben umwandelt. Fragen Sie dazu mit der Aufforderung

    "Bitte geben Sie einen Grossbuchstaben ein: "

    ein Zeichen vom Benutzer ab. Sie müssen nicht prüfen, ob es tatsächlich ein Großbuchstabe ist. Übersetzen Sie diesen Großbuchstaben dann in einen Kleinbuchstaben. Den Kleinbuchstaben geben Sie schließlich in einer eigenen Zeile aus.

Hinweis: Eine Tabelle mit allen ASCII-Werten (ASCII-Tabelle) finden Sie bei www.asciitable.com.

Icon für C-Quellcode-Datei

Bitte prüfen Sie am Ende jedes Arbeitsblattes in Brad, ob all Ihre Lösungen tatsächlich übertragen werden konnten!