670 likes | 929 Views
Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 1. Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ. Zeichensatz von C 1.
E N D
Informatik IIGrundlagen der ProgrammierungProgrammieren in CGrundlagen C 1 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ
Zeichensatz von C 1 • Buchstaben (incl. Unterstrich)ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ • Ziffern0123456789 • Semikolon (z.B. am Ende einer Anweisung); • Punkt (Gleitpunktzahlen, Selektionsoperator). Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Zeichensatz von C 2 • Sonderzeichen (Operatoren, Satzzeichen)()[]<>+-*/%^~&|=!?,: • Anführungszeichen (Einzelzeichen, Strings)'" • Blockklammern{ } • Fluchtzeichen (für Sonderzeichen)\ • Doppelkreuz (Preprozessordirektiven)# Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Reservierte Worte in C 1 • C kennt 32 reservierte Worteauto break case charconst continue default dodouble else enum externfloat for goto ifint long register returnshort signed sizeof staticstruct switch typedef unionunsigned void volatile while Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Reservierte Worte in C 2 • auto Speicherklasse automatisch • break Verlassen von Schleife/Mehrfachauswahl • case Auswahl in Mehrfachauswahl • char Typbezeichner für Zeichen • const Attribut bei Typangabe • continue Fortsetzungsanweisung • default Standardauswahl bei Mehrfachauswahl • do Schleifenanweisung • double Typbezeichner Fließkommazahl • else Teil von Einfach-, Mehrfachalternative Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Reservierte Worte in C 3 • enum Typbezeichner für Aufzählungstyp • extern Speicherklasse extern • float Typbezeichner Fließkommazahl • for Schleifenanweisung • if Alternative oder bedingte Anweisung • int Typbezeichner Ganzzahl • long Typbezeichner Ganzzahl • register Speicherklasse Register • return Rückkehranweisung • short Typbezeichner Ganzzahl Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Reservierte Worte in C 4 • signed Typbezeichner, -modifizierer • sizeof Operator zur Größenbestimmung • static Speicherklasse statisch • struct Strukturvereinbarung • switch Auswahlanweisung • typedef Typnamenvereinbarung • union Datenstruktur mit Alternativen • unsigned Typbezeichner, -modifizierer • void Typbezeichner • while Schleifenanweisung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentypen 1 • Menge von Werten undMenge von Operationen auf diesen Werten • Konstanten / Variablen • Datentypen bestimmen • Darstellung der Werte im Rechner • benötigten Speicherplatz • zulässige Operationen • Festlegung des Datentyps • implizit durch Schreibweise bei Konstanten • explizit durch Deklaration bei Variablen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentypen 2 • Vordefinierte Grunddatentypenchar Zeichen (ASCII-Kode, 8 Bit)int Ganzzahl (maschinenabhängig, meist 16 oder 32 Bit)float Gleitkommazahl (32 Bit, IEEE, etwa auf 6 Stellen genau)double doppelt genaue Gleitkommazahl (64 Bit, IEEE, etwa auf 12 Stellen genau)void ohne Wert (z.B. Zeiger) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentypen 3 • Type-Modifier spezifizieren Grunddatentypenshort int, long int- legen Länge der Ganzzahl fest- maschinenabhängig, 16 Bit, 32 Bit - int kann auch fehlenlong double- Gleitkommazahl, erw. Genauigkeit- oft 128 Bit, IEEEsigned, unsigned- char/int mit/ohne Vorzeichen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Bezeichner 1 • Bezeichner (Identifier) für Konstanten, Variablen, Funktionen, Typen usw. müssen mit einem Buchstaben oder Unterstrich beginnen • danach können Buchstaben, Unterstriche und Ziffern folgen • Groß- und Kleinschreibung wird streng unterschieden • keine Sonderzeichen (z.B. $ oder #) • keine reservierten Worte • Vorsicht bei vordefinierten Funktionsnamen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Bezeichner 2 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Bezeichner 3 • Backus-Naur-Form (BNF)letter ::= A|B|…|Y|Z|a|b|…|y|z|_digit ::= 0|1|2|3|4|5|6|7|8|9identifier ::= letter { letter | digit } • BNF / EBNF zur Beschreibung formaler Sprachen • Vielfältige Formen / Notationen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Bezeichner 4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Konstanten • Konstanten haben einen festgelegten, unveränderbaren Wert • explizite Deklaration, z.B.const float pi = 3.141; • implizite Notation, z.B.u= 2 * r * 3.141; • mittels CPP textuelle implizite Ersetzung#define PI 3.141...u = 2 * PI * r; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Variablen 1 • Variable sind Platzhalter für Daten • haben einen festgelegten Speicherort, an dem der aktuelle Wert gespeichert wird • der aktuelle Wert (an seinem Speicherort)ist veränderbar • Attribute von Variablen: • Datentyp • Namen (Bezeichner, Identifier) • Lebensdauer / Speicherklasse • evtl. initialer Wert • Sichtbarkeit (Scope) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Variablen 2 • Deklaration / Definition von Variablen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Variablen 3 • Variablen-Definitionen, z.B.double u;short int i, tab = 5;char *hallo = "Hallo, Welt!"; • Position im Programm: • außerhalb von Funktionen • am Anfang eines Blocks, also nach { • Wert ist veränderbar (Zuweisung, Operation) • Programmstruktur Lebensdauer / Scope Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 1 • Hauptspeicher Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 2 • Beispiel: Zugriff auf Variable Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 3 • Vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 4 • Programmstart und Aufruf von main() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 5 • Zuweisung a = 4; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 6 • Zuweisung b = 8; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 7 • Berechnung a * b; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 8 • Zuweisung c = a * b; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 9 • Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 1 • Wdh: Jede Variable hat einen Speicherort,d.h. eine Adresse im Hauptspeicher • Zeiger (Pointer) sind Variable, die auf eine andere Variable verweisen, oderexakter: den Speicherort bzw. die Adresse dieser Variablen als Wert haben • Pointerdefinition: int*ip;int i = 5; • Adresszuweisung: ip = &i; • Zugriff auf Wert: *ip = *ip + *ip; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 2 • Zugriff auf Variable mit Pointer Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 3 • Vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 4 • Programmstart und Aufruf von main() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 5 • Zuweisung i = 5; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 6 • Zuweisung ip = &i; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 7 • Berechnung *ip + *ip; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 8 • Zuweisung *ip = *ip + *ip; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 9 • Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 10 • Warum und wozu Zeiger? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Zeiger 11 • In anderes Programmiersprachen, z.B. Ada oder Pascal, werden Pointer meist nur für dynamische Datentypen verwendet • In C werden Zeiger leider schon von Anfang an für einfache Grundoperationen benötigt! • Pointer notwendig für Eingaben:scanf("%d", &i); • Pointer notwendig als Funktionsparameter:doit(int *i) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 1 • Wdh: Aufbau eines C-Programms:#include <stdio.h>int main(void){ int a, b, c; scanf("%d", &a); scanf("%d", &b); c = a * b; printf("c = %d\n", c); return(0);} Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 2 • Jedes laufende C-Programm (= Prozess) hat voreingestellt drei Ein-/Ausgabekanäle: • stdin Standardeingabe, meist Tastatur • stdout Standardausgabe, meist Bildschirm • stderr Standardfehlerausgabe, Bildschirm • Die Standardkanäle sind umlenkbar:$ meinprog <InFile >OutFile 2>ErrFile • Bei einigen C-Compilern ist unter Windows auch der Kanal stdprn als Standarddrucker definiert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 3 • Einfache zeichenweise Ein- und Ausgabe mit getchar() und putchar(), z.B.:int c;c = getchar(); /* Zeichen von stdin */putchar(c); /* Zeichen auf stdout */ • Formatierte Ein- und Ausgabe mit printf() und scanf(), z.B.:int c;scanf("%c", &c);printf("%c", c); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 4 • Obacht: getchar() liefert, bzw. putchar() benötigt als Parameter den Typ int! • Typumwandlung von char int erfolgt meist automatisch • Hauptgründe: • historisch ist char eine Art Untertyp von int • die Zeichenkonstante EOF als Endekennzeichner für die Eingabe ist in stdio.h als -1 definiert • Simples Kopierprogrammfragment:while((c = getchar())!= EOF) putchar(c); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 5 • Formatierte Ausgabe mit printf() • Aufruf: printf(fmt, args) • printf() konvertiert und gibt die Parameter args unter Kontrolle des Formatstrings fmt auf stdout aus • Der Formatstring fmt ist eine Zeichenkette • Parameter args können auch fehlen • Die Parameter args müssen den Typ haben, wie er im Formatstring fmt angegeben ist Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 6 • Formatierte Eingabe mit scanf() • Aufruf: scanf(fmt, args) • scanf() konvertiert und liest die Parameter args unter Kontrolle des Formatstrings fmt von stdin ein • Der Formatstring fmt ist eine Zeichenkette • Die Parameter args müssen den Typ haben, wie er im Formatstring fmt angegeben ist • Die Parameter args müssen Pointer sein Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 7 • Wichtige Formatzeichen: %c Einzelzeichen / char%d Ganzzahl / int%ld Ganzzahl / long int%f Gleitkommazahl / float%lf Gleitkommazahl / double%s Zeichenkette / char * • Wichtige Sonderzeichen\n Newline, Zeilensprung\t Tabulator\0 EOS - Endezeichen in String\' einfaches Anführungszeichen '\" doppeltes Anführungszeichen "\% Prozentzeichen %\\ Fluchtzeichen \ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 8 • Beispiele:char c;int a, b;double d;printf("integer a und b eingeben: ");scanf("%d %d", &a, &b);printf("a=%d b=%d\n", a, b);printf("char c und double d: ");scanf("%c %lf", &c, &d);printf("c=%c d=%lf\n", c, d); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Noch ein Exkurs: Ein-/Ausgabe 9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Funktionsaufruf und Parameter • Parameterübergabe als Werte (call by value), z.B. bei printf() • Variable werden als Werte in den Adressraum der Funktion kopiert • Parameterübergabe als Adresse (call by reference), z.B. bei scanf() • Adressen der Variablen werden in den Adressraum der Funktion kopiert • In Funktion sind die Parameter Zeiger Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Call by value 1 • Beispiel: Funktionsaufruf cbv Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Call by value 2 • Vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