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