Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Hochschule Fulda – FB ET Sommersemester 2010

Ähnliche Präsentationen


Präsentation zum Thema: "Hochschule Fulda – FB ET Sommersemester 2010 "—  Präsentation transkript:

1 Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2
Hochschule Fulda – FB ET Sommersemester 2010 Peter Klingebiel, HS Fulda, DVZ

2 Wdh: Files 1 #include <stdio.h> Grundlegender Datentyp FILE
Gepufferte Ein- / Ausgabe Dateien / Geräte / Netzwerk (sockets) / ... konstante Files, bei Programmstart bereits geöffnet: stdin - Standardeingabe (TTY) stdout - Standardausgabe (TTY) stderr - Standardfehlerausgabe (TTY) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

3 Wdh: Files 2 Öffnen von Files Schließen von Files
fopen() fdopen(), freopen() Schließen von Files fclose() allgemeines Gerüst #include <stdio.h> FILE *fp; fp = fopen(...); /* Lesen / Schreiben */ fclose(fp); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

4 Wdh: Files 3 Eingabefunktionen Ausgabefunktionen
getchar(), getc(), fgetc() getw(), fgetw() gets(), fgets() scanf(), fscanf() fread() ungetc(); Ausgabefunktionen putchar(), putc(), fputc() putw(), fputw() puts(), fputs() printf(), fprintf() fwrite() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

5 Wdh: Files 4 High-Level- und Low-Level-Funktionen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

6 Wdh: Files 5 Low-Level-Funktionen  Systemcalls
Datentyp int  Filedeskriptor / Filehandle  Index in der Filetabelle des Prozesses Pufferung von Gerätetreiber abhängig Dateien / Geräte / Netzwerk (sockets) / ... konstante Filedeskriptoren 0 - Standardeingabe (TTY) 1 - Standardausgabe (TTY) 2 - Standardfehlerausgabe (TTY) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

7 Wdh: Files 6 Öffnen von Dateien
open(), creat() Für andere Files / Geräte ggfs. eigene Funktionen zum Erstellen / Öffnen pipe(), socket(), ... Lesen / Schreiben read(), write() evtl. weitere gerätetyp. Funktionen Schließen close() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

8 Wdh: Files 7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

9 Wdh: Files 8 Beispiel: Netzwerkserver
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

10 Wdh: Files 9 Beispiel: Netzwerkclient
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

11 Wdh: Files 10 Beispiel: Pipe
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

12 Dynamischer Speicher 1 Funktionen zur Anforderung und Freigabe von dynamischem Speicher (Heap) #include <stdlib.h> Anforderung von Speicher: void *malloc(size_t s) s Bytes allozieren return NULL bei Fehler, sonst Pointer auf Speicherbereich void *calloc(size_t n, size_t s) s * n Bytes allozieren und mit 0 initialisieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

13 Dynamischer Speicher 2 Freigabe von alloziertem Speicher
void free(void *ptr) Speicher von ptr wieder freigeben Beispiel: char buf[BUFLEN], *sptr; size_t slen; if(fgets(buf, sizeof(buf) - 1, stdin)) { slen = strlen(buf); sptr = (char *) malloc(slen + 1); if(sptr == NULL) /* Fehler ... */ (void) strcpy(sptr, buf); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

14 Klassifizierungsfunktionen für Zeichen #include <ctype.h>
ctype-Funktionen 1 Klassifizierungsfunktionen für Zeichen #include <ctype.h> alle Funktionen liefern Rückgabewert ≠ 0, wenn Test ok, 0 sonst die wichtigsten Funktionen int isalpha(int c) Test, ob c Buchstabe ist int isdigit(int c) Test, ob c Ziffer ist Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

15 ctype-Funktionen 2 int isalnum(int c) Test, ob c Buchstabe oder Ziffer ist int isupper(int c) Test, ob c Großbuchstabe ist int islower(int c) Test, ob c Kleinbuchstabe ist int isprint(int c) Test, ob c druckbares Zeichen (+ Leerzeichen) ist int tolower(int c) wandelt c von Groß- in Kleinbuchstaben um int toupper(int c) wandelt c von Klein- in Großbuchstaben um Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 ctype-Funktionen 3 Implementierung isalnum() für ASCII
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 ctype-Funktionen 4 Implementierung tolower() für ASCII
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

18 Stringfunktionen 1 String als eigener Datentyp existiert in C genau genommen nicht! Strings sind Arrays vom Typ char oder Pointer auf char: char b[LEN]; bietet Platz für LEN-1 Zeichen char *s; Pointer s gültig erst nach Zuweisung auf char-Array, Konstante oder dyn. Speicherallozierung Strings werden mit ASCII-NUL terminiert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

19 Stringfunktionen 2 C-Standardbibliothek bietet eine große Menge an Stringfunktionen an wichtige Konvertierungsfunktionen #include <stdlib.h> int atoi(char *s) wandelt String s in int long atol(char *s) wandelt String s in long double atof(char *s) wandelt String s in double Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

20 Stringfunktionen 3 Weitere Konvertierungsfunktionen
#include <stdio.h> int sscanf(char *s, char *fmt,...) formatierte Konvertierung aus dem String s wie scanf() und fscanf() Beispiel: char *s = " "; int l; double d; sscanf(s, "%ld %lf", &l, &d); int sprintf(char *s, char *fmt, …) formatierte Ausgabe auf String s wie printf() und fprintf() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

21 Stringfunktionen 4 die wichtigsten Grundfunktionen
#include <string.h> int strlen(char *s) liefert Länge des String s char *strcpy(char *s1, char *s2) kopiert String s2 nach String s1, bis zum s2 terminierenden NUL, liefert Ptr auf s1 Achtung: Pufferüberlauf! char *strncpy(char *s1, char *s2, int n) kopiert String s2 nach String s1, max n Zeichen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

22 Stringfunktionen 5 char *strcat(char *s1, char *s2)
Hängt Kopie von s2 an s1, liefert Ptr auf s1 Achtung: Pufferüberlauf! char *strncat(char *s1, char *s2, int n) Hängt Kopie von s2 an s1, max. n Zeichen int strcmp(char *s1, char *s2) vergleicht zeichenweise s1 und s2 liefert 0 bei Gleichheit sonst Differenz *s1-*s2 bei erstem Unterschied Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

23 Stringfunktionen 6 int strncmp(char *s2, char *s2, int n)
Stringvergleich bis max. n Zeichen sonst wie strcmp() char *strchr(char *s, int c) liefert Pointer auf Position des ersten Auftretens von Zeichen c im String s, sonst NULL char *strrchr(char *s, int c) liefert Pointer auf Position des letzten Auftretens von Zeichen c im String s, sonst NULL also wie strchr() vom Stringende her Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

24 Stringfunktionen 7 char *strstr(char *s1, char *s2)
liefert Pointer auf Position des ersten Auftretens von String s2 im String s1, sonst NULL char *strdup(char *s) alloziert Speicher für eine Kopie des String s und kopiert diesen dorthin liefert Pointer auf Kopie oder NULL bei Fehler Implementierung char *ns; if(ns = malloc(strlen(s) + 1)) return(strcpy(ns, s)); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

25 Stringfunktionen 8 Implementierung von strlen()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

26 Stringfunktionen 9 Implementierung von strcmp()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

27 Stringfunktionen 10 Memory- / Binärfunktionen
void *memset(void *m, int c, size_t n) kopiert n mal das Zeichen c in den Speicherbereich m void *memcpy(void *m1, void *m2, size_t n) kopiert n Bytes von Speicherbereich m2 nach m1 void *memmove(void *m1, void *m2, size_t n) Überlappungen der Bereiche werden korrekt behandelt void *memcmp(void *m1, void *m2, size_t n) Vergleich von n Bytes der Speicherbereiche m1 und m2 void *memchr(void *m, int c, size_t n) liefert Pointer auf erstes Auftreten von c in m, sonst NULL Achtung! Es finden keine Bereichsprüfungen statt! Overflow! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

28 Sortieren 1 Sortieren von Zahlen, Strings, allgemein von Daten, ist oft auftretende Aufgabenstellung Meist: Daten sind in Feldern vorhanden  Sortieren von Feldelementen Intuitiver Algorithmus: Feld von oben nach unten (oder von links nach rechts) durchlaufen und elementweise sortieren Feld solange immer wieder durchlaufen, bis Feld sortiert ist  Bubblesort-Algorithmus Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 Sortieren 2 1. Durchlauf bei Bubblesort
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

30 Sortieren 3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

31 Sortieren 4  die größten Elemente wandern nach und nach an das Ende des Feldes  steigen wie Blasen auf  Bubblesort Algorithmus für int-Feld mit n Elementen: void bsort(int v[], int n) int i, j; for(i = 0; i < n; i++) for(j = 0; j < n-i-1; j++) if(v[j] > v[j+1]) swap(v, j, j+1); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

32 Sortieren 5 Bubblesort für Feld von Strings
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

33 Sortieren 6 Sortierprogramm für Strings
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

34 Sortieren 7 Diskussion Stabilität? Geschwindigkeit?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

35 Sortieren 8 Schnellerer Algorithmus  Quicksort
rekursiver Algorithmus für int-Feld void qsort(int v[], int left, int right) int i, last; if(left >= right) return; swap(v, left, (left + right) / 2); last = left; for(i = left + 1; i <= right; i++) if(v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); qsort(v, left, last - 1); qsort(v, last + 1, right); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

36 Sortieren 9 Prinzip: teile und herrsche
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

37 Sortieren 10 Quicksort für Feld von Strings
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

38 Sortieren 11 Sortierprogramm für Strings
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

39 Sortieren 12 Diskussion Stabilität? Geschwindigkeit?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Herunterladen ppt "Hochschule Fulda – FB ET Sommersemester 2010 "

Ähnliche Präsentationen


Google-Anzeigen