Einführung in C Programmierung 3-1
Warum die Programmiersprache C lernen? C Programme sind leicht zwischen verschiedenen Systemumgebungen portierbar. C ist eine geeignete Sprache zum Aufbau einer Programmbausteinbibliothek. C hat die Assemblerprogrammierung weitgehend ersetzt. C ist die Sprache für Systemprogrammierung unter UNIX und anderen Betriebssystemen. C ist eine gute Ausgangsbasis für Programmierung in C++ und JAVA. Geschichte der Sprache C 3-2
Eigenschaften der Sprache C C als Programmiersprache Nr. 1. Die Sprache ist klein, die Möglichkeiten sind groß. Die Sprache ist im Gegensatz zu Pascal frei von Dialekten. Portierungsaufwand läßt sich für Kenner relativ gering halten. Viele sehr gute Compiler verfügbar. Umfangreiche Bibliotheken (normiert, aber kein Sprachbestandteil). Fehleranfällige, u.u. schwer lesbare Programmiersprache. C hängt eng mit UNIX zusammen. C als Basis für C++. Meinung eines Studenten: C das Rasiermesser ohne Handgriff. 3-3
Vorteile der Programmiersprache C C hat einen kleinen, leicht zu erlernenden Sprachumfang, die C-Programme sind kompakt und schnell, C ist weitgehend standardisiert, die Quellprogramme sind portabel und laufen ohne oder mit geringen Änderungen auf unterschiedlichsten Rechnern und Betriebssystemen, C verbindet die Vorzüge einer höheren Programmiersprache wie Pascal mit Leistungsfähigkeit einer Assemblersprache, umfangreiche Bibliotheken. 3-4
Was tut dieses Programm in C? #include <stdio.h> int v, i, j, k, l, s, a[99]; main () { for ( scanf ("%d", &s); *a - s; v = a [ j *= v ] a [ i ], k = i<s, j += (v = j<s && (!k &&!!printf (2 + "\n\n%c" - (!l <<!j ), " #Q" [ l^v? (l^j) &1:2]) && ++l a[i]<s && v && v-i+j && v+i-j)) &&!(l%=s), v (i==j? a[i+=k] = 0 : ++a[i]) >= s*k && ++a[--i]) ; printf ("\n\n"); } 3-5
Ergebnis: Q# # # # Q# # # # # # Q # # # #Q# # # # Q # # # Q # # #Q# # Q # # #Q# # # # # #Q# # # # Q # #Q# # Q # # # Q # # # # #Q# # # # Q # usw. 3-6
Programme in C 3. Einführung in C Programmierung Programm in C besteht aus selbständigen Programmeinheiten Funktionen; jede Funktion besteht weiter aus dem Preprozessorteil (Befehlen für C-Preprozessor), Deklarationsteil (Deklarationen und Definitionen von Datenobjekten von verschiedenen Typen), Anweisungsteil (Block, resp. Blockanweisung, d.h. Folge von Anweisungen) 3-7
Das erste Programm in C 3. Einführung in C Programmierung Beispiel (zwei unterschiedliche Formattierungen): #include <stdio.h> /* Bibliothek von E/A Operationen */ main () /* Programmkopf (Programmanfang) */ { /* Blockanfang, keine Datenobjekte */ printf ( Guten Tag\n ); /* Ausgabe der Zeichenkette */ } /* Blockende */ oder #include <stdio.h> /* Bibliothek von E/A Operationen */ main () { /* Programmkopf (Programmanfang) */ printf ( Guten Tag \n ); /* Ausgabe der Zeichenkette */ } /* Blockende */ 3-8
Ausgabe mit printf Der Funktionskopf von printf besitzt die Form: int printf (char *format, arg1, arg2, ); Die Syntax der Formatangabe lautet: % [ Flag ] [ Breite ] [. Präzision ] [ Präfix ] Typ Beispiele: printf ( 24 + 12 = %d \n, 24 + 12); printf ( 13 * 17 = %d \n, 13 * 17); 3-9
Zusammenfassung 3. Einführung in C Programmierung C ist formatfrei und benötigt keine Zeilennummern, das heißt, Sie können das Aussehen Ihres Programms frei bestimmen. C besteht nur aus Funktionen. Die Funktion main muß in jedem Programm genau einmal vorkommen. Jeder Funktionskörper (Block) beginnt mit { und endet mit }. Jede Anweisung muß mit einem Semikolon abgeschlossen werden. Kommentare werden im Programm mit /* eingeleitet und mit */ beendet. Die meisten Funktionen, die zur Erstellung eines Programms nötig sind, werden in sogenannten Bibliotheken mitgeliefert. Eine der wichtigsten Bibliotheksfunktionen ist printf. Durch sogenannten Escape-Sequenzen kann die Ausgabe von Texten gesteuert werden. Des weiteren kann printf Berechnungen durchführen und Ergebnisse ausdrucken. 3-10
Lexikalische Einheiten der C Sprache <Buchstabe> ::= A B C X Y Z a b c y z < Ziffer > ::= 0 1 2 3 4 5 6 7 8 9 <Sonderzeichen> ::= + - * / = ( ) [ ] { } < >! & # % _ ^ ~ \., ; :? <Trennzeichen> <Reserviertes_Wort> <Trennzeichen> ::= <blank> <newline> <tab> <Reserviertes_Wort> ::= auto break case char const continue default long do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 3-11
Reservierte Wörter in C ( keywords ) auto extern signed break float sizeof case for static char goto struct const if switch continue int typedef default long union do register unsigned double return void else short volatile enum while 3-12
Allgemeine Struktur des Programms in C: Kommandos für Preprozessor #include <stdio.h> /* I/O Bibliothek */ Definitionsteil Definitionen und Deklarationen von globalen, statischen und externen Datenobjekten Block [<Typ>] main () /* Hauptfunktion */ { /* Blockanfang */ Definitionen von lokalen Datenobjekten... Anweisungen return (0); /* Rücksprung in System */ } /* Blockende */ 3-13
Definitionen wir unterscheiden: Deklaration nur Typbeschreibung, ohne Speicherbelegung Beispiel: extern unsigned int P, Q; Definition Typbeschreibung plus Speicherreservierung Beispiel: int i, j, k; kurz m, n; Definition mit Initialisierung Beispiel: int i = 3; 3-14
Konstanten (Definitionen von Konstanten) dezimal eine Folge von Dezimalziffern, die nicht mit 0 beginnt oktal eine Folge von Ziffern 0,..., 7, die mit 0 beginnen soll hexadezimal eine Folge von Ziffern 0, 1,..., 9, A, B,..., F, die mit Zeichen 0x oder 0X beginnen soll long Konstanten eine der oben definierten Konstanten, die mit Zeichen l oder L beendet werden soll reele Konstanten (Gleitkommakonstanten, floating point constants) im Format ± X...X.X...X E±XX oder ± X...X.X...X e±xx Zeichenkonstanten einzelne Zeichen in Apostrophen, z.b.'a' Stringkonstanten eine Folge von Zeichen in Anführungszeichen 3-15
Beispiele: 3. Einführung in C Programmierung 23, 1, -2048, 32767, -54,... 077, 01, 0247, 0177777,... 0xA1, 0XCC, 0x256, 0xFFFFFFFE,... 10L, -2440L, 3256743l, 03777777777l,... 3.45, 3.45E-2, 1.16e12, 9.,.86,.5E6, 2e3,... 'B', 'r', '\n', '\015', '\\', '\'', '\0',... "PETER", "A", "Regensburg",... Vorsicht! Konstante 'A' belegt 1 Byte, "A" 2 Bytes! A \0 3-16
Eingabe mit scanf Der Funktionskopf von scanf besitzt die Form: int scanf (char *format, arg1, arg2, ); Die Syntax der Formatangabe lautet gleich wie bei der Funktion printf: % [ Flag ] [ Breite ] [. Präzision ] [ Präfix ] Typ Aber! Die Operanden müssen durch Adressen angegeben werden! Beispiele: scanf ( %d %d, &x, &y); scanf ( %d %c %f, &NUMMER, &ZEICHEN, &KOEFF); 3-17
Rechnen in C 3. Einführung in C Programmierung Arithmetische Operatoren überlagerte + Addieren Subtrahieren * Multiplizieren / Dividieren (liefert die Quote) % Dividieren modulo (ganzzahliges liefert den Rest!) Adressoperator & liefert die Adresse des Operanden 3-18
3-19
/* Programm C2_1.c Einfache ganzzahlige Berechnungen */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { int x, y; /* Definition von Variablen */ printf (" \n \t \t R e c h e n p r o g r a m m 1 \n\n"); /* Ausgabekopf */ printf ("\n Bitte x eingeben : "); /* Anfrage für Eingabe von x */ scanf ("%i", &x); /* Eingabe von x */ printf ("\n Bitte y eingeben : "); /* Anfrage für Eingabe von y */ scanf ("%i", &y); /* Eingabe von y */ printf ("\n\n %i + %i ist %i", x, y, x+y); /* Berechnungen und */ printf ("\n\n %i - %i ist %i", x, y, x-y); /* Ausgaben */ printf ("\n\n %i * %i ist %i", x, y, x*y); /* von Ergebnissen */ printf ("\n\n %i / %i ist %i", x, y, x/y); printf ("\n\n %i %% %i ist %i", x, y, x%y); printf ("\n\n"); } 3-20
/* Programm C2_2.c Einfache Gleitkommaberechnungen */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float x,y; /* Definition von Variablen */ printf ("\n\t\t R e c h e n p r o g r a m m 2 \n\n"); printf ("\n Bitte x eingeben : "); scanf ("%f", &x); printf ("\n Bitte y eingeben : "); scanf ("%f", &y); printf ("\n\n %f + %f ist %f", x, y, x+y); printf ("\n\n %f - %f ist %f", x, y, x-y); printf ("\n\n %f * %f ist %f", x, y, x*y); printf ("\n\n %f / %f ist %f", x, y, x/y); printf ("\n\n"); } 3-21
/* Programm C2_3.c Einfache Gleitkommaberechnungen mit formattierten Ausgaben */ #include <stdio.h> main ( ) { float x,y; printf ("\n\t\t R e c h e n p r o g r a m m 3 \n\n"); printf ("\n Bitte x eingeben : "); scanf ("%f", &x); printf ("\n Bitte y eingeben : "); scanf ("%f", &y); printf ("\n\n %8.2f + %8.2f ist %8.4f", x, y, x+y); printf ("\n\n %8.2f - %8.2f ist %8.4f", x, y, x-y); printf ("\n\n %8.2f * %8.2f ist %8.4f", x, y, x*y); printf ("\n\n %8.2f / %8.2f ist %8.4f", x, y, x/y); printf ("\n\n"); } 3-22
/* Programm C2_4.c Einfache Währungsrechnungen */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float u_faktor, betrag; /* Definition von Variablen */ printf ("\n\t\t W ä h r u n g s r e c h n e n \n\n"); printf ("\n Bitte Umrechnungsfaktor eingeben : "); scanf ("%f", &u_faktor); /* Umrechnungsfaktor eingeben */ printf ("\n Bitte DM-Betrag eingeben : "); scanf ("%f", &betrag); /* Betrag in DM eingeben */ printf ("\n %.2f DM entspricht ", betrag); /* Ausgabe */ printf ("%.2f Einheiten der Fremdwährung \n\n", betrag*u_faktor); } 3-23
/* Programm C2_5.c */ /* Temperaturumrechnung */ 3. Einführung in C Programmierung #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float celsius; /* Definition von Variablen */ printf ("\n\t Celsius -> Fahrenheit Grad Umrechnung \n\n"); printf ("\n Bitte Grad Celsius eingeben : "); scanf ("%f", &celsius); /* Grad Celsius eingeben */ printf ("\n %.1f Grad Celsius entsprechen ", celsius); /*Ausgabe*/ printf ("%.1f Grad Fahrenheit. \n\n", celsius * 9 / 5 + 32); } 3-24
/* Programm C2_6.c Anzahl der Herzschläge */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float schlaege, alter; /* Definition von Variablen */ printf ("\n\t A n z a h l d e r H e r z s c h l ä g e \n\n"); printf ("\n Herzschläge pro Minute eingeben : "); scanf ("%f", &schlaege); /* Herzschläge eingeben */ printf (" Alter in Jahren eingeben : "); scanf ("%f", &alter); /* Alter eingeben */ printf ("\n Ihr Herz hat seit Ihrer Geburt "); /* Ausgabe */ printf ("%f ", schlaege * 60 * 24 * 365.25 * alter); printf ("mal geschlagen. \n\n"); } 3-25
Zuweisungen in C Zuweisungsoperator: = /* Programm C2_0.c Einfaches ganzzahliges Addieren */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { int a, b, c ; /* Definition von Variablen */ printf (" \n \t \t A d d i t i o n a + b \n\n"); /* Ausgabekopf */ printf (" a = "); /* Anfrage für Eingabe von a */ scanf ("%d", &a); /* Eingabe von a */ printf (" b = "); /* Anfrage für Eingabe von b */ scanf ("%d", &b); /* Eingabe von b */ c = a + b ; /* Berechnung */ printf ("\n %d + %d = %d \n\n", a, b, c) ; /* Ausgabe */ return 0; } 3-26
/* Programm C3_1.c Einfache ganzzahlige Berechnungen */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { int x,y; int summe,differenz,produkt,quote,rest; /* Definition von Variablen */ printf ("\n\t\t R e c h e n p r o g r a m m 1 \n\n"); /* Ausgabekopf */ printf ("\n Bitte x eingeben : "); /* Anfrage für Eingabe von x */ scanf ("%i", &x); /* Eingabe von x */ printf ("\n Bitte y eingeben : "); /* Anfrage für Eingabe von y */ scanf ("%i", &y); /* Eingabe von y */ 3-27
} summe = x + y; /* Auswertungen */ differenz = x - y; produkt = x * y; quote = x / y; rest = x % y; printf ("\n\n %i + %i ist %i", x, y, summe); /* Ausgaben */ printf ("\n\n %i - %i ist %i", x, y, differenz); /* von Ergebnissen */ printf ("\n\n %i * %i ist %i", x, y, produkt); printf ("\n\n %i / %i ist %i", x, y, quote); printf ("\n\n %i %% %i ist %i", x, y, rest); printf ("\n\n"); 3-28
/* Programm C3_4.c Einfache Währungsrechnungen */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float u_faktor, betrag, ergebnis; /* Definition von Variablen */ printf ("\n\t\t W ä h r u n g s r e c h n e n \n\n"); printf ("\n Bitte Umrechnungsfaktor eingeben : "); scanf ("%f", &u_faktor); /* Umrechnungsfaktor eingeben */ printf ("\n Bitte DM-Betrag eingeben : "); scanf ("%f", &betrag); /* Betrag in DM eingeben */ ergebnis = betrag * u_faktor; /* Auswertung */ printf ("\n %.2f DM entspricht ", betrag); /* Ausgabe */ printf ("%.2f Einheiten der Fremdwährung \n\n", ergebnis); } 3-29
/* Programm C3_5.c Temperaturumrechnung */ #include <stdio.h> /* E/A Bibliothek */ main ( ) /* Nur Hauptmodul */ { float celsius, fahrenheit; /* Definition von Variablen */ printf ("\n\t Celsius -> Fahrenheit Grad Umrechnung \n\n"); printf ("\n Bitte Grad Celsius eingeben : "); scanf ("%f", &celsius); /* Grad Celsius eingeben */ fahrenheit = celsius * 9.0 / 5.0 + 32.0; printf ("\n %.1f Grad Celsius entsprechen ", celsius); printf ("%.1f Grad Fahrenheit. \n\n", fahrenheit); } 3-30
Zusammenfassung 3. Einführung in C Programmierung Include-Dateien finden sich in beinahe jedem C-Programm. Sie enthalten u.a. Definitionen für die einzelnen Funktionen. Die am häufigsten benötigte Include-Datei ist stdio.h. C kennt verschiedene Datentypen. Sie haben den Typ int für ganze Zahlen und den Typ float für Gleitkommazahlen kennengelernt. Variablennamen können bis zu 31 Zeichen lang sein. Die Funktion scanf dient der Eingabe von Daten. Sie ist nur eine von mehreren Funktionen, die diesem Zweck dienen. Platzhalter in der Funktion printf können um eine Angabe zur formatierten Ausgabe von Zahlen erweitert werden. Als weitere Escape-Sequenz haben Sie \t kennengelernt. Diese Sequenz bewirkt einen Tabulatorsprung um acht Stellen (üblich). C ist case-sensitiv, d.h. es wird zwischen Groß- und Kleinschreibung unterschieden. 3-31
Als Zuweisungsoperator verwendet C das Gleichheitszeichen (=). Bei einer Wertzuweisung darf auf der linken Seite des Zuweisungsoperators nur eine Variable stehen. Z. B.: C = A + B; gesamtsumme = 2 * summe; z = 12; bereich = X1 + 40/X2; ergebnis = 6*(A B/2); Variablen können bei der Deklaration gleichzeitig initialisiert werden. Der Typ double ist der bevorzugte Gleitkommatyp (Fließkommatyp). 3-32