Home Fachinformatiker Programmierung
Einführung C
C-Programmierung unter Unix/Linux
Kommentar
Ein Kommentar wird beim Übersetzen nicht beachtet. Ein Kommentar beginnt mit /* und endet mit */. Er kann sich über mehrere Zeilen erstrecken, darf aber nicht selbst wieder einen Kommentar enthalten.
| #include<Dateiname> | Präprozessordirektive zur Einbindung einer Informationsdatei (Bibliothek z. B. stdio.h), die es ermöglicht, bestimmte Funktionen( z.B. printf(), scanf() )dieser Datei im Programm zu verwenden. |
| main() | Beginn des Hauptprogrammes |
| return<Wert> | Gibt einen Wert zurück (Ansi-C: ist für die Funktion der Datentyp void vorgesehen, so kann auf return verzichtet werden). |
| { } | Begrenzugen eines Programmblockes |
| ; | Abschließendes Zeichen für Deklarations-, Defintions- und Anweisungzeilen. |
printf
Funktion zur Ausgabe von Text und Variablen > standardmäßig am Bildschirm.
Sonderzeichen
| \n | Zeilenvorschub, entspricht RETURN bei der Tastatureingabe |
| \t | Tabulator, auf dem Bildschirm wird ein Tabulator-Sprung gemacht |
| \r | Carrige Return, unter UNIX irrelevant. Unter DOS besteht ein Zeilenende aus |
| \f | Irrelevant für Bildschirm und Tastatur, bewirkt unter einer Druckausgabe einen Seitenvorschub (formfeed) |
| \0 | NULL, wird intern für eine String-Endmarkierung verwendet. wird manchmal auch bei Druckersequenzen bentzt. |
| \\ | Backlash, erzeigt ein \ auf dem Bildschirm |
| \'A | Erzeugt ein Hochkomma auf dem Bildschirm |
| \" | Erzeugt Anführungszeichen, die ja sonst schwerlich darstellbar sind |
scanf
Funktion zur Eingabe von Variablen > standardmäßig über Tastatur
Formatelemente in C für scanf() und printf() verwendbar:
| %d | vorzeichenbehaftete Ganzzahlen (dezimal) |
| %i | vorzeichenbehaftete Ganzzahlen (dezimal) |
| %u | vorzeichenlose Ganzzahlen (dezimal) |
| %o | vorzeichenlose Ganzzahlen (oktal) |
| %x | vorzeichenlose Ganzzahlen (hexadezimal) |
| %f | Fließkommazahl %e Fließkommazahl (exponentiell) |
| %c | ein Zeichen |
| %s | eine Zeichenkette |
Grundlegende Variablentypen
| int | - 32 768 ... 32 767 (16 Bit Maschinen) - 2 147 483 648 ... 2 147 483 647 (32 Bit Maschinen) |
| unsigned int | 0 ... 65 535 (16 Bit Maschinen) 0 ... 4 294 967 295 (32 Bit Maschinen) |
| short int | - 32 768 ... 32 767 |
| unsigned short int | 0 ... 65 535 |
| long int | - 2 147 483 648 ... 2 147 483 647 |
| unsigned long int | 0... 4 294 967 295 |
| char | alle ASCII-Zeichen , das sind alle Zeichen, die man auf dem Bildschirm darstellen kann |
| unsigned char | alle ASCII-Zeichen |
| float | float -10 ^38 ... 10 ^38 |
| double | -10 ^308 ... 10 ^308 |
Bedingungen und Vergleiche
| == | gleich beide Bedingungen sind gleich |
| != | ungleich / nicht gleich beide Bedingungen sind nicht gleich |
| > | größer die erste Bedingung ist größer als der zweite |
| >= | größer oder gleich die erste Bedingung ist größer oder gleich der zweiten |
| < | kleiner die erste Bedingung ist kleiner als die zweite |
| <= | kleiner oder gleich die erste Bedingung ist kleiner oder gleich der zweiten |
| && | logisches und beide Bedingungen müssen wahr sein |
| || | logisches oder eine der Bedingungen muss wahr sein |
| ! | Negation die folgende Bedingung muss falsch sein |
Rangfolge der Opertoren
| <, <=, >, >= | hat Vorrang vor | ==, != | hat Vorrang | &&, || |
Schleifen, Abfragen usw.
If- Abfrage
Trifft die Bedingung zu, so wird die Anweisung ausgeführt. Es darf im Ja-Zweig nur eine Anweisung stehen. Sollten dort mehrere ausgeführt werden, müssen sie zu einer Verbundanweisung zusammengefasst werden
if(Bedingung)
{
Anweisung;
}/* bei einer Anweisung kann die geschweifte Klammer weggelassen werden*/
oder
if(Bedingung)
{
Anweisung 1;
Anweisung 2;
}/*Verbundanweisung*/
Zweifach Auswahl
Ist die Bedingung erfüllt, wird Anweisung 1 ausgefüAhrt sonst die Anweisung2 im else Zweig
if(Bedingung)
{
Anweisung1;
}
else
{
Anweisung2;
}
Fallunterscheidung
für mehrere Anweisungen
switch
{
case Fall1 : Anweisung1;
break;
case Fall2 : Anweisung2;
break;
case
Fall3 : Anweisung3;
break;
default: Anweisung;
}
default nur wenn kein case zutrifft
break:
Der Befehl dient zum Verlassen des Schleifenkörpers, in dem break ausgeführt wird, bzw. der switch-Anweisung
while-Schleife (Kopfgesteuerte Schleife)
Hinter der Bedingung kann nur eine Anweisung formuliert werden. Diese Anweisung wird solange wiederholt, wie die Bedingung zutrifft. Die Anweisung nach der Bedingung kann allerdings eine Verbandanweisung sein. Mehrere Anweisungen können mit Hilfe der geschweiften Klammer zu einem Block zusammen gefasst werden (Verbandanweisung)
Die Bedingung sollte sich innerhalb des Anweisungsblocks auf der while-Schleife verändern, d. h. die Schleife muß die Möglichkeit einer Beendigung haben.
while (Bedingung)
{
Anweisung1;
Anweisung2;
}
do-while Schleife ( fußgesteuerte Schleife)
Die Bedingung sollte sich innerhalb des Anweisungsblocks auf der while-Schleife verändern, d. h. die Schleife muß die Möglichkeit einer Beendigung haben.
Die do-while-Schleife wird mindestens einmal durchlaufen, hier wichtig das Semikolon
Der Schleifenrumpf wird wiederholt, wenn die Bedingung erfüllt ist.
do
{
Anweisungsblock;
}
while (Bedingung);
for-Schleife (Zählschleife)
Bei einer for-Schleife wird zuerst die InitialisieArung abgearbeitet. Solange die Bedingung wahr ist, wird der Schleifenkörper und anschließend die Anweisung ausgeführt. Danach wird wieder die Bedingung geprüft, und so weiter.
for (Variable = Anfangswert; Variablenzählgrenzbedingung; Schrittweite/Zählrichtung)
{
Anweisungsblock;
}
Der Umwandlungsoperator
Bsp.:
int i;
float f; i = (int) f;
Der Umwandlungspoerator (cast-operator) wandelt den Wert von f in ganzzahlig (int).
Nachkommastellen werden abgeschnitten, f selbst bleibt float.
Datenoperationen (der folgende Teil stammt von einem Kollegen)
Datenkanal öffnen
Int.variable = open("name", option, rechte);
| int.variable | Integervariable die als Filediskriptor verwendet wird |
| name | Name der Datei auf die der Datenkanal verweisen soll |
| option
| Was wird auf dem Datenkanal gemacht O_RDONLY oder 0 nur lesen O_WRONLY oder 1 nur schreiben O_RDWR oder 2 lesen und schreiben O_CREAT oder 100 erstellen
Beispiel: Ifd = open ("datei", O_RDWR, 0666); oder Ifd = open ("datei", 2, 0666); |
| rechte
| 0xxx die Null wird als FLAG für das Oktalformat benutzt. xxx vergibt die Rechte für die Datei Bei Lesevorgängen kann die Angabe der Rechte entfallen. |
Daten auf den Datenkanal schreiben
int.rückgabevariable = write (Filediskriptor, variable, anzahl der Bytes);
| int.rückgabevariable A
| integer Variable in die der Rückgabewert der Routine geliefert wird. Entweder die Zahl der geschriebenen Bytes oder –1 für Fehler |
| Filediskriptor | siehe Daten Kanal öffnen |
| Variable
| Variable, deren Inhalt gespeichert werden soll |
| Anzahl der Bytes
| Wie viele Bytes sollen geschrieben werden Der Datenzeiger bestimmt den Anfangspunkt, ab dem geschrieben wird (siehe Datenzeiger setzen) |
Daten auf dem Datenkanal lesen
int.rückgabevariable = read (Filediskriptor, variable, anzahl der Bytes);
| int.rückgabevariable
| integer Variable in die der Rückgabewert der Routine geliefert wird. Entweder die Zahl der gelesenen Bytes oder –1 für Fehler |
| Filediskriptor | siehe Daten Kanal öffnen |
| Variable
| Variable, deren Inhalt durch die gelesenen Bytes ersetzt werden soll |
| Anzahl der Bytes
| Wie viele Bytes sollen gelesen werden Der Datenzeiger bestimmt den Anfangspunkt, ab dem geschrieben wird (siehe Datenzeiger setzen) |
Datenzeiger setzen
lseek (filediskriptor, ipos, Startpunkt);
| Filediskriptor | siehe Daten Kanal öffnen |
| ipos | integer Wert, der mit dem Startwert zusammen die Position des Datenzeigers ergibt |
| Startpunkt
| 0 Anfang der Datei 1 Aktuelle Position des Datenzeigers 2 Ende der Datei |
Quelle:
InBit, Paderborn
Jetzt lerne ich C Markt&Technik
