21.11.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!