Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss) Funktionen Felder (Arrays) Zeiger, Zeigerarithmetik, Zeiger-Dereferenzierung Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung
Peter Sobe 1
2. Programmierung in C
Peter Sobe 2
Variablen und DatentypenDie Verarbeitung erfolgt durch Anweisungen, die die Werte der Variablen verändern.
Ausdrücke enthalten Variablen. Der Wert eines Ausdrucks wird u.a. durch den Wert der enthaltenen Variablen bestimmt.
Variablen können Zahlenwerte, logische Werte (wahr, falsch), Zeichen, Zeichenketten, Zeiger, Felder aufnehmen
Variablen müssen vor ihrer ersten Benutzung auf jeden Fall deklariertworden sein.
Bezeichner (Namen für Variable, Funktionen, ...)• Namen beginnen mit einem Buchstaben oder einem Unterstrich.• Die weiteren Zeichen sind Buchstaben, Zahlen oder Unterstriche.• Schlüsselworte der Sprache dürfen nicht als Name verwendet werden
Peter Sobe 3
Variablen und Datentypen
Zulässige Variablennamen:• a; i; j; k; • _pointer;• ganz_langer_name_24_undNochLaenger;• name; Name; // Groß- und Kleinschreibung wird unterschieden
Nicht als Variablenname zulässig:• 34Name; // Fehler Zahl am Anfang nicht erlaubt• Strassen Name; // Leerzeichen nicht erlaubt, besser: Strassen_Name• Ölinhalt // Fehler, Umlaute verboten• C&A; // Fehler; Sonderzeichen verboten• while; // da es ein Schlüsselwort while bereits gibtVariablenname sollten kurz sein, aber inhaltlich ihre Bedeutung wiedergeben
Peter Sobe 4
VariablendeklarationAlle benutzen Variablen müssen am Anfang des Programms deklariert werden.
Deklaration bedeutet Variablennamen erwähnen Typ angeben Wahlweise eine Initialisierung mit einen Wert
Genereller Aufbautyp variablenname;
typ variablenname-1, variablenname-1;
typ variablenname = init-ausdruck;
Peter Sobe 5
VariablendeklarationBeispiele:
int anzahl_patienten;
float gewicht;
float x,y,z;
char eingabe, auswahl=‘h‘;
int anzahl=25;
int start = anzahl-1;
Peter Sobe 6
Basisdatentypen
Grundatentypen
char für einzelne Zeichen im ASCII-Code
int für ganzzahlige Zahlen
float für Gleitkommazahlen (Darstellung reeller Zahlen),
double für Gleitkommazahlen doppelter Genauigkeit
enum für programmspezifische Aufzählungen
Die einige Grundatentypen können noch mit Modifikatoren versehen werden: signed, unsigned, short, long
Peter Sobe 7
Basisdatentypen
Typ Länge Wertebereich Genauigkeit
char = signed charunsigned char
1 Byte1 Byte
-2^7 ... +2^7-10 ... 2^8-1
2 Dezimalstellen, z.B. ‚88‘ ist genau
int = signed intunsigned int
4 Byte4 Byte
-2^31 ... +2^31-10 ... 2^32-1
9 Dezimalstellen
short int = signed short intunsigned short int
2 Byte2 Byte
-2^15 ... +2^15-10 ... 2^16-1
4 Dezimalstellen
long int = signed long intunsigned long int
8 Byte8 Byte
-2^63 ... +2^63-10 ... 2^64-1
19 Dezimalstellen(ab C99, 64 Bit)
floatdoublelong double
4 Byte8 Byte10 Byte
ca. -10^38 ... +10^38ca. –10^308 ... +10^308ca. -10^4932 ... +10^4932
6 Dez.-Stellen15 Dez.-Stellen19 Dez.-Stellen
Die angegebenen Werte stellen Beispiele für 32-Bit Umgebungen dar, sie sind implementierungsabhängig
Peter Sobe 8
Basisdatentypen (Fortsetzung)
Wertebereich Genauigkeit
enum { list }enum id { list }enum id
4 Byte4 Byte4 Byte
2^32 verschiedene Werte
bool (nur C++) 1 Byte true, false
type*void*
4 Byte4 Byte
0...2^32-10...2^32-1
einzelne Bytesim Speicheradressierbar
type& (nur C++) 4 Byte 0...2^32-1
Peter Sobe 9
Verwendung der Datentypen
Datentypen für ganze Zahlen in C:int, signed int, unsigned int,long, signed long, unsigned long,short, signed short, unsigned short
Beispiel:int i = -64;long li = 3;
Integer-Variablen werden für beispielsweise für zählbare Dinge benutzt, oder für Index-Berechnungen.
Peter Sobe 10
Verwendung der Datentypen
Gleitkommazahlen:float, double, long double
Beispiele:double d = 64.3345;double d1 = 1.234e-22; // ohne Leerzeichen zu schreibenfloat f = 67.31f;float f1 = 2.9744e-22f;double x = 5.; // 5. entspricht 5.0
Gleitkommazahlen werden für Eigenschaften, Größen verwendet, die als rationale oder reelle Zahlen angegeben werden, z.B. Wachstumsrate = 2.12 %.
Peter Sobe 11
Verwendung der Datentypen
Einzelne Zeichen (char) - die Werte entsprechen in der Regel dem ASCII-Zeichensatz
Beispiele:char c = 64;char c1 = ‘h’;char c2 = ‘\n’;
Peter Sobe 12
ASCII-Code
Peter Sobe 13
Verwendung der Datentypen
Einzelne Zeichen (char)können auch zur Aufnahme von ganzzahligen Werten benutzt werden:
unsigned char … kann 0 bis 255 repräsentieren (vorzeichenlos)char … kann Werte von -128 bis +127 repräsentieren
Ob eine char-Variable als Zeichen, oder als Zahl benutzt wird, hängt immer vom Kontext ab.Benutzung als Zeichen:
char z; int i=0;do {
z= getchar(); // Eingabe Zeichenif (z!=‘x‘) i = i+1;else break;
} while (true);
Benutzung als Zahlenwert:char z=0; do {
if (z<12) printf(“ %d Uhr morgens\n“,z);else if (z==12) printf(“ %d Uhr mittags\n“,z);
else printf(“ %d Uhr nachmittags\n“,z-12);
z = z + 1;} while (z<24);
Peter Sobe 14
Konstantenausdrücke
Konstantenausdrücke sind• ganze Zahlen, z.B. 123, -465, 033, 0xab, 0XFF, 123L, 123UL,• Gleitkommazahlen, z.B. 12.34, 12.45e-3, 0123, 1e20,• Zeichenkonstanten, z.B. ‘a‘, ‘X‘, ‘\07‘, ‘\xb‘ und• Aufzählungswerte, z.B. rot, Montag, ...
(wenn vorher entsprechend definiert)• Konstante Zeichenfolgen wie z.B. "Guten Morgen"
Konstantenausdrücke werden in Zuweisungen benutzt, z.B. für Anfangswerte
int startwert=5;auch für ‘feste‘ Werte in Berechnungen
float umfang = 2*a+2*b; float flaeche= 0.433f*a*a;
Peter Sobe 15
Konstante Variablen
Variablen können als „const“ markiert werden. Dann darf der Wert einer Variable später nicht mehr geändert werden.
Die Verwendung von Konstanten erhöht die Lesbarkeit des Programms und macht es änderungsfreundlicher
Anstatt: umfang = 2 * radius * 3.14159;Besser: const double PI = 3.14159;
umfang = 2 * radius * PI;
const heißt nur, dass die Variable nicht mehr verändert werden darf, der Wert muss nicht schon zur Übersetzungs-Zeit bestimmt werden können. Beispiel:
const double UmfangMeinKreis = 2.0 * radius * PI; // radius muss keine Konstante sein
Peter Sobe 16
Konstante Variablen
Guter Programmierstil ist es, außer den Konstanten –1, 0 und 1 keine numerischen Konstantenausdrücke in einem Programm zu verwenden, sondern diese immer einer konstanten Variable zuzuweisen.
Anstatt:for (int i=0;i<10;i++) spieler[i].anzahl_huetchen= …
Besser:const int ANZAHL_MITSPIELER = 10;…for (int i=0; i < ANZAHL_MITSPIELER; i++)spieler[i].anzahl_huetchen=…
Peter Sobe 17
Manchmal ist es sinnvoll, eine Vielzahl gleichartiger Konstanten zu einer Menge zusammenzufassen. Jedes Element dieser Menge wird intern durch eine Zahl repräsentiert. Der Programmierer benutzt aber nur die Konstanten.Beispiel:
enum Wochentag { Mon, Die, Mit, Don, Fri, Sam, Son };Wochentag Tag;Tag = Mon;
Syntax von Aufzählungen:enum AufzTyp { Bezeichnerl, Bezeichner2, ... } Variable;enum { Bezeichnerl, Bezeichner2, ... } Variable;enum AufzTyp { Bezeichnerl = 2, Bezeichner2, ... };
Aufzählungstypen
Peter Sobe 18
Interne InformationsdarstellungInterne Darstellung ganzzahliger Datentypen Fließkomma-Datentypen
Was passiert: Dezimalkonstantenausdrücke werden vom Übersetzer in eine
interne Binärdarstellung umgewandelt
Eingegebene Werte (z.B. mit der scanf()-Funktion) werden durch die Eingabefunktion in ihr Binärformat umgewandelt
Rechenoperationen werden immer im Binärformat ausgeführt
Ausgabefunktionen (z.B. printf()) wandeln die binären Repräsentation der Variablen wieder in dezimale Werte zurück.
Ausdrücke werden aus Variablen, Operatoren und Konstanten gebildet.Beispiele:
a*2.1a<c
Ausdrücke enthalten oftmals Teilausdrücke Beispiele:
a+(b+c)(a+1) < (b-c)
Ausdrücke ergeben zur Ausführungszeit des Programms einen Wert
Bei der Übersetzung wird einem Ausdruck ein Typ zugeordnet, die berechneten Werte werden wie der zugeordnete Typ interpretiert
Peter Sobe 19
Operatoren und Ausdrücke
Regeln für Ausdrücke:Konstanten entsprechen einem Typ, z.B.
1 entspricht Typ int, 1.1 entspricht Typ double1.1f entspricht Typ float, ‘1‘ entspricht Typ char
Einzelne Variable entsprechen ihren deklarierten Typint a; // a ergibt immer den Typ int
Durch Operatoren zusammengesetzte Ausdrücke ergeben int für die Operatoren ==,!=, <,> usw. (Relationen) ergeben int für Rechenoperationen zwischen zwei int-Ausdrücken ergeben float für Rechenoperationen mit zwei float-Ausdrücken ergeben double für Rechenoperationen mit zwei double-Ausdrückenund auch den Wert der jeweiligen Operation.
Peter Sobe 20
Operatoren und Ausdrücke
Operatoren zwischen Ausdrücken verschiedener Typen (int, float, double) bewirken eine implizite Typumwandlung hin zu dem jeweils „höheren“ Typ.
aus int op float wird float op floataus double op int wird double op double
Merke:Sobald ein Ausdruck einem float-Typ entspricht, wird die Operation im Fließkomma-Rechenwerk mit zwei float-Operanden ausgeführt.Sobald ein Ausdruck einem double-Typ entspricht, wird die Operation im Fließkomma-Rechenwerk mit zwei double-Operanden ausgeführt.Nur solche Operationen, die zwischen zwei int-Ausdrücken platziert sind, werden durch das int-Rechenwerk ausgeführt, bzw. vom Compiler vorab ausgerechnet.
Peter Sobe 21
Operatoren und Ausdrücke
Peter Sobe 22
Operatoren (1)
Binäre Operatoren+-*/
%
AdditionSubtraktionMultiplikationDivisionDivisionsrest
Arithmetik
Zahlen, mitEinschränkung
Adressen
nur ganze Zahlen<
<===!=>=>
Vergl. auf kleinerVergl. auf kleiner oder gleichVergl. auf gleichVergl. auf ungleichVergl. auf größer oder gleichVergl. auf größer
Vergleich Alle Typen
&|^
<<>>
bitw. UND-Verknüpfungbitw. ODER-Verknüpfungbitw. Exkl.-Oder-Verknüpfungbitw. Linksverschiebenbitw. Rechtsverschieben
Bitoperationen GanzzahligeTypen
&&||
log. UND-Verknüpfunglog. ODER-Verknüpfung
Logische Verknüpfungen
Boolesche Werte
Peter Sobe 23
Operatoren (2)
Unäre Operatoren, Postfix- und Präfix-Operatoren
&*
Adresse vonInhalt von
RefernzierungDereferenzierung
alle TypenZeiger
+-
pos. Vorzeichenneg. Vorzeichen
Arithmetik Zahlen
~ bitw. Invertierung Bitoperationen ganzz. Typen! logische Invertierung Log. Verknüpfung boolesche Werte
(type) Typecast C-Allzweck-Cast viele Typensizeofsizeof
sizeof expr.: Speicherbedarfsizeof (type):Speicherbedarf
AusdrückeTypen
++--
InkrementierungDekrementierung
Postfix und Präfix ganzz. Typen und Zeiger
Peter Sobe 24
Operatoren (3)
Zuweisungs-Operatoren und sonstige Operatoren
= Wertzuweisung Zuweisung Alle Typen
+=-=*=/=
%=
AdditionSubtraktion
MultiplikationDivision
Divisionsrest
Arithmetikund
Zuweisung
Zahlen, mitEinschränkungen,
Adressennur ganze Zahlen
&=|=^=
<<=>>=
bitw. UND-Verknüpfungbitw. ODER-Verknüpfungbitw. Eckl.-Oder-Verkn.bitw. Linksverschieben
bitw. Rechtsverschieben
Bitoperationenund
Zuweisungganzz. Typen
?:,
Formulierung bed. AusdrückeAufzählung in Klammerausdr.
AusdrückeAusdrücke
Peter Sobe 25
Prioritäten von Operatoren
1 ! ~ ++ -- + - * & sizeof (type) unär, postfix, präfix23
• / %+ -
binäre arithmetischeOperatoren
4 << >> Shift-Operationen56
< <= > >=== !=
Vergleichsoperatoren
789
&^|
Bitoperationen
1011
&&||
logische Verknüpfungen
12 = += -= *= /= %= &= = |= <<= >>= Zuweisungsoperatoren13 , Komma-Operator
1 ist die höchste Priorität, 13 die niedrigste