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

Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

Prof. Dr. Nikolaus Wulff

Programmieren in CProgrammieren in C

Eine Einführung in die Programmiersprache C

Page 2: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 2

Der Anfänger sollte nicht entmutigt sein,wenn er nicht die Voraussetzungen besitzt,um die Voraussetzungen zu verstehen ...

Page 3: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 3

Entwicklungsumgebung

• Alle Übungen und Praktika lassen sich auch von zu Hause aus bearbeiten. Es werden nur OpenSource Werkzeuge verwandt.

• Als Entwicklungsumgebung dient die Eclipse IDE.– Einheitliche Umgebung für Java und C.

– Minimierter einmaliger Lernaufwand.

• Der OpenSource gcc Compiler kann auch unter Windows, nach der Installation von Cygwin oder MinGW, verwendet werden...

• Sourcen können per Git/CVS auch von zu Hause aus ein- und ausgechecked sowie bearbeitet werden.

Page 4: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 4

Literatur

• B.W. Kernighan und D.M. Ritchie, Programmieren in C, 2.te Auflage ANSI C,

1978 &1988, ISBN 3-446-15497-3• C.L. Tondo und S. E. Gimpel,

Das C-Lösungsbuch zu K&R1989, ISBN 3-446-15946-0

• M. McGrath, C Programming in easy steps, 2.te Auflage, 2006, ISBN 1-84078-323-0

• H. Erlenkötter, Programmieren in C, 4.te Auflage 2001, ISBN 3-499-60074-9, in der ST Bibliothek von Studenten empfohlen „grünes Buch“...

• Sowie weitere Bücher der ST Bibliothek.

Page 5: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 5

Agenda

• Elementare Einführung• C Programm Syntax• Datentypen, Variablen und Konstanten• Operatoren und Ausdrücke• Kontrollstrukturen• Funktionen und Programmstruktur• Zeiger und Felder• Strukturen• Ein- / Ausgabe• Bibliotheksfunktionen

Page 6: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 6

Kurze Historie von C

• C wurde Anfang der siebziger Jahre von Kernighan und Ritchie für das UNIX Betriebssystem entwickelt.

• C ist eine sehr systemnahe Sprache, die es ermöglicht (fast) ohne Assembler auszukommen.

• ANSI C wurde 1988 standardisiert und existiert für nahezu alle Betriebssysteme.

• 1983 wurde die objektorientierte Erweiterung C++ von Bjarne Stroustrup in den Bell Laboratorien entwickelt.

• Viele Sprachen wie z.B. Java, C#, Perl, PHP, etc. besitzen eine C ähnliche Syntax und sind – bis auf die objektorien-tierten Konzepte – mit C Kenntnissen leicht zu erlernen.

Page 7: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 7

ProgrammiersprachenAssembler

Fortran

Algol

Simula Pascal

C

C++

Smalltalk-72 CLU

Modula2Ada

Oberon

Turbo-Pascal

beta

Eiffel

Lisp

LispFlavors

LispCLOS

BCPL

Modula3

Smalltalk

Smalltalk-76

Java

PL/1

Cobol

C#

1950

1960

1980

1970

2000

1990

OO-Sprachen

Page 8: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 8

C in der Nussschale

• Ein Programm besteht aus einer Menge von Anweisungen für den Computer.

• In den höheren Programmiersprachen sind diese Anweisungen in einer dem Menschen verständlichen, lesbaren Form notiert, dem sogenannten Quelltext ( Sourcecode).

• Dieser besteht aus einer Folge von Zeichen:– Den Buchstaben a-z, A-Z sowie dem Unterstrich _– Den Ziffern 0-9– Sonderzeichen und dem Leerzeichen

• Die Syntax der Sprache bestimmt die erlaubten Ausdrücke, die verwendet werden dürfen.

Page 9: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 9

C in der Nussschale cont.

• C Quelltexte bestehen aus Anweisungen.

• Anweisungen können zu Blöcken zusammenge-fasst werden, die durch geschweifte Klammern {} eingeleitet und beendet werden.

int x;x = 2+3;

Eine Variable x wird definiertund mit dem Wert 2+3=5 belegt.

if(x>4) { y = 2;}

Nur wenn die Variable x einen Wert größer als 4 hat wird der Block ausgeführt...

Page 10: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 10

C in der Nussschale cont.

• C kennt verschiedene Datentypen, wie z. B. Ganzzahlen (int), die reellen Zahlen (float) oder auch einzelne Zeichen (char) und Zeichenketten.

• Bevor eine Variable verwendet werden kann, muss diese entsprechend definiert werden.

• Einer definierten Variable wird zur Laufzeit ein entsprechender Speicherplatz zugewiesen.

int g;float r;char z;

Drei Variablen vom Typ Integer,Gleitkommazahl und Zeichen werdendefiniert. Die Namen/Bezeichner g, r und z sind willkürlich gewählt.

Typ Bezeichner

Page 11: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 11

Anweisungen und Sätze

• Anweisungen werden zu Sätzen zusammengefasst.

• Ein Satz wird durch ein Semikolon beendet:

• Dieser Satz bedeutet: Multipliziere die Zahl 2 mit der Zahl 3.14 und weise das Ergebnis einer Variablen mit dem symbolischen Namen „zpi“ zu.

• Zuerst wird die rechte Seite des Satzes (Anweisung Multipliziere) anschließend die linke Seite des Satzes (Anweisung Wertzuweisung des Ergebnisses an „zpi“) ausgeführt.

zpi = 2 * 3.14;

Page 12: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 12

Ein erstes Programm

• Wir erstellen das Programm „HelloWorld.exe“.

• HelloWorld ist sehr einfach und gibt nur den Text „Hello, World“ auf der Konsole aus...

• Jedes C Programm besitzt eine main Funktion, die vom Betriebssystem beim Start gerufen wird.

• Die main Funktion gibt nach der Abarbeitung an das Betriebssystem einen Rückgabewert zurück, der signalisiert, ob der Aufruf erfolgreich war (return 0) oder ein Fehler passierte, z.B. (return -1).

Page 13: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 13

/**

* Der C Klassiker

*/

#include <stdio.h> /* Standard I/O Bibliothek einbinden */

/* main-Funktion ist der C Einstiegspunkt */

int main() {

/* Hello World per Funktion printf ausgeben */

printf("Hello, World");

/* Das Programm mit return Wert 0 beenden */

return 0;

}

Hello World in C

• Die main-Funktion gibt die Zeichenkette „Hello, World“ mit der Bibliotheksfunktion printf aus.

• Die Funktion printf wird in der Datei stdio.h deklariert und per include Anweisung bekannt gemacht.

• Mit /* ... */ werden Kommentare in den (Quell)Text eingebunden.

1

2

0

3

Page 14: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 14

Vom Quelltext zum Programm

• Die „Hello World“ Anweisungen werden in einer Textdatei Hello.c abgespeichert.

• Damit daraus ein ablauffähiges Programm wird muss der Quelltext in Maschinencode übersetzt werden.

• Je nach Betriebssystem und verwendeten Compiler geschieht dies in mehreren Schritten:– Der Compiler erzeugt eine Objekt Datei

– Der Linker bindet diese mit Betriebssystemroutinen zum ausführbaren Programm

Page 15: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 15

Compile & Link Schritte

• Erstellen des Quelltext.

• Übersetzen

• Binden/Linken mit den Bibliotheksfunktionen des Betriebsystems.

• Test und Ausführung der Anwendung.

• Die einzelnen Schritte können manuell per Hand als auch automatisiert durchgeführt werden.

Hello.c

Hello.obj

Hello.exe

Compiler

Linker

stdio.h

Bibliotheks-funktionen

Page 16: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 16

Der Entwicklungszyklus

• Programmierung ist ein zyklischer Prozess:– Quellcode erstellen

– Quellcode übersetzen

– Programm testen

• Durch Testen kann man die Anwesenheit von Fehlern zeigen, niemals aber deren Abwesenheit!

Testen(Debugging) Compilieren

Editieren

Page 17: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 17

Programmieren mit Notepad

Page 18: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 18

HelloWorld in Aktion

Compile:

Aufruf:

Page 19: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 19

Entwickung mit der Eclipse IDE

Ausgaben von gcc

Quelltext Hello.c

Projekt Struktur

Page 20: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 20

Edit, Compile und Execute

• In der IDE wird der Quelltext editiert,

• anschließend (automatisch) compiliert

• und direkt ausgeführt– Hierzu die ausführbare Datei HelloWorld.exe selektieren

– das Kontextmenu mit der rechten Maus öffnen

– und „run as lokal C/C++ Application“ auswählen

– CYGWIN GDB Debugger bestätigen.

• Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der grünen Pfeiltaste lässt sich das Programm direkt starten oder per „Wanzensymbol“ debuggen.

Page 21: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 21

Programmstart in der IDE

Konsolenausgaben von HelloWorld.exe

Debugger

Prog. Start

Page 22: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 22

Textausgabe per printf

• Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek.

• printf gestattet eine formatierte Ausgabe:

• Die Formatzeichenkette ist zwingend, weitere Argumente 1, ..., N sind optional.

• Die Formatanweisung bestimmt wie die Argumente ausgegeben werden sollen und gestattet vielerlei Formatierungen...

printf(<Format>,<arg1>,...,<argN>);

Page 23: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 23

• Zu jedem C Datentypen gehört eine entsprechende Formatanweisung, die mit dem %-Zeichen markiert wird:

• Zusätzlich erfolgt mit %o und %x eine oktale und hexadezimale Ausgabe von Ganzzahlen.

Textformatierung

BedeutungTyp%...

Einzelnes Zeichencharc

E oder F Darstellungfloat, doubleg, G

Reelle Zahl (m.ddddE±xx)float, doublee, E

Zeichenkettechar*s

Reelle Zahl (m.dddddd)float, doublef

Ganzzahl (Integer)int, longd, i

Page 24: Programmieren in C - lab4inf.fh-muenster.de · –CYGWIN GDB Debugger bestätigen. • Nach dem ersten Ausführen braucht die Debugger Umgebung nicht mehr bestätigt werden. Mit der

© Prof. Dr. Nikolaus Wulff Programmieren in C 24

Formatierte Ausgabe

• Die Formatanweisung enthält normalen Text sowie mit % eingeleitete Platzhalter für die auszugebenden Argumente.

• Die Anzahl an Stellen kann explizit gemacht werden.

• Zusätzlich können „Escape Sequenzen“ angegeben werden:– \n neue Zeile, \t horz. Tabulator, \v vert. Tabulator, \a Signalton

• Bei Gleitkommazahlen lassen sich die Stellen vor und nach dem Komma sowie die Mantisse angeben.

// Ausgabe mit printfdouble pi = 3.1415926;float eps = 1.E-12;printf("%c \n",'a');printf("%f \t %d \n", pi, 4711);printf("%s","Zeichenkette");printf("%E \n", eps);