Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Warum C?
C wird oft als Midlevel-Sprache bezeichnet. C verbindet die Ubersichtlichkeit strukturierter Hoch sprachen mit der Machtigkeit, Flexibilitat und Hardware nahe von Assembler. C erlaubt die direkte Manipulation von Bits, Bytes und Adressen, also den grundlegenden funktionalen Elementen des von-Neumann-Rechners ideal zur Systemprogrammierung
Warum C? C schrankt den Programmierer in keiner Weise ein Verantwortung liegt beim Programmierer (z.B. keine Fehleruberprufung zur Laufzeit)
In C ist alles programmierbar, was auch in Assembler (also uberhaupt) programmierbar ist. C verlangt keine strenge Typisierung.
C besitzt nur sehr wenige Schlusselworter. C-Kenntnisse fordern das Verstandnis fur grundlegende Prinzipien, die in hoheren Sprachen verborgen werden.
Erstes C-Programm
#include <stdio.h>: Einbinden der Ein-/Ausgabe-Funktionen Programm beginnt stets mit main Ruckgabewert von main ist int printf zur Ausgabe
Zweites C-Programm
#include <stdio.h> int main() { int fahr; double celsius; for (fahr = 0; fahr <= 300; fahr = fahr + 20) { celsius = (5.0/9.0) * fahr - 32; printf("%3d %6.1f\n", fahr, celsius); } return 0; }
Variablenvereinbarung: <Typ> <Name>; for-Schleife: for (<Start>; <Bedingung>; <Inkrement>) <Anweisung>; Block von mehreren Anweisungen: {<Anweisung>; ...} printf mit verschiedenen Formatierungen zur Ausgabe
int printf (<format>, <arg1>, ..., <argn>); <format> String mit Formatierangaben: %d Integer-Zahl %x.yf Fliepunkt-Zahl, mit x Stellen vor dem . und y Stellen danach %c Ein Zeichen %s Zeichenkette <argi> Argumente, die an entsprechender Stelle in <format> eingesetzt werden.
Weitere Grundlagen
#include <stdio.h> int main() { int x, a = 3, b = 4; x = a * b; while ((x == 12) || (x == 24)) { a++; b += 2; x = a * b; } return x; } /* /* /* /* /* a quivalent: while (! ((x != 12) && (x != 24))) { x = (++a) * (b += 2); */ */ */ */ */
Weitere Grundlagen
int main() { int x, a = 3, b = 4; x = a * b; while ((x == 12) || (x == 24)) { a++; b += 2; x = a * b; } return x; } /* /* /* /* /* a quivalent: while (! ((x != 12) && (x != 24))) { */ */ */ */ */
x = (++a) * (b += 2);
while-Schleife: while (<Bedingung>) <Anweisung>; oder do <Anweisung> while (<Bedingung>);, wenn die Bedingung erst nach einem Schleifendurchlauf gepruft werden soll.
Weitere Grundlagen
int main() { int x, a = 3, b = 4; x = a * b; while ((x == 12) || (x == 24)) { a++; b += 2; x = a * b; } return x; } /* /* /* /* /* a quivalent: while (! ((x != 12) && (x != 24))) { x = (++a) * (b += 2); */ */ */ */ */
Abkurzende Zuweisungsoperatoren: +=, -=, *=, /= Jede Zuweisung ist auch ein Ausdruck mit dem Wert der Zuweisung als Ergebnis Inkrementoperatoren ++/--: Reihenfolge von Operator und Variable bestimmt Reihenfolge von Inkrementierung und Auswertung
Schlechter Stil
#include <stdio.h> int main(){ int fahr; for (fahr=0; fahr<=300; fahr = fahr+20) {printf( "%3d %6.1f\n", fahr, (5.0/9.0)*fahr-32); } return 0; } Jeder Befehl in einer eigenen Zeile Einrucken entsprechend der Schachtelungstiefe Kommentare!
Datenstrukturen
Einfache Datentypen: int, char, float, usw. Beispiel: int i; Es gibt keinen boolschen Datentyp! Boolscher Wert mit int: 0 = false, sonst true
Felder (statische Lange) Beispiel: int n[100];
Datenstrukturen
Strukturen Beispiel:
struct Punkt { int x; int y; }; struct Punkt p; p.x = 10; p.y = 12;
Typdenitionen Neue Typen werden mit dem Schlusselwort typedef ver einbart. Beispiele: typedef int length; length ist synonym zu int
typedef struct Punkt { int x; int y; } punkt_t; punkt_t p; p.x = 10; p.y = 12;