Programmieren in C. Die C-Standardbibliothek. Prof. Dr. Nikolaus Wulff



Ähnliche Dokumente
Informatik I Programmieren in C

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Einführung in die Programmierung

Die Programmiersprache C99: Zusammenfassung

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Objektbasierte Entwicklung

Dr. Monika Meiler. Inhalt

Angewandte Mathematik und Programmierung

Die Programmiersprache C

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Zusammenfassung des Handzettels für Programmieren in C

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Programmierkurs Java

Einführung in die C-Programmierung

2. Programmierung in C

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Einführung in die Programmierung

Zählen von Objekten einer bestimmten Klasse

Deklarationen in C. Prof. Dr. Margarita Esponda

1 Vom Problem zum Programm

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Einführung in die Programmierung (EPR)

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Computeranwendung und Programmierung (CuP)

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Graphic Coding. Klausur. 9. Februar Kurs A

Einführung in die Java- Programmierung

Modellierung und Programmierung 1

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Informatik Repetitorium SS Volker Jaedicke

Übungsblatt 3: Algorithmen in Java & Grammatiken

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Objektorientierte Programmierung

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Programmierung in C. Grundlagen. Stefan Kallerhoff

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

Klausur in Programmieren

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Einführung in die C++ Programmierung für Ingenieure

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Kurze Einführung in die Programmiersprache C++ und in Root

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

C/C++ Programmierung

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Java: Vererbung. Teil 3: super()

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Übersicht über die C/C++ Bibliotheksfunktionen

Diana Lange. Generative Gestaltung Operatoren

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Delegatesund Ereignisse

Vorkurs C++ Programmierung

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Testen mit JUnit. Motivation

C- Kurs 05 Funk-onen. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins-tut für Informa-k Technische Informa-k

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Die Tabellenvorlage im Katalog für Tabellen speichern... 2 Weiteres zu Schnellbausteinkatalogen EDV + Didaktik - Dr. Viola Vockrodt-Scholz

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Einführung in die Programmierung

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Compiler und Präprozessor (1) Erstellen eines Projektes

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

25 kann ohne Rest durch 5 geteilt werden! ist wahr

Klausur in Programmieren

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Studentische Lösung zum Übungsblatt Nr. 7

Wiederholung und Vertiefung. Programmieren in C. Pointer und so... thoto. /dev/tal e.v. 6. April 2013 (Version vom 11. April 2013) Programmieren in C

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Einführung in die Programmiersprache C

Datentypen: Enum, Array, Struct, Union

E-PRIME TUTORIUM Die Programmiersprache BASIC

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Einstellen der Makrosicherheit in Microsoft Word

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung bis

PVL 3 - Roulette. (5 Punkte) Abgabe bis

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Einführung in Javadoc

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Computerarithmetik ( )

Embedded Software. Der C Präprozessor. Sichere objektbasierte Entwicklung dank C Präprozessor. Prof. Dr. Nikolaus Wulff

Große Übung Praktische Informatik 1

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Transkript:

Programmieren in C Die C-Standardbibliothek Prof. Dr. Nikolaus Wulff

Die C-Standard Bibliothek Mit dem C Compiler werden viel fertige Bibliotheksfunktionen ausgeliefert. Eine genaue Kenntnis dieser Funktionen und Makros erspart viel Programmieraufwand. Die Vorlesung erläutert die generelle Strukturierung und gibt einige Beispiele. Ausgenommen sind Funktionen zum Schreiben und Lesen von z.b. dem Dateisystem. nächste Vorlesung... Prof. Dr. Nikolaus Wulff 2

Header Dateien Um C Funktionen aufrufen zu können, müssen dem Compiler die Funktionsdeklarationen bekannt sein. Hierzu werden die entsprechende Header-Dateien per #include-direktive in den Quelltext aufgenommen. Spitze Klammern <xxx.h> beziehen sich auf Bibliotheken des Entwicklungspfades, ''xxx.h'' auf Header Dateien des aktuellen Projekts. printf Methode per #include <stdio.h> sin Funktion per #include <math.h> ddf-ableitung per #include ''derivative.h'' Prof. Dr. Nikolaus Wulff 3

Die C Standardbibliothek assert.h ctype.h errno.h float.h iso646.h limits.h locale.h math.h setjmp.h Definiert das assert Debug Makro Klassifizierung (is...) und Konvertierung (to...) von Zeichenketten Definiert Fehlerbehandlungsmakros Definiert float min, max, eps, etc. Synonyme für and, bitor, not, xor etc. Definiert char, int,... min max Bereiche Landesspezifische Währung, Zeit, Datum Mathematische Funktionen Sprünge definieren Prof. Dr. Nikolaus Wulff 4

Die C Standardbibliothek cont. signal.h Interrupts und Fehlersignale stdarg.h Funktionen mit variabler Argumentliste stddef.h Makros NULL, size_t, offsetof etc stdio.h Ein- und Ausgabe per Konsole, Datei... stdlib.h Allgemeine Bibliotheksfunktionen string.h Manipulation von Zeichenketten time.h Zeitfunktionen wchar.h Wide Character 16/32-bit Zeichen wctype.h Wide Character Zeichenfunktionen Prof. Dr. Nikolaus Wulff 5

<assert.h> Fehlerbehandlungen Für Entwicklungszwecke dient das assert Makro zum Lokalisieren von Fehlern: assert(<conditon>); Wenn die Bedingung false==0 ist (C kennt keinen boolean!) wird eine Fehlermeldung mit der Zeilennummer der Quelldatei nach stderr geschrieben und das Programm beendet. static double data[max]; double getelement(int index) { assert(0<=index); assert(index<max); return data[index]; } Prof. Dr. Nikolaus Wulff 6

