C Variablen und Operatoren
Variablen
Jedes Programm wandelt eine Hand voll Informationen in
andere Informationen um. Microsofts Word wandelt zum Beispiel Tastendrücke
fettiger Finger in hübsch formatierten Text um, ein Browser nimmt URL’s entgegen
und gibt Bewegtbilder nackter Frauen zurück. Damit wir solche nutzvollen
Programme schreiben können brauchen wir einen Mechanismus mit Daten umzugehen.
Von Hause aus bringt C zwar keine nackten Frauen, aber immerhin Zahlen und
Buchstaben mit. Dazu ein Beispiel:
#include <stdio.h>
int main(void)
{
int units = 20; // stückzahl
double cost_per_unit = 1.5; // stückkosten
double total_cost = units *
cost_per_unit; // gesamtkosten
// %f wird durch den wert von total_cost ersetzt
printf("Die Gesamtkosten betragen %f €.", total_cost);
getchar();
return 0;
}
Dieses Programm berechnet die Kosten, Nach der Formel Stückkosten * Anzahl der Stücke. int units = 20 ist eine Variable, die die Anzahl der Stücke enthält. Ähnlich wie mit dem x aus Mathe kann man units *
cost_per_unit anstelle von 20 * 1.5 rechnen.
Die Begriffe int und double stehen für dabei Datentypen. Jede Variable hat einen Datentyp und speichert einen Wert, der Zum Datentyp der Variable passt:
Die Begriffe int und double stehen für dabei Datentypen. Jede Variable hat einen Datentyp und speichert einen Wert, der Zum Datentyp der Variable passt:
int ist der Datentyp für Ganze Zahlen (Zahlen wie -2, -1, 0 , 1, 2 ...)
double ist der Datentyp für Brüche (Zahlen wie -2.5, -1.34, 0.001, ...)
Wenn wir also int units = 20; schreiben, lassen wir nur Ganze Zahlen zu, int units = 20.5; wäre also falsch.
Was bringen Variablen? Wir können mit mit units oder cost_per_unit rechnen, auch wenn wir die konkreten Werte nicht kennen, weil die erst später z.B. durch den Benutzer des Programms festgelet werden.
Bspw. kann man mit dem Befehl scanf der Wert einer Variable vom Benutzer festgelegt werden:
#include <stdio.h>
int main(void)
{
int units; // stückzahl (noch
unbekannt)
printf("Geben
Sie die Stueckzahl an: \n");
scanf("%d", &units); // liest
die stückzahl von der konsole ein.
double cost_per_unit = 1.5;
double total_cost = units * cost_per_unit;
// %f
wird durch einen bruch ersetzt
printf("Die
Gesamtkosten betragen %f EURO.",
total_cost);
getchar();
getchar(); //
doppelt hält manchmal besser
return 0;
}
Beachte, die Schreibweise von scanf("%d", &units); : "%d" legt das Eingabeformat fest, der Variable
units wird ein Amper-stand angefügt. %d steht dabei für eine Dezimalzahl. Das Zeichen & weist den Wert der Eingabe der Variable units zu. Die Erklärung warum das funktioniert dazu folgt später im Abschnitt zu Pointern.
Datentypen
Ok jetzt zum technischen Teil: int units zeigt auf einen festen Speicherbereich. In dem Speicherbereich liegt der Wert z.B. 20 in der Form von Bits (Nullen und Einsen). Durch den Datentyp weis C, den Wert 20 in die passende Folge von Bits zu übersetzen. Außerdem hat jeder Speicherbereich eine feste Größe, die durch den Datentyp vorgegeben wird. Und weil wir nicht unendlich viel Speicher haben, können wir nicht unbegrenz große Zahlen speichern.
Mit Variablen geht man jetzt so um:
int units; // legt
die variable mit namen units
// vom typ int an
units = 20; //
definiert einen hübschen wert für units
units = 21; // der
alte wert 20 wird durch 21 ersetzt
units = units + 1; /* moment macht das sinn?
* ja! = bedeutet, dass
der wert auf der
* rechten seite, der
variable units zugewiesen
* wird. also steht
dort: neuer wert von units
* = alter wert + 1
*/
Schick und was ist jetzt mit den nackigen Mädels? Ähm ... also ... schau mal wir können auch Buchstaben speichern: char character = 'a';. Das wir jetzt das A in Anführungsstriche setzen hat einfach den Grund, dass an dieser Stelle niccht nach einer Variable gesucht wird, die a heist.
Hier eine Knappe übersicht, was es sonst noch so gibt.
int integer;
|
Ganze Zahl.
|
unsigned int unsigned_integer;
|
Ganze Zahl ohne Vorzeichen (Natürliche Zahl)
|
long long_integer;
|
Ganze Zahl, ermöglicht aber, dass größere Zahlen gespeichert werden
können.
|
unsigned long unsigend_long_integer;
|
Selbe Geschichte nur ohne Vorzeichen.
|
float
floating_point_number;
|
Fließkommazahl (Bruch)
|
double
double_precision_number;
|
Auch eine Fließkommazahl, aber mit mehr Nachkommastellen, wums und so
|
char
character;
|
Ein einzelner Buchstabe
|
Für den Umsteiger: Richtig es gibt keine Booleans und keine Strings! Für den Einsteiger: Einfach den Satz überlesen. Eine Übersicht aller anderen Datentypen gibt es hier.
Und wieviel Speicher verbraucht jetzt z.B. ein Buchstabe? Das lässst sich mit dem Befehl sizeof herausfinden:
#include <stdio.h>
int main(void)
{
printf("Variablen
vom Typ char belegen %u byte(s) Speicher\n", sizeof(char));
printf("Variablen
vom Typ int belegen %u byte(s) Speicher\n", sizeof(int));
printf("Variablen
vom Typ long belegen %u byte(s) Speicher\n", sizeof(long));
getchar();
return 0;
}
Operatoren
Zu den Datentypen gibt es noch die passenden Operatoren, wie
+, -, * etc. Dazu sei
int x = 3;
int y = 4;
Wir können mit diesen Zahlen die üblichen
Standartberechnungen durchführen:
Addition:
x = y + 2; // x = 5, y = 4
Subtraktion:
x = y - 1; // x = 3, y = 4
Vorzeichenwechsel:
x = - y; // x = -4, y = 4
Multiplikation:
y = x * 2; // x = 3, y = 6
Division
x = 8 / y; // x = 2, y = 4
Modulo
(Rest beim Teilen)
y = 5 % 2; // x = 1, y = 4
Wenn wir den Wert x um 5 erhöhen wollen können wir x = x + 5; schreiben dafür gibt
es jedoch eine Kurzform x +=5;.
Diese funktioniert auch bei den anderen Operatoren. Anstelle von x = x + 1;
kann man auch x++ schreiben.
Analog gibt es auch x--.
Also wenn int x = 3; deklariert wird, dann ergibt x++ den Wert vier. Bei den operatoren gilt die übliche Regel: Punktrechnung vor Strichrechnung. Mit den Pluszeichen musss man etwas aufpasssen:
int x = 0;
x = 3 * x++; //
ergibt 3 * 0 + 1 = 1
int x = 0;
x = 3 * ++x; // ergibt 3 * (0 + 1) = 3
Ansonsten gibts aber auch noch die üblichen Klammern:
int x = 0;
x = 3 * (x + 1); // ergibt 3 * (0 + 1) = 3
Das Zusammenspiel von Variablen und
Operatoren verdeutlicht folgendes Programm:
#include <stdio.h>
int main(void)
{
int x = 3;
int y = 4;
x++; // x = 4
int c;
c = x; // c = 4
c--; // c = 3, x = 4
c *= x - y; // c = 0;
printf("x = %d ", x);
printf("y = %d ", y);
printf("c = %d ", c);
getchar();
return 0;
getchar();
return 0;
}
Beachte, dass c = x;
den Wert von x kopiert, x aber unverändert bleibt, wenn sich c ändert.
Keine Kommentare:
Kommentar veröffentlichen