Programmiersprachen Einführung in C

Ähnliche Dokumente
Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Einführung in C. EDV1-04C-Einführung 1

Programmiersprachen Einführung in C

Grundlagen der Programmierung

GI Vektoren

Kapitel 2. Einfache Beispielprogramme

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

E-/A-Funktionalität nicht Teil der Programmiersprache

einlesen n > 0? Ausgabe Negative Zahl

Grundlagen der Programmierung

Welche Informatik-Kenntnisse bringen Sie mit?

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

2. Programmierung in C

RO-Tutorien 3 / 6 / 12

RO-Tutorien 15 und 16

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Arrays (Felder/Vektoren)

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C Eine Einführung

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Einführung in die C-Programmierung

2. Programmierung in C

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Übungspaket 9 Logische Ausdrücke

Computergrundlagen Programmieren in C

3.2 Datentypen und Methoden

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Java I Vorlesung Imperatives Programmieren

Vorkurs C++ Programmierung

2 Eine einfache Programmiersprache

Dr. Monika Meiler. Inhalt

Informatik I - Einstiegskurs

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Vorlesung Objektorientierte Programmierung Klausur

Strukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

8.1 Vom Quellcode zur ausführbaren Programm

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Algorithmen implementieren. Implementieren von Algorithmen

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

F Zeiger, Felder und Strukturen in C

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Einführung in die Programmiersprache C

Projekt 3 Variablen und Operatoren

2 Eine einfache Programmiersprache

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Java: Eine kurze Einführung an Beispielen

Organisatorisches. Einführung in die Programmierung in C Hochschule Regensburg Universitätsstraße 31, Regensburg

4. Ablaufsteuerung (Kontrollstrukturen)

C Überlebenstraining

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Elementare Konzepte von

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Programmieren in C / C++ Grundlagen C 4

Grundlagen der Programmierung

Eine Mini-Shell als Literate Program

10 Die Programmiersprache C99: Zusammenfassung

pue13 January 28, 2017

Tutorium Rechnerorganisation

Grundlagen der Informatik 2. Typen

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

Einstieg in die Informatik mit Java

Programmiersprachen Einführung in C

Programmierkurs Python I

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Programmier-Befehle - Woche 10

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

4.4 Imperative Algorithmen Prozeduren

2. Datentypen und Deklarationen

Vorkurs Informatik WiSe 16/17

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

QuickC - Schnellkurs in C

Erste Schritte der Programmierung in C

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Standardkonstrukte in Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA-Datentypen und deren Wertebereich

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Grundlagen der OO- Programmierung in C#

Transkript:

Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i <= 100; i = i + 1) sum = sum + i * i; printf ("The sum from 0.. 100 is %d\n", sum); 2 1

Unser erstes C-Programm Die Sprache C enthält keine Konstrukte für Ein- oder Ausgabe, da diese jeweils stark vom Betriebssystem abhängen. Daher benötigt jedes C-Programm die jeweilige Standardbibliothek stdio.h int main (int argc, char *argv[]) Jedes C-Programm ist selbst eine Funktion, die von der Laufzeitumgebung (i.d.r dem Betriebssystem) aufgerufen wird. Als Ergebnis gibt diese Funktion eine ganze Zahl zurück, wobei negative Zahlen als Fehlercodes interpretiert werden. 3 Unser erstes C-Programm Mit char *argv[] wird dem Hauptprogramm ein Array von char ( Characters ) übergeben (das main dann aber gar nicht nutzt). Arrays werden in C als Pointer auf einen nullterminierten String von Zeichen dargestellt. argv[] enthält also die Speicherstelle des ersten Zeichens dieses Strings, und der Dereferenzierungsoperator * bewirkt, dass der Inhalt dieser Speicherstelle betrachtet wird, und der ist vom Typ char. 4 2

Unser erstes C-Programm int i; /* Deklaration der Variable i als int */ int sum = 0; /* Deklaration der Variable sum und Definition/Initialisierung mit dem Wert 0 */ 5 Unser erstes C-Programm Kontrollstrukturen: For-Schleife for (i = 0; i <= 100; i = i + 1) Startwert Kontrollbedingung Aktion2 Aktion 1 sum = sum + i * i; Die For-Schleife kann auch weit komplexer eingesetzt werden (vgl. spätere Beispiele) 6 3

Unser erstes C-Programm printf ist eine Funktion aus stdio.h Prototyp: printf(const char *format, ) const char *format: Formatstring, z.b. "The sum from 0.. 100 is %d\n %d : Steuerzeichen % : Escape-Zeichen zur Kennzeichnung von Steuerzeichen d : Ausgabe als Dezimalzahl (int) mit Vorzeichen x : Ausgabe als Hexadezimalzahl (int) ohne Vorzeichen f : Ausgabe als Dezimalzahl (double) in der Form (-)mmm.ddd (Anzahl der d s kann spezifiziert werden, z.b. %f3.7 als mmm.ddddddd) 7 Aufgaben Überprüfen Sie, ob die Argumente der Funktion main irgend einen Einfluss haben auf das Ergebnis. Deklarieren Sie i und sum als char. Was passiert? Geben Sie das Ergebnis in sum als Hexadezimalzahl und als Gleitkommazahl aus. 8 4

Umwandlung Fahrenheit-Celsius int fahr, celsius; int upper = 300, lower = 0, step = 20; fahr = lower; while (fahr <= upper) celsius = 5/9*(fahr-32); printf ( %d\t%d\n", fahr, celsius); fahr = fahr + step; 9 Umwandlung Fahrenheit-Celsius Die Umrechnung von Grad Fahrenheit in Grad Celsius kann nach der Formel C = 5/9( F-32) durchgeführt werden Warum funktioniert das angegebene Programm nicht? Wenn Sie den Fehler gefunden haben: Reicht die erzielte Genauigkeit aus? Wie könnte man sie verbessern? Formulieren Sie das Programm mit Hilfe einer for- Schleife. Erzeugen Sie eine möglichst schöne Ausgabe. 10 5

Umwandlung Fahrenheit-Celsius Das Ganze mit einer for-schleife: int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf ( %3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); 11 Umwandlung Fahrenheit-Celsius Und jetzt in besserem Programmierstil: int fahr; const int lower = 0, upper = 300, step = 20; for (fahr = lower; fahr <= upper; fahr = fahr + step) printf ( %3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); 12 6

Ein- und Ausgabe von Zeichen Lies ein Zeichen while (dieses Zeichen ist nicht das Ende-des-Files-Zeichen) gib das gerade gelesene Zeichen wieder aus lies ein Zeichen main () int c; c = getchar(); while (c!= EOF) putchar(c); c = getchar(); 13 Ein- und Ausgabe von Zeichen Eleganter wird es, wenn die Zuweisung c = getchar() innerhalb des Ausdrucks zur Steuerung der while-schleife vorgenommen wird: main () int c; while ((c = getchar())!= EOF) putchar(c); 14 7

Einschub: Semantik der while-schleife Die while-schleife hat folgende allgemeine Struktur: while (Ausdruck) Anweisung; Beim Durchlaufen der while-schleife wird zunächst der Ausdruck ausgewertet. Ergibt diese Auswertung ein Ergebnis 0, so wird dieses Ergebnis als TRUE interpretiert, und Anweisung wird ausgeführt. 15 Ein- und Ausgabe von Zeichen In while ((c = getchar())!= EOF) putchar(c); wird zunächst die Anweisung c = getchar() durchgeführt; ihr Wert ist der Wert der linken Seite, also der Wert von c. Dann wird dieser Wert mit dem Wert EOF verglichen; fällt dieser Vergleich negativ aus, dann erhält der Ausdruck den Wert TRUE, und putchar(c); kann ausgeführt werden. 16 8

Ein- und Ausgabe von Zeichen Warum muss c vom Typ int (2 Byte) sein, obwohl doch nur Zeichen (1 Byte) ein- und ausgegeben werden? Was macht das Programm getchar.c : int c; FILE *fd; fd = fopen("getchar.c","r"); while ((c = getc(fd))!= EOF) putchar(c); 17 Zählen von Zeichen Das folgende Programm countchar.c zählt die Zeichen seines eigenen Quellcodes long nc=0; FILE *fd; fd = fopen("countchar.c","r"); while ((getc(fd))!= EOF) ++nc; printf("%ld\n", nc); 18 9

Zählen von Zeichen Das File, in dem der Quellcode steht, wird im Filesystem des Betriebssystems verwaltet. Das Betriebssystem muss dem Programm daher erst einen Pointer auf dieses File zur Verfügung stellen, sonst kann nicht gezählt werden. fd ist also ein Pointer auf ein Objekt vom Typ FILE: FILE *fd; fopen(char *name, char *mode) gibt also einen Pointer auf das File mit dem angegebenen Namen zurück; r öffnet das File zum Lesen ( read ). fd = fopen( countchar.c","r"); getc(fd) liest jeweils das nächste Zeichen aus dem File, auf das der Pointer fd zeigt. ++nc erhöht den Wert von nc um 1. 19 Zählen von Zeichen Hier die zweite, etwas abgeänderte Version des Programms double nc; FILE *fd; fd = fopen("getchar.cpp","r"); for (nc=0; getc(fd)!= EOF; ++nc) ; printf("%.0f\n", nc); 20 10

Einschub: Semantik der for-schleife for (expr 1 ; expr 2 ; expr 3 ) statement ist äquivalent zu expr 1 ; while (expr 2 ) statement expr 3 ; for (nc=0; getc(fd)!= EOF; ++nc) ; setzt also zunächst nc auf 0 (expr 1 ); dann wird die Bedingung getc(fd)!= EOF überprüft und im Erfolgsfall das statement (hier nur die leere Anweisung, die aus Syntaxgründen da stehen muss) durchgeführt. Zuletzt wird nc um 1 erhöht (expr 3 ). 21 Zählen von Zeichen, Wörtern und Zeilen int c, nl, nw, nc, state; enum state OUT, IN; FILE *fd; fd = fopen( wordcount.c","r"); state = OUT; nl = nw = nc = 0; while ((c = getc(fd))!= EOF) ++nc; if (c == '\n') ++nl; if (c == ' ' c == '\n' c == '\t') state = OUT; else if (state == OUT) state = IN; ++nw; printf("# Zeilen = %d\n# Woerter = %d\n# Zeichen = %d\n", nl, nw, nc); 22 11

Zählen von Zeichen, Wörtern und Zeilen Bei jedem gelesenen Zeichen: ++nc Nach jedem geladenen Newline-Zeichen \n: ++nl Leerzeichen, Tabulator (\t) oder Newline (\n) beenden ein Wort, daher wird state = OUT gesetzt. Wird ein anderes als diese drei Sonderzeichen gelesen, und war das letzte gelesene Zeichen eines dieser Sonderzeichen (state = OUT), so wird jetzt ein neues Wort betreten (das auch aus nur einem Zeichen bestehen kann; state = IN): ++nw 23 Funktionen in C int power(int m, int n); /* Funktionsprototyp: Hilfe f.d. Compiler */ int i; for (i=0; i<10; ++i) printf("i=%d 2^i=%d (-3)^i=%d\n", i, power(2,i), power(-3,i)); int power(int base, int n) int i,p=1; /* Hier ist i lokale Variable */ for (i=1; i<=n; ++i) p=p*base; return p; 24 12

Funktionen in C Funktionen dienen der Strukturierung und sind deshalb so häufig wie möglich anzuwenden. Funktionen sollten als Prototyp deklariert werden; das hilft dem Compiler, Syntaxfehler aufzuspüren. Argumente werden grundsätzlich als Call by Value übergeben; es gibt hier keine Wahlmöglichkeit wir z.b. in PASCAL. (Einziger Ausweg: Pointer.) In Funktionen deklarierte Variablen sind lokal, d.h. sie sind für das aufrufende Programm nicht sichtbar; sie dürfen daher den gleichen Namen haben wie Variablen dieses Programms. 25 Funktionen in C: Call by Value int power(int m, int n); /* Funktionsprototyp: Hilfe f.d. Compiler */ int i; for (i=0; i<10; ++i) printf("i=%d 2^i=%d (-3)^i=%d\n", i, power(2,i), power(-3,i)); int power(int base, int n) int p; for (p=1; n>0; --n) /* Dies hat keinen Einfluss auf i in main */ p=p*base; return p; 26 13

Funktionen in C: Call by Value void swap(int a, int b); int a1=111, a2=222; printf( Vor der Vertauschung: a1=%d, a2=%d.\n, a1, a2); swap(a1,a2); printf( Nach der Vertauschung: a1=%d, a2=%d.\n, a1, a2); void swap(int a, int b) /* Nichts passiert */ int temp; temp = a; a = b; b = temp; 27 Funktionen in C: Call by Value void swap(int *a, int *b); int a1=111, a2=222; printf("vor der Vertauschung: a1=%d, a2=%d.\n", a1, a2); swap(&a1,&a2); printf("nach der Vertauschung: a1=%d, a2=%d.\n", a1, a2); void swap(int *a, int *b) /* Jetzt klappts */ int temp; temp = *a; *a = *b; *b = temp; 28 14

Literatur Kernighan, Ritchie, Programmieren in C, 2. Auflage, Hanser 1990. 29 15