<ctype.h> isalpha/isdigit Mit isalpha & isdigit läßt sich feststellen ob ein Zeichen ein Buchstabe oder eine Zahl ist: void countdigchars(char *s) { int numdigit=0; int numchars=0; } while(*s) { if(isdigit(*s)) numdigit++; if(isalpha(*s)) numchars++; s++; }... Die Routine zählt Zahlen und Buchstaben der übergebenen Zeichenkette... Prof. Dr. Nikolaus Wulff 7

<ctype.h> toupper Mit toupper & tolower lassen sich Zeichen klein oder groß schreiben: Ausgabe: char string[] = "kleingeschrieben"; printf("%s \n", string); int i = strlen(string); while(i--) { string[i] = toupper(string[i]); } printf("%s \n", string); kleingeschrieben KLEINGESCHRIEBEN Prof. Dr. Nikolaus Wulff 8

Manipulation von Zeichenketten C besitzt keinen Datentypen für Zeichenketten und verwendet statt dessen ein Feld char*. Daher gibt es keine Operatoren für Zeichenketten. Z.B. in Java oder C++ funktioniert: String s = "hallo" + " world"; C definiert statt dessen in <string.h> eine Reihe von Funktionen und Makros: char s[] = " "; char *h = "hallo"; char *w = " world"; strcpy(s,h); /* copy h to s */ strcat(s,w); /* append w */ Prof. Dr. Nikolaus Wulff 9

<string.h> Methoden s, t sind Zeiger char* und c, n vom Typ int. strcat(s,t) hängt t an das Ende von s an strncat(s,t,n) hängt n Zeichen von t an s an strcmp(s,t) vergleicht s mit t strncmp(s,t,n) vergleicht n Zeichen von s und t strcpy(s,t) kopiert t nach s strncpy(s,t,n) kopiert n Zeichen von t nach s strlen(s) Länge von s ohne '\0' strchar(s,c) Zeiger auf erstes c in s oder NULL strrchr(s,c) Zeiger auf letztes c in s oder NULL Prof. Dr. Nikolaus Wulff 10

Speicherprobleme Der Zielzeiger bei allen strxxx Methoden muss auf einen Speicherbereich zeigen, der das Ergebnis der Operation aufnehmen kann! Beispiel: Sollen die Zeichenketten "hallo" und " world" zusammengesetzt werden, so muss der Zeiger der Zieladresse auf einen Speicherbereich der Größe (5+6+1)*sizeof(char) zeigen. Ist dieser Speicher nicht richtig dimensioniert worden, so kann es bei größeren Programmen zur nachträglichen Überschreibung oder einem fatalen Abbruch mit Segmentation Fault kommen. Prof. Dr. Nikolaus Wulff 11

<stdlib.h> malloc und free Speicherbereiche werden vor dem Gebrauch mit der Funktion malloc angefordert. malloc liefert einen void* Zeiger. Nach der Verwendung muss der Speicher mit der Methode free wieder freigegeben werden! int len = 100; double *array; array = malloc(len*sizeof(double)); /* check memory is valid */ assert(array!= NULL); /* do something... */ free(array); Prof. Dr. Nikolaus Wulff 12

Speicher anfordern Bei Zeichenkettenoperationen muss immer genügend Speicher mit malloc vom Betriebsystem angefordert werden: char *s1,*s2,*dest; s1 = "irgend eine"; s2 = " lange Zeichenkette"; /* calculate resulting size */ int len = strlen(s1) + strlen(s2) + 1; /* allocate storage from OS */ dest = (char*) malloc(sizeof(char)*len); /* copy and concat strings */ strcpy(dest,s1); /* copy s1 to dest */ strcat(dest,s2); /* append s2 on dest */ printf("%s \n",dest); Prof. Dr. Nikolaus Wulff 13

Zeichenketten vergleichen Die Funktion strcmp vergleicht zwei Zeichenketten lexikalisch und liefert 0 wenn beide Strings gleich sind, ansonsten einen Wert kleiner oder größer 0. char *s1 = "aaac"; char *s2 = "aaea"; printf("%s cmp %s %d \n",s1, s1, strcmp(s1,s1)); printf("%s cmp %s %d \n",s2, s1, strcmp(s2,s1)); printf("%s cmp %s %d \n",s1, s2, strcmp(s1,s2)); Ergebnis: aaac cmp aaac 0 aaea cmp aaac 4 aaac cmp aaea -4 Prof. Dr. Nikolaus Wulff 14

<string.h> Zeichenkette parsen Mit der Funktion strtok lassen sich Zeichenketten in einzelne Wörter (engl. tokens) zerlegen: char *word; char string[] = "eine Zeichenkette mit vielen Wörtern...!"; word = strtok(string," "); while(word) { printf("%s \n", word); word = strtok(null," "); } Ausgabe: eine Zeichenkette mit vielen Wörtern...! Prof. Dr. Nikolaus Wulff 15

Zusammenfassung Die Standard C Bibliothek bietet viele Funktionen bereits for free. Die Namensgebung (6 Buchstaben!) und die Art der Aufrufe (Signatur) sind manchmal recht kryptisch und nicht mehr ganz zeitgemäß... Dennoch es lohnt sich ein Blick in die entsprechende Dokumentation, bevor Routinen unnötig selbst geschrieben werden. Prof. Dr. Nikolaus Wulff 16