2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings)...

25
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

Transcript of 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings)...

Page 1: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 2: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 3: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 4: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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;

Page 5: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

Peter Sobe 5

VariablendeklarationBeispiele:

int anzahl_patienten;

float gewicht;

float x,y,z;

char eingabe, auswahl=‘h‘;

int anzahl=25;

int start = anzahl-1;

Page 6: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 7: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 8: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 9: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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.

Page 10: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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 %.

Page 11: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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’;

Page 12: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

Peter Sobe 12

ASCII-Code

Page 13: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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);

Page 14: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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;

Page 15: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 16: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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=…

Page 17: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 18: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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.

Page 19: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 20: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 21: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 22: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 23: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 24: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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

Page 25: 2. Programmierung in Csobe/Info1_Jg14/Vo/2b_Datentypen_… · Zeichenketten (Strings) Benutzerdefinierte Datentypen Speicherverwaltung und Datenstrukturen Dateiarbeit Bitlevel-Verarbeitung

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