Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
void exit(<strong>in</strong>t status)<br />
exit beendet das Programm normal. atexit-Funktionen werden <strong>in</strong> umgekehrter<br />
Reihenfolge ihrer H<strong>in</strong>terlegung aufgerufen, <strong>die</strong> Puffer offener Dateien<br />
werden geschrieben, offene Ströme werden abgeschlossen, <strong>und</strong> <strong>die</strong> Kontrolle<br />
geht an <strong>die</strong> Umgebung des Programms zurück. Wie status an <strong>die</strong><br />
Umgebung des Programms geliefert wird, hängt von der Implementierung<br />
ab, aber Null gilt als erfolgreiches Ende. Die Werte EXIT_SUCCESS <strong>und</strong><br />
EXIT_FAILURE können ebenfalls angegeben werden.<br />
<strong>in</strong>t atexit(void (*fcn)(void))<br />
atexit h<strong>in</strong>terlegt <strong>die</strong> Funktion fcn, damit sie aufgerufen wird, wenn das<br />
Programm normal endet, <strong>und</strong> liefert e<strong>in</strong>en von Null verschiedenen Wert,<br />
wenn <strong>die</strong> Funktion nicht h<strong>in</strong>terlegt werden kann.<br />
<strong>in</strong>t system(const char *s)<br />
system liefert <strong>die</strong> Zeichenkette s an <strong>die</strong> Umgebung zur Ausführung. Hat s<br />
den Wert NULL, so liefert system e<strong>in</strong>en von Null verschiedenen Wert,<br />
wenn es e<strong>in</strong>en Kommandoprozessor gibt. Wenn s von NULL verschieden<br />
ist, dann ist der Resultatwert implementierungsabhängig.<br />
char *getenv(const char *name) getenv liefert <strong>die</strong> zu name gehörende Zeichenkette aus der Umgebung oder<br />
NULL, wenn ke<strong>in</strong>e Zeichenkette existiert. Die Details hängen von der Implementierung<br />
ab.<br />
void *bsearch(const void *key, const void *base, size_t n, size_t size,<br />
<strong>in</strong>t (*cmp)(const void *keyval, const void *datum))<br />
bsearch durchsucht base[0] ... base[n-l] nach e<strong>in</strong>em E<strong>in</strong>trag, der gleich<br />
*key ist. Die Funktion cmp muss e<strong>in</strong>en negativen Wert liefern, wenn ihr<br />
erstes Argument (der Suchschlüssel) kle<strong>in</strong>er als ihr zweites Argument (e<strong>in</strong><br />
Tabellene<strong>in</strong>trag) ist, Null, wenn beide gleich s<strong>in</strong>d, <strong>und</strong> sonst e<strong>in</strong>en positiven<br />
Wert. Die Elemente des Arrays base müssen aufsteigend sortiert se<strong>in</strong>. In size<br />
muss <strong>die</strong> Grösse e<strong>in</strong>es e<strong>in</strong>zelnen Elements übergeben werden. bsearch<br />
liefert e<strong>in</strong>en Zeiger auf das gef<strong>und</strong>ene Element oder NULL, wenn ke<strong>in</strong>es<br />
existiert.<br />
void qsort(void *base, size_t n, size_t size, <strong>in</strong>t (*cmp)(const void *, const void *))<br />
qsort sortiert e<strong>in</strong> Array base[0] ... base[n-1] von Objekten der Grösse size<br />
<strong>in</strong> aufsteigender Reihenfolge. Für <strong>die</strong> Vergleichsfunktion cmp gilt das gleiche<br />
wie bei bsearch.<br />
<strong>in</strong>t abs(<strong>in</strong>t n) abs liefert den absoluten Wert se<strong>in</strong>es <strong>in</strong>t Arguments n.<br />
long labs(long n) labs liefert den absoluten Wert se<strong>in</strong>es long Arguments n.<br />
div_t div(<strong>in</strong>t num, <strong>in</strong>t denom)<br />
div berechnet Quotient <strong>und</strong> Rest von num/denom. Die Resultate werden <strong>in</strong><br />
den <strong>in</strong>t Komponenten quot <strong>und</strong> rem e<strong>in</strong>er Struktur vom Typ div_t abgelegt.<br />
ldiv_t ldiv(long num, long denom) div berechnet Quotient <strong>und</strong> Rest von num/denom. Die Resultate werden <strong>in</strong><br />
den long Komponenten quot <strong>und</strong> rem e<strong>in</strong>er Struktur vom Typ ldiv_t abgelegt.<br />
Anwendung von Qsort:<br />
typedef struct Entry {<br />
char Name[];<br />
<strong>in</strong>t Age;<br />
} Entry;<br />
/* Vergleichsfunktion fuer qsort, sortiert nach Alter (Age) */<br />
<strong>in</strong>t EntryCompareFkt(const void *keyval, const void *datum)<br />
{<br />
/* Funktion muss negativen Wert liefern wenn *Key < *datum */<br />
/* Funktion muss 0 liefern wenn *Key == *datum */<br />
/* Funktion muss positiven Wert liefern wenn *Key > *datum */<br />
/* Cast ist noetig um aus void* wieder e<strong>in</strong>en Entry* zu machen */<br />
return ((const Entry *) keyval)->Age - ((const Entry *) datum)->Age;<br />
}<br />
void UseQuickSort(struct Entry *Array, <strong>in</strong>t Length)<br />
{<br />
/* Das Array mit Quicksort aus der Standardbibliothek sortieren */<br />
qsort(Array, Length, sizeof(struct Entry), EntryCompareFkt);<br />
}<br />
Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 71/147