¨Ubungspaket 12 Der Datentyp char

Werbung
Übungspaket 12
Der Datentyp char
Übungsziele:
1.
2.
3.
4.
Umgang mit dem Datentyp char,
Deklarationen von char-Variablen,
char-Konstanten
und char-Rechenoperationen.
Skript:
Kapitel: 29 bis 31 sowie 24, 25 und 27
Semester:
Wintersemester 2016/17
Betreuer:
Kevin, Matthias, Thomas und Ralf
Synopsis:
In diesem Übungspaket gibt es einiges zum Thema Zeichen. Die Struktur der Aufgaben ähnelt sehr den vorherigen. Neben der eigentlichen
Zeichenverarbeitung ist die Umwandlung von Werten des Datentyps
char in Werte des Datentyps int und umgekehrt Teil dieses Übungspaketes.
Teil I: Stoffwiederholung
Aufgabe 1: Notation von Zeichenkonstanten
In Vorlesung und Skript haben wir gesehen, dass in der Programmiersprache C Zeichen in
drei verschiedenen Formen angeben können. Vervollständige folgende Tabelle:
C-Notation
Zeichen
Großbuchstabe A
Semikolon
Ziffer 3
Nullbyte
............
....................................
..............
....................
............
....................................
..............
....................
............
....................................
..............
....................
............
....................................
..............
....................
............
....................................
..............
....................
Aufgabe 2: Ein- und Ausgabe
Erläuter anhand von zwei Beispielen, wie Zeichen ein und ausgelesen werden können?
Format:
Eingabe:
Ausgabe:
Aufgabe 3: Zeichen und deren ASCII-Werte
Schreibe ein kleines Testprogramm, das die Zeichen ’A’ bis ’Z’ nebst ihrer zugehörigen
ASCII Werte in tabellarischer Form ausgibt. Frage: Muss man bei der Aufgabe die konkrete
ASCII-Kodierung der einzelnen Zeichen selber in der ASCII-Tabelle nachschlagen oder
kann das der Compiler dies erledigen?
12-1
Wintersemester 2016/17, Einführung in die Praktische Informatik
Teil II: Quiz
Aufgabe 1: Datentyp char vs. Datentyp int
Der Datentyp char gehört zu den Ganzzahldatentypen, da die einzelnen Zeichen einzeln
aufgeführt werden können. Aber dennoch gibt es einige Unterschiede zum Datentyp int.
Diese Unterschiede betreffen in erster Linie die Zahl der verwendeten Bytes im Arbeitsspeicher und damit die Zahl der verfügbaren Bits und dem daraus resultierenden Wertebereich.
Ergänze folgende Tabelle:
Datentyp
int
char
# der Bytes
# der Bits
Wertenbereich
...................
................
.....................................................
...................
................
.....................................................
Aufgabe 2: Ausdrücke
Welche Werte erhalten die Variablen char c und int i durch die angegebenen Ausdrücke?
Ausdruck
c
c
c
c
=
=
=
=
’a’
’m’
’a’
’m’
+
+
-
1
1
4
’a’ + ’A’
Resultat
Ausdruck
c
c
c
c
c
c
i
i
=
=
=
=
......
......
......
......
=
=
=
=
’n’
’P’
’z’
’9’
Resultat
-
’z’ + ’Z’
’A’ + ’a’ + 1
’a’
’0’
c
c
i
i
=
=
=
=
......
......
......
......
Aufgabe 3: Datentypen
Im Zusammenhang mit Variablen und Werten vom Typ char gibt es immer wieder Fragen bezüglich des resultierenden Datentyps. In den folgenden Ausdrücken gilt folgende
Variablendefinition: char c und int i
Ausdruck
c
’a’
’\101’
Datentyp
..............
..............
..............
Ausdruck
c + 1
c - ’0’
c + i
Datentyp
..............
..............
..............
Hinweis: Die Anweisung
printf("%d\", Ausdruck)
gibt einen Hinweis auf den
resultierenden Typ. Ausdruck
kann eine Variable, ein
Ausdruck oder ein Typ sein.
Einführung in die Praktische Informatik, Wintersemester 2016/17
12-2
Teil III: Fehlersuche
Aufgabe 1: Summenberechnung mit kleinen Fehlern
Das folgende Programm soll die Summe der Zeichen ’a’ bis ’z’, ’A’ bis ’Z’ und ’0’
bis ’9’ bestimmen. Leider sind dem Programmierer wieder einmal ein paar kleine Fehler
unterlaufen. Finde die 14 Fehler und korrigiere sie:
1 # include ’ stdio . h ’
2
3 int main ( int argc , char ** argv )
4
{
5
char c ,
6
int s .
7
for ( s = ’a ’ , c = ’b ’; c < ’z ’; c = c + 1 )
8
s = c;
9
for ( c = ’A ’; c >= ’Z "; c =
+ 1 )
10
s = s + c;
11
for ( c
"9 ’; c > ’0 ’ , c = c + 1 )
12
s = s + c;
13
printf ( " summe = % d \ n ’, s ) ;
14
]
12-3
Wintersemester 2016/17, Einführung in die Praktische Informatik
Teil IV: Anwendungen
Aufgabe 1: Umwandlung von Ziffern in Zahlen
Ein echter Klassiker: Schreibe ein kleines Programm, das eine einzelne Ziffer, also die
Zeichen von ’0’ bis ’9’, in ihren entsprechenden Zahlenwerte, also ints von 0 bis 9,
umwandelt. Das folgende Programmschnipsel zeigt, wie ihr es nicht machen sollt . . .
1 # include < stdio .h >
2
3 int main ( int argc , char
4
{
5
char zeichen ;
6
int zahl ;
7
zeichen = ’5 ’;
8
switch ( zeichen )
9
{
10
case ’0 ’: zahl
11
case ’1 ’: zahl
12
case ’2 ’: zahl
13
case ’3 ’: zahl
14
case ’4 ’: zahl
15
case ’5 ’: zahl
16
case ’6 ’: zahl
17
case ’7 ’: zahl
18
case ’8 ’: zahl
19
case ’9 ’: zahl
20
}
21
printf ( " Zeichen =
22
}
** argv )
=
=
=
=
=
=
=
=
=
=
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
break ;
break ;
break ;
break ;
break ;
break ;
break ;
break ;
break ;
break ;
’% c ’ Zahl = % d \ n " , zeichen , zahl ) ;
Eine derartige Umwandlung geht mit einer einfachen Anweisung. Überlege zunächst, in
welchem Zusammenhang die ASCII-Zeichen und deren Kodierung zueinander stehen. Formuliere und erkläre die entsprechende C-Anweisung, und schreibe ein entsprechendes Testprogramm:
Einführung in die Praktische Informatik, Wintersemester 2016/17
12-4
Testprogramm zur einfachen Wandlung von Ziffern in Zahlenwerte:
Aufgabe 2: Klassifizierung von Zeichen: <ctype.h>
Die Include-Datei <ctype.h> stellt eine Reihe von nützlichen Makros zur Klassifizierung
von Zeichen zur Verfügung. Nenne mindestens sechs von ihnen:
Bedeutung
Makroname
Bedeutung
Makroname
..........................
..................
..........................
..................
..........................
..................
..........................
..................
..........................
..................
..........................
..................
Aufgabe 3: Wandeln von hexadezimalen Ziffern
1. Aufgabenstellung
Erweiter das Programm aus Aufgabe 1 dieses Teils so, dass es auch hexadezimale
Ziffern, ’A’ bis ’F’ bzw. ’a’ bis ’f’ korrekt wandelt.
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle
12-5
Wintersemester 2016/17, Einführung in die Praktische Informatik
3. Testdaten
Alle Ziffern von ’0’ bis ’9’, ’A’ bis ’F’ und ’a’ bis ’f’
4. Implementierung
5. Kodierung
Einführung in die Praktische Informatik, Wintersemester 2016/17
12-6
Aufgabe 4: Umwandlung von Klein in Großbuchstaben
1. Aufgabenstellung
Enwickle ein Programmstückchen, das Kleinbuchstaben in Großbuchstaben umwandeln kann und umgekehrt. Auch diese Umwandlung geht wieder in einer Zeile.
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle
3. Testdaten
Alle Buchstaben von ’a’ bis ’z’ und ’A’ bis ’Z’.
4. Implementierung
Da diese Aufgabe eigentlich keine größeren Schwierigkeiten bereiten sollte, konzentrieren wir uns hier auf die eigentliche Umwandlung der Zeichen. Wie lautet die
jeweiligen Anweisungen zum Umwandeln der Buchstaben?
Klein- in Großbuchstaben:
Groß- in Kleinbuchstaben:
5. Kodierung
Schreibe ein entsprechendes Testprogramm für die beiden obigen Anweisungen:
12-7
Wintersemester 2016/17, Einführung in die Praktische Informatik
Aufgabe 5: Zeichen-Matrix
1. Aufgabenstellung
Zur Wiederholung: Eine Variable vom Typ char besitzt in der Regel acht Bits, womit
sich 256 verschiedene Werte darstellen lassen. Entwickle ein Programm, das diese 256
Möglichkeiten in Form einer 16×16 Matrix darstellt, und zwar nicht als Zahlenwerte
sondern als Zeichen. Da einige Zeichen merkwürdig“ aussehen, ist es günstig " %2c"
”
als Formatierung zu nehmen. Mit etwas Glück wird folgende Matrix ausgegeben.
Gewünschte Ausgabe:
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle
3. Implementierung
Einführung in die Praktische Informatik, Wintersemester 2016/17
12-8
4. Kodierung
12-9
Wintersemester 2016/17, Einführung in die Praktische Informatik
Herunterladen
Explore flashcards