Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."—  Präsentation transkript:

1 Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 C-Programm 1 Ein C-Programm besteht (vereinfacht dargestellt) aus  Daten  Funktionen Daten –Eingangsdaten  Ergebnisdaten –evtl. (viele) Zwischendaten –Konstante Daten  Werte unveränderbar –Variable Daten  Werte veränderbar Funktionen  verarbeiten die Daten

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 C-Programm 2

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 C-Programm 3

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 C-Programm 4

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 C-Programm 5

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 C-Programm 6 Typischer Ablauf eines C-Programms

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 Zeichensatz von C 1 Buchstaben (incl. Unterstrich) ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz _ Ziffern Semikolon (z.B. am Ende einer Anweisung) ; Punkt (Gleitpunktzahlen, Selektionsoperator).

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 Zeichensatz von C 2 Sonderzeichen (Operatoren, Satzzeichen) ( ) [ ] + - * / % ^ ~ & | = ! ?, : Anführungszeichen (Einzelzeichen, Strings) ' " Blockklammern { } Fluchtzeichen (für Sonderzeichen) \ Doppelkreuz (Preprozessordirektiven) #

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 Reservierte Worte in C 1 C kennt 32 reservierte Worte auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 Reservierte Worte in C 2 Aus den "Grundbausteinen" von C

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Reservierte Worte in C 3  werden "Programme"...

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Reservierte Worte in C 4 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

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 Reservierte Worte in C 5 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

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Reservierte Worte in C 6 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

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Datentypen 1 Menge von Werten und Menge 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

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Datentypen 2 Vordefinierte Grunddatentypen char 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)

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Datentypen 3 Type-Modifier spezifizieren Grunddatentypen short int, long int - legen Länge der Ganzzahl fest - maschinenabhängig, 16 Bit, 32 Bit - int kann auch fehlen long double - Gleitkommazahl, erw. Genauigkeit - oft 128 Bit, IEEE signed, unsigned - char/int mit/ohne Vorzeichen

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 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

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Bezeichner 2 Syntaxdiagramm

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 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|9 identifier ::= letter { letter | digit } BNF / EBNF zur Beschreibung formaler Sprachen Vielfältige Formen / Notationen

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Bezeichner 4

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 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 u = 2 * PI * r;

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 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)

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 Variablen 2 Deklaration / Definition von Variablen

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 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

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Wie speichert C? 1 Hauptspeicher

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Wie speichert C? 2 Beispiel: Zugriff auf Variable

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Wie speichert C? 3 Vor Programmstart

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Wie speichert C? 4 Programmstart und Aufruf von main()

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Wie speichert C? 5 Zuweisung a = 4;

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Wie speichert C? 6 Zuweisung b = 8;

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 Wie speichert C? 7 Berechnung a * b;

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Wie speichert C? 8 Zuweisung c = a * b;

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 Wie speichert C? 9 Danach

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 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, oder exakter: 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;

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 Exkurs: Zeiger 2 Zugriff auf Variable mit Pointer

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 Exkurs: Zeiger 3 Vor Programmstart

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Exkurs: Zeiger 4 Programmstart und Aufruf von main()

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Exkurs: Zeiger 5 Zuweisung i = 5;

41 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ41 Exkurs: Zeiger 6 Zuweisung ip = &i;

42 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ42 Exkurs: Zeiger 7 Berechnung *ip + *ip;

43 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 Exkurs: Zeiger 8 Zuweisung *ip = *ip + *ip;

44 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ44 Exkurs: Zeiger 9 Danach

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 Exkurs: Zeiger 10 Warum und wozu Zeiger?

46 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ46 Exkurs: Zeiger 11 In anderes Programmiersprachen, z.B. Ada oder Pascal, werden Pointer i.d.R. 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: Funktionsdefinition: void getint(int *i) {} Funktionsaufruf: getint(&i);

47 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ47 Noch ein Exkurs: Ein-/Ausgabe 1 Wdh: Aufbau eines C-Programms: #include int main(void) { int a, b, c; scanf("%d", &a); scanf("%d", &b); c = a * b; printf("c = %d\n", c); return(0); }

48 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ48 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 OutFile 2>ErrFile Bei einigen C-Compilern ist unter Windows auch der Kanal stdprn als Standarddrucker definiert

49 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ49 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);

50 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ50 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);

51 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ51 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

52 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ52 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

53 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ53 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 \

54 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ54 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);

55 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ55 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 der Funktion sind die Parameter Zeiger!

56 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ56 Call by value 1 Beispiel: Funktionsaufruf cbv

57 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ57 Call by value 2 Vor Programmstart

58 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ58 Call by value 3 Zuweisung a = 4

59 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ59 Call by value 4 Kopie des Parameters an Funktion

60 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ60 Call by value 5 Aufruf der Funktion

61 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ61 Call by value 6 Zuweisung b = b * 2

62 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ62 Call by value 7 Rückkehr aus Funktion

63 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ63 Call by value 8 Variable a unverändert!!!

64 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ64 Call by reference 1 Beispiel: Funktionsaufruf cbr

65 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ65 Call by reference 2 Vor Programmstart

66 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ66 Call by reference 3 Wo ist der Unterschied cbv – cbr?cbvcbr

67 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ67 Call by reference 4 Aufruf: Adresse der Variablen!!!

68 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ68 Call by reference 5 In Funktion: Zeiger auf Variable!!!

69 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ69 Call by reference 6 Zuweisung a = 4

70 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ70 Call by reference 7 Kopie der Adresse an Funktion

71 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ71 Call by reference 8 Aufruf der Funktion

72 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ72 Call by reference 9 Zuweisung *b = *b * 2

73 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ73 Call by reference 10 Rückkehr aus Funktion

74 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ74 Call by reference 11 Variable a verändert!!!


Herunterladen ppt "Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."

Ähnliche Präsentationen


Google-Anzeigen