Beruflich Dokumente
Kultur Dokumente
C unterscheidet Gro- und Kleinschreibung, d.h. Standartbefehle und Schlsselwrter sind stets klein geschrieben
/* Dies ist ein Kommentar */ # include <stdio.h> # include <math.h> # include <conio.h>
3. Das Hauptprogramm:
main ( ) dies ist das Hauptprogramm und fester Bestandteil jedes Programms in C { 1. Schritt innerhalb jeden Programms ist die Definierung der verwendeten Variablen int Zahla, Zahlb; float Parameter1; getch ( ); return 0; Abschlu eines Programms
} Daneben knnen beliebig viele Unterprogramme nach folgenden Muster enthalten sein: Funktionsname (Variable1, Variable2, Variable3,...) 4.
Anweisungen:
a) Variablentypen: int long int short int unsigned int unsigned short int unsigned long int char unsigned char float double %c %s %f %le %e %E %g %x %X %o %u %% b) mathematische Ausdrcke: + % Addition Subtraktion Modulo (berechnet den Rest einer Operation) * / Multiplikation Division %d %ld %u [Integer] Ganzzahlige Zahlen - 32 768 ... 32 767 - 2 147 483 648 ... 2 147 483 647 - 2 147 483 648 ... 2 147 483 647 - 32 768 ... 32 767 0 ... 65 535 0 ... 4 294 967 295 0 ... 65 535 0 ... 4 294 967 295 (16 Bit) (32 Bit) (16 Bit) (32 Bit)
[Charakter] ein Zeichen bzw. alle ASCII-Zeichen alle ASCII-Zeichen Zeichenkette char* , bzw. char [] [Floating Piont] Fliekommazahlen - 10^38 ... 10^38 Fliekommazahlen mit doppelten Wertebereich - 10^308 ... 10^308 Fliekommazahl in Exponentialschreibweise (23e+432) wie %e nur mit groen E (23E+432) Exponential- oder Fliekommaschreibweise, in Abhngigkeit vom Wert Hexadezimal mit kleinem a...f Hexadezimal mit groem A...F Oktalzeichen wie %d, aber nur Werte ohne Vorzeichen gibt ein % am Bildschirm aus
c) Sonderzeichen: \n \t \b \r Zeilenvorschub, entspricht RETURN Tabulator, auf den Bildschirm wird ein Tabulatur-Sprung gemacht Backspace, letztes Zeichen wird gelscht Carriage Return. Unter DOS besteht ein Zeilenende aus \n\r
bewirkt bei der Druckerausgabe einen Seitenvorschub NULL, wird intern fr String-Endmarkierungen verwendet Backlash, erzeugt ein \ auf dem Bildschirm Erzeugt ein Hochkomma auf dem Bildschirm Erzeugt Anfhrungszeichen auf dem Bildschirm gibt einen Text auf den Bildschirm wieder. printf(Dies ist ein Text); printf(Das Zeichen %c ist im ASCII-Code ein %d ,Zeichen, Zeichen); liet eine Variable vom Bildschirm ein. scanf(%d, &Zahl);
g) putchar: gibt einen char -Zeichen aus z.B. char putchar (`a); h) clrscr (); lscht den Bildschirm
5. Bitmanipulation:
Aufruf: ~ Zahl :
# include <zeig_bin.h> zeig_binaer (Zahl1); => z.B. 0000 1111 1111 0000 0000 1111 & 0001 0110 = 0000 0110 0000 1111 | 0001 0110 = 0001 1111 0000 1111 ^ 0001 0110 = 0001 1001 0000 1111 0011 1100
Zahla & Zahlb beide Zahlen werden bitweise mit und verknpft
Zahla | Zahlb
z.B.
z.B.
Die Bits der Zahl werden um X Stellen nach links verschoben Die Bits der Zahl werden um X Stellen nach rechts verschoben
<< 2 : =>
6. Typenumwandlung (Casting):
( Zieltyp ) Variable int Zahl =4; d = ( double ) Zahl == != > >= < <= && || ! z.B. ( die Variable Zahl ist hier eine ganze Zahl ) ( die Variable Zahl ist hier eine Fliekommazahl)
7. Vergleichsoperation:
gleich ; beide Ausdrcke sind gleich ungleich ; beide Ausdrcke sind nicht gleich grer ; der erste Ausdruck ist grer als der zweite grer gleich ; der erste Ausdruck ist grer oder gleich dem zweiten kleiner ; der erste Ausdruck ist kleiner als der zweite kleiner gleich ; der erste Ausdruck ist kleiner oder gleich dem zweiten logisches und ; beide Ausdrcke mssen wahr sein logisches oder ; einer der Ausdrcke mu wahr sein Negation ; der folgende Ausdruck mu falsch sein
8. Schleifen:
Es gibt zwei unterschiedliche Arten von Schleifen: vor- und nachprfende Schleifen while : while (Bedingung) { Schleifenkrper Anweisung } do { Schleifenkrper while (Bedingung);
do ... while :
for :
for (Initialisierung; Bedingung; Anweisung) z.B. for ( i=0 ; i<10 ; i=i+1 ) { Schleifenkrper }
continue : break : if :
Schleife wird unterbrochen und direkt zum Vergleich gesprungen Schleife wird unterbrochen und direkt zum nchsten Befehl nach der Schleife gesprungen if ( Bedingung ) { Zweig 1 } else { Zweig 2 } Bedingung wahr, dann Zweig 1 Bedingung falsch, dann Zweig 2 z.B. if ( t==1 ) printf (Eins) ; else if ( t==2 ) printf (Zwei) ; else if ( t==3) : else printf (keine Ahnung); z.B. Aktion 1 ; break; Aktion 2 ; break; Aktion 3 ; break; Aktion 4 ; switch ( t ) { case 1 : printf (Eins); break; case 2 : printf (Zwei); break; case 3 : printf (Drei); break; default: printf (keine Ahnung); }
if & else if :
switch & case : switch (Variable) { case Term 1: case Term 2: case Term 3: default: }
9. Unterprogramme / Funktionen:
Unterprogramme dienen dazu, mehrmals benutzte Programmsequenzen zu einer Sequenz zusammenzufassen Die so entstehenden Unterprogramme stehen auch fr zuknftige Programme zu Verfgung (Modularisierung) Die Programme werden krzer und bersichtlicher geringere Fehleranflligkeit scanf (...) printf (...) pow (...) zum Einlesen von Werten zur Ausgabe von Werten zur Berechnung von Potenzen
Beispiele:
Allgemeiner Aufbau ein Unterprogramms bzw. einer Funktion: Typ des Rckgabewertes Funktionsname ( formaler Parameter 1, formaler Parameter 2, ...) { Funktionsrumpf Rckgabewert Return...; } z.B. : /* Funktion zum Vertauschen von zwei ganzen Zahlen */ void swap (int* a, int* b) { int dummy; Festlegung der Variablen innerhalb des Unterprogramms
Will man den Wert eines formalen Parameters in einer Funktion ndern, so braucht man stets eine entsprechende Zeigervariable. Denn sonst merkt das aufrufende Programm von einer Wertnderung in der Funktion nichts. Eine Funktion braucht nicht zwingend einen formalen Parameter: int holeZufallszahl(void) bzw. int holeZufallszahl()
10. Felder :
eindimensionales Feld :
Feldtyp
Die einzelnen Elemente sind: zweidimensionales Feld : Zugriff auf ein einzelnes Element: Feldinitialisierung : bzw. : bzw. :
int feld[7] = {1,2,3,4,5,6,7}; int feld[3][3] = { int feld[][3] = { {1,2,3}, {1,2,3}, {4,5,6}, {4,5,6}, {7,8,9} {7,8,9} }; };
e n tsp rec h e im F e ld
n d e S telle n
intern dargestellt durch : [ h ][ a ][ l ][ l ][ o][ \0] \0 kennzeichnet das Ende eines Strings
main ( ) { char *wochentage[] = { " Montag"," Dienstag "," Mittwoch", " Donnerstag "," Freitag ","Samstag ", "Sonntag" }; int pos; for ( pos= 0; pos< 7; pos++ ) { printf ("\ n % s", wochentage[ pos ]); } }
Strings in Zahlen umwandeln : ~ String Fliesskomma: aber: ~ String ganze Zahl : aber :
double x = atof (char *c) #include <math.h> int n = atoi (char *c) #include <stdlib.h> int laenge = strlen (char *c) #include <string.h> *Zeigername;
12. Zeiger:
Zeigertyp int *zeiger; ~ Ein Zeiger kann whrend des Programmablaufs seine Speicheradresse wechseln (variable Konstante) ~ Zeiger knnen auf beliebige Typen (int, float, char) aber auch auf ganze Felder zeigen, sowie auch Zeiger auf Zeiger erlaubt sind. Achtung: Der Zeigertyp und der Variablentyp/Feldtyp, auf das der Zeiger zeigt, mssen gleich sein ( 77 fload zeiger = &int *zahl 77 : Fehler !!! ) scanf (...) fscanf(stdin, ...) printf (...) fprintf (stdout, ... ) fprintf (stderr, Fehler aufgetreten in der Datei xyz.bat)
13. Standardkanle:
stdin (Standardeingabekanal ist die Tastatur) : ist identisch mit: stdout (Standardausgabekanal ist der Bildschirm) : ist identisch mit: stderr (Standardfehlerkanal) :
r+ w+ a+
zum Lesen und Schreiben ffnen, die Datei mu existieren zum Lesen und schreiben ffnen, wenn die Datei nicht existiert, wird sie erzeugt nur zum Anhngen ffnen, wenn keine Datei existiert, wird sie angelegt (die Fileendmarkierung EOF wird gelscht)
zustzliche Angaben: (werden dem Arbeitsmodus angehngt) b Binrmodus: alle Daten werden ohne Umwandlung in die Datei geschrieben t Textmodus: einige Daten werden umgewandelt (z.B. \n) fclose (zum Schlieen der Datei) : fclose (Dateivariable); fclose (datei);
fscanf : (Die Funktion fscanf liest Informationen aus einer Datei) fscanf (Dateivariable, Variablentyp, Variablenname) Lesen von der Tastatur: bzw. : scanf (%c, &zeichen); fscanf (stdin, %c, &zeichen); fscanf (datei, %c, &zeichen);
fprintf : (Die Funktion fprintf schreibt Informationen in eine Datei) fprintf (Dateivariable, Variablentyp, Variablenname); fprintf (datei, Zahl = %d, zahl);
getc und putc : Mit dieser Funktion hat man die Mglichkeit, Zeichen von (und nach) einer Datei einzeln einzulesen und auszugeben: char getc (Dateivariable)
liefert als Rckgabewert das bergebene Zeichen oder EOF
17. Strukturen:
struct Strukturname { Komponenten }; Hinweis: Die Komponenten mssen nicht den gleichen Datentyp haben. Benutzung der angelegten Struktur : struct Strukturname Feldname[Feldgre]; struct datensatz freunde[10]; struct { }; datensatz char name[50]; char vorname[50]; char telefon[50];
Legt ein Feld mit der entsprechenden Feldgre an und jedes Feld wird mit der entsprechenden Struktur angelegt. Im Beispiel: Es wird ein Feld mit 10 Eintrgen vom Typ datensatz definiert. Es knnen also die Adressen von 10 Freunden verwaltet werden. Oder krzer: struct Strukturname { Komponenten } Feldname[Feldgre]; struct { struktur int zahl; char *text; } *zeiger; struct { } datensatz char name[50] char vorname[50]; freunde[10];
(*zeiger).zahl; zeiger->zahl;
int main ( ) { struct komplexeZa hl { double realTeil ; double imaginaerT eil ; } zahlenFeld [ 2 ];
*/
zahlenFeld [ 0].realTeil = 2.5; zahlenFeld [ 0].imaginaerT eil = 2; zahlenFeld [1].realTeil = 5; zahlenFeld [1].imaginaerT eil = 1.4;
*/
printf ("\ n 1. komplexe Zahl : % lf + j % lf \n", struktur [ 0].realTeil , struktur [ 0].imaginaerT eil ); printf ("\ n 2. komplexe Zahl : % lf + j % lf \n", struktur [1].realTeil , struktur [1].imaginaerT eil ); }
17. Variablen:
Lokale Variablen:
werden in Funktionen vereinbart und sind nur hier sichtbar und gltig.
#include <stdio.h> int k=4; int fakulteat (int n) { int i, wert=1; } void main (void) { int zahl;
Globale Variablen: werden auerhalb von Funktionen vereinbart und sind in allen Funktionen sichtbar. Hinweis: Globale Variablen sollten nur in Ausnahmefllen benutzt werden, da sie hufig inhaltliche Fehlerquellen darstellen.
Funktionsparameter: sind die Speicherpltze, die bei der Ausfhrung des } Unterprogramms Werte vom Hauptprogramm erhalten, die fr Berechnungen notwendig sind. bergabe von Funktionsparametern: ~ Call by value: Eine nderung von Funktionsparametern im int verdoppe ln (int n ) Unterprogramm bewirkt keine nderung des entsprechenden Wertes im Hauptprogramm.
{ n = n*2 }
Ausgabe: 3
void main ( void ) { int zahl = 3; verdoppe ln ( zahl ) printf (" Die Zahl lautet jetzt : % d ",zahl ); } int verdoppe ln (int *n ) { *n = *n * 2 } void main ( void ) { int zahl = 3; verdoppe ln (&zahl) printf (" Die Zahl lautet jetzt : % d ",zahl ); }
~ Call by reference: Eine nderung von Funktionsparametern im Unterprogramm bewirkt eine nderung des entsprechenden Wertes im Hauptprogramm.
Ausgabe: 6
gnjcnhk