06.10.2013 Aufrufe

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

Funktionen s<strong>in</strong>d <strong>in</strong> C reentrant, d.h. sie können rekursiv verwendet werden, also sich selbst aufrufen<br />

(Rekursionen werden später noch behandelt). Nachfolgend <strong>die</strong> Berechnung der Fakultät als Beispiel<br />

für e<strong>in</strong>e rekursive Funktion:<br />

<strong>in</strong>t Fakultaet(<strong>in</strong>t n)<br />

{<br />

if (n > 0) {<br />

return n * Fakultaet(n-1);<br />

} else {<br />

return 1;<br />

}<br />

}<br />

(Die Fakultät kann mit Schleifen natürlich viel effizienter berechnet werden)<br />

10.7 Deklaration e<strong>in</strong>er Funktion (Funktions-Prototyp)<br />

Bevor e<strong>in</strong>e Funktion verwendet werden kann, muss sie def<strong>in</strong>iert, oder zum<strong>in</strong>dest deklariert werden.<br />

<strong>E<strong>in</strong>e</strong> Funktionsdeklaration wird als Prototyp e<strong>in</strong>er Funktion bezeichnet. E<strong>in</strong> Funktionsprototyp besteht<br />

e<strong>in</strong>fach aus dem Funktionskopf, gefolgt von e<strong>in</strong>em Semikolon. Damit wird dem Compiler <strong>die</strong><br />

Funktion bekannt gemacht, <strong>und</strong> sie kann verwendet werden. (In C kann e<strong>in</strong>e Funktion auch ohne<br />

vorangehende Def<strong>in</strong>ition/Deklaration verwendet werden, der Compiler nimmt dann an, dass sie<br />

<strong>in</strong>t zurückliefert <strong>und</strong> <strong>die</strong> gerade verwendeten Argumente erwartet, was zu unerwünschten <strong>und</strong><br />

überraschenden Ergebnissen führen kann. [C99] In C99 muss e<strong>in</strong>e Funktion immer bekannt se<strong>in</strong>,<br />

bevor sie verwendet werden darf.).<br />

Beispiele für Prototypen:<br />

<strong>in</strong>t Fakultaet(<strong>in</strong>t n); /* Prototyp fuer Fakultaet */<br />

double CalculatePi(void); /* Prototyp fuer CalculatePi */<br />

Prototypen stehen für globale Funktionen normalerweise <strong>in</strong> Headerdateien (.h -Files), für lokale<br />

(static) Funktionen zu Beg<strong>in</strong>n der entsprechenden Datei.<br />

10.8 Lebensdauer lokaler Variablen<br />

Lokale Variablen von Funktionen verlieren ihren Inhalt <strong>und</strong> werden ungültig, sobald der Block verlassen<br />

wird, <strong>in</strong> dem sie def<strong>in</strong>iert wurden. Wenn man e<strong>in</strong>e lokale Variable als static def<strong>in</strong>iert, ist<br />

sie zwar nach wie vor nur <strong>in</strong>nerhalb ihres Blocks zugreifbar, aber sie behält ihren Wert bis zum<br />

nächsten Funktionsaufruf. Die Initialisierung von static-Variablen wird nur e<strong>in</strong>mal zu Beg<strong>in</strong>n des<br />

Programms ausgeführt.<br />

Beispiel:<br />

<strong>in</strong>t Counter(void)<br />

{<br />

static <strong>in</strong>t Count = 0; /* Statische lokale Variable */<br />

}<br />

Count++;<br />

pr<strong>in</strong>tf("Die Funktion wurde %d mal aufgerufen\n", Count);<br />

return Count;<br />

Def<strong>in</strong>ition der Fakultät:<br />

n! = n * (n-1)! <strong>und</strong> 0! = 1<br />

oder weniger formal:<br />

n! = n * (n-1) * (n-2) * ... * 3 * 2 * 1<br />

Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 42/147

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!