1 / 39

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2. Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ. Wdh: Files 1. #include <stdio.h> Grundlegender Datentyp FILE Gepufferte Ein- / Ausgabe

tad
Download Presentation

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatik IIGrundlagen der ProgrammierungProgrammieren in CModule und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et 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 • 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 • 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 • return NULL bei Fehler, sonst Pointer auf Speicherbereich 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. 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 = "123 98.76"; 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 • Implementierungchar *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) • kopiert n Bytes von Speicherbereich m2 nach m1 • Ü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 • http://de.wikipedia.org/wiki/Bubblesort 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-Feldvoid 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 • http://de.wikipedia.org/wiki/Quicksort 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

More Related