31
1 Vorlesung „Programmieren in C“ Einführung Bernd Schürmann Bernd Schürmann Programmieren in C Einführung in das Programmieren für Elektrotechniker Vorlesung „Programmieren in C“ Einführung Bernd Schürmann Kapitel 1: Grundlagen Von Neumann-Architektur Vom Problem zum Programm „Hello World“ Werkzeuge zur Programmausführung

Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

1

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Bernd Schürmann

Programmieren in CEinführung in das Programmieren für Elektrotechniker

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Kapitel 1: Grundlagen

Von Neumann-Architektur

Vom Problem zum Programm

„Hello World“

Werkzeuge zur Programmausführung

Page 2: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

2

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Informatik Wissenschaft von der systematischen Verarbeitung von

Informationen.

Algorithmus Vorschrift zur systematischen Vorgehensweise zur

Lösung von Problemen.

Im Großen: Systematische Softwareentwicklung / Software Engineering.

Computer / Rechner Berechnet Probleme, die geeignet durch Algorithmen

beschrieben sind.

Grundbegriffe

jetzt

VL-Ende

gleich

VL-Ende

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Einführung, Motivation mehr in der Vorlesung „Architektur digitaler Systeme I“

Von Neumann-Architektur

Zum Verständnis von C-Programmen ist das

Verständnis der von Neumann-Architektur

Grundvoraussetzung.

Page 3: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

3

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Beispiel: Textverarbeitung

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Teile eines Computer:

• Festplatte (Peripherie)mit Daten und Programmen

• Prozessormit Rechenwerk inkl. Registern und Steuerwerk

• (Arbeits-) Speicher

• Bus (Übertragungsleitungen)

Rechnerkomponenten

Page 4: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

4

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

1. und 2. Schritt:

Programmabarbeitung

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

1. und 2. Schritt:

Daten und Programm laden

Rechnerkomponenten

Page 5: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

5

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

3. Schritt:

Programm ausführen:

• Anweisung/Befehl lesen

A=b+c

Rechnerkomponenten

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

3. Schritt:

Programm ausführen:

• Anweisung/Befehl lesen

• Daten in Register

A=b+cb=3c=4

Rechnerkomponenten

Page 6: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

6

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

3. Schritt:

Programm ausführen:

• Anweisung/Befehl lesen

• Daten in Register

• Rechenwerk arbeitet

A=b+c

b=3c=4A=7

Rechnerkomponenten

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

3. Schritt:

Programm ausführen:

• Anweisung/Befehl lesen

• Daten in Register

• Rechenwerk arbeitet

• Ergebnis in Register oder Arbeitsspeicher

A=b+c

A=7

Rechnerkomponenten

Page 7: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

7

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

3. Schritt:

Programm ausführen:

• Anweisung/Befehl lesen

• Daten in Register

• Rechenwerk arbeitet

• Ergebnis in Register oder Arbeitsspeicher

A=b+c

A=7

Rechnerkomponenten

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Steuer-werk

(Befehlsregister)

Rechen-werk

(Registersatz)

Prozessor

Arbeits-speicher

Ein-/Ausgabe(Peripherie)

Datenbus

von Neumann-Computer

Referenzmodell (seit 1945) Rechenwerk führt Rechenoperationen

und logische Verknüpfungen durch

Steuerwerk: interpretiert Befehle und steuert die Befehlsabfolge

(Arbeits-/Haupt-) Speicher: speichert Programme und Daten

Ein-/Ausgabe: steuert E/A von Daten

Page 8: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

8

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Weitere Eigenschaften:

• Daten/Programme binär kodiert

• Daten und Programme ununterscheidbar

• bedingte Sprünge

Steuer-werk

(Befehlsregister)

Rechen-werk

(Registersatz)

Prozessor

Arbeits-speicher

Ein-/Ausgabe(Peripherie)

Datenbus

von Neumann-Computer

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Steuer-werk

(Befehlsregister)

Rechen-werk

(Registersatz)

Prozessor

Arbeits-speicher

Datenbus

von Neumann-Computer

Page 9: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

9

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

von Neumann-Computer …

11011110

10100101

01000110

11011011

00010010

00000000

11111111

01010101

00001111

01101001

11000011

01010101

11001111

01100110

00110100

10001010

…0

232-1

neu = alt + 5;

4711

124

neualt

add

• Daten/Programme binär kodiert

• Daten und Programme ununterscheidbar

add 4712, 4711, 5

Compiler (s.u.)

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Beispielaufgabe:Berechnen Sie die Quersumme q einer natürlichen Zahl n.( Lösung als C-Programm: später)

Algorithmen und Notationen

Page 10: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

10

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Beispielaufgabe:Berechnen Sie die Quersumme q einer natürlichen Zahl n.( Lösung als C-Programm: später)

Gegeben: natürliche Zahl n. Beispiel: n = 4711 q = 13

q = 0solange n > 0: Rest r = n modulo 10

Quersumme q = q + rn = n / 10

Algorithmen und Notationen

n / 10

Rest rQuotient

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Definition: Algorithmus Ein Algorithmus ist eine präzise, endliche Beschreibung eines

allgemeinen Verfahrens unter Verwendung ausführbarer, elementarer (Verarbeitungs-) Schritte.

Algorithmus ist unabhängig von konkreter Programmiersprache. Dient nur der abstrakten Beschreibung

eines funktionellen Lösungswegs.

Wichtige Aspekte wie Korrektheit, Aufwand, Anforderungen an Eingabegrößen und Zusicherungen (Garantien) für berechnete Resultate können allgemein abgeleitet werden.

Sie gelten damit für alle konkreten Realisierungen in einer Programmiersprache.

Algorithmen und Notationen

Page 11: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

11

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Zur Formulierung von Algorithmen gibt es verschiedene Möglichkeiten ( Notationen) Von abstrakten Beschreibungen bis zu konkreten

Programmiersprachen, z.B.:

• Umgangssprachliche Beschreibungen oft umfangreich und mehrdeutig.

• Flussdiagramme Graphische Darstellung, schnell unübersichtlich.

• Mathematische Notationen ( kein Algorithmus im engeren Sinn) exakt und präzise.

• Pseudonotationen informell und abstrakt.

• Programmiersprachen präzise Beschreibung.

Algorithmen und Notationen

Algorithmen und Notationen

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung natürlicher Sprache.

Geeignet für erste Annäherung.

Beispiel: Quersumme

Geg.: natürliche Zahl n

Addiere den Rest der Division n durch 10 zur Quersumme und teile n durch 10.

Führe diese Berechnung solange aus, bis n Null ist.

Umgangssprachliche Notation

Algorithmen und Notationen

n mod[ulo] 10

Page 12: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

12

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung natürlicher Sprache.

Geeignet für erste Annäherung.

Beispiel: Euklidischer Algorithmus

Euklid:Wenn CD aber AB nicht misst, und man nimmt bei AB, CD abwechselnd immer das kleinere vom größeren weg, dann muss (schließlich) eine Zahl übrig bleiben, die die vorangehende misst.

Umgangssprachliche Notation

Algorithmen und Notationen

ggt (a, b)

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung natürlicher Sprache.

Geeignet für erste Annäherung.

Beispiel: Euklidischer Algorithmus

Man teilt die größere durch die kleinere Zahl. Geht die Division auf, ist der Divisor der ggT. Geht die Division nicht auf, bleibt ein Rest. Dieser Rest ist der neue Divisor. Der alte Divisor wird zum Dividenden. Nun setzt man das Verfahren fort.

Nach endlich vielen Schritten erhält man den ggT.

Umgangssprachliche Notation

Algorithmen und Notationen

ggt (a, b)

Page 13: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

13

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung natürlicher Sprache.

Geeignet für erste Annäherung.

Beispiel: Euklidischer AlgorithmusGeg.: a, b natürliche Zahlen; a>0; b≥01. Kopiere a nach a′ und b nach b′.2. Falls b′=0: weiter bei Schritt (10).3. Falls b′>a: weiter bei Schritt (8).4. Berechne r = a′ mod b′.5. Kopiere b′ nach a′.6. Kopiere r nach b′.7. Gehe zu Schritt (2).8. Vertausche a′ und b′.9. Gehe zu Schritt (2).10. Ausgabe des Resultats a′.

Umgangssprachliche Notation

Algorithmen und Notationen

ggt (a, b)

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Beispiel: Quersumme

Flussdiagramme (engl. Flowchart)

Algorithmen und Notationen

STARTa = 4711q = 0n=0? → falschq = q + 1 = 1n = n / 10 = 471n=0? → falschq = q + 1 = 2n = n / 10 = 47n=0? → falschq = q + 7 = 9n = n / 10 = 4n=0? → falschq = q + 4 = 13n = n / 10 = 0n=0? → wahrAusgabe: 13ENDE

START

Eingabe: n

n=0?

ENDE

q = 0

Ausgabe: q

q = q + (n mod 10)n = n / 10

true

false

Graphische Repräsentation eines Algorithmus.

n und q sind Variablen ( Speicherzellen), die immer wieder verändert werden. später genauer

Page 14: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

14

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Wird i.d.R. zum Detailentwurf eingesetzt.

Aufbau Spezielle graphische Symbole zur

informellen Beschreibung von Aktionen.

Flusslinien verbinden graphische Symbole und legen Kontrollfluss fest.

Vorteile Veranschaulichung des Kontrollflusses eines Programms

(d.h. Abfolge der Anweisungen, die bei einer Berechnung ausgeführt werden).

Schleifenkonstrukte lassen sich deutlich hervorheben, insbesondere bei mehreren Schleifen.

Flussdiagramme (engl. Flowcharts)

Algorithmen und Notationen

q = 0

n=0?

Berechnungsschritt

Abfrage/Verzweigung

operationalisierte Problemlösung prozedurale, imperative Programmierung

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Beispiel: Euklidischer Algorithmus

Flussdiagramme (engl. Flowchart)

Algorithmen und Notationen

STARTa =8, b =4a′=8, b′=44=0? → false4>8? → falser=0, a′=4, b′=00=0? → trueAusgabe: 4ENDE

START

Eingabe: a, b

b′=0?

ENDE

a′=a, b′=b

b′>a′?

Ausgabe: a′

c = a′a′ = b′b′ = c

r = a′ mod b′a′ = b′b′ = r

true

false

false

true

Graphische Repräsentation eines Algorithmus.

Page 15: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

15

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung mathematischer Formeln.

Knappe und eindeutige Beschreibung.

Besonders geeignet für mathematische Probleme.

Beispiel: Quersumme

Mathematische Notation

Algorithmen und Notationen

0 n = 0

qs (n)=

n mod 10 + qs (n/10) sonst

Rekursion typisch für mathematische Beschreibung

deklarative Problemlösung Kein Algorithmus nach obiger Definition

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Verwendung mathematischer Formeln.

Knappe und eindeutige Beschreibung.

Besonders geeignet für mathematische Probleme.

Beispiel: Euklidischer Algorithmus

Mathematische Notation

Algorithmen und Notationen

a b = 0

ggT (a, b) = ggT (b, a) b > a

ggT (b, a mod b) sonst

Page 16: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

16

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Abstrakte Programmiersprache („Pseudocode“) Verwendung allgemeiner Konzepte, die den üblichen

Programmiersprachen gemeinsam sind(z.B. Verzweigungen, Iterationen).

Basis für präzise Beschreibung von Algorithmen.

Leichte Übertragbarkeit auf spezielle Programmiersprachen.

Beispiel: QuersummeEingabe: natürliche Zahl nq = 0while n > 0 do

r n mod 10;q q + r;r r / 10;

Ausgabe: q

Pseudocode

Algorithmen und Notationen

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Abstrakte Programmiersprache („Pseudocode“) Verwendung allgemeiner Konzepte, die den üblichen

Programmiersprachen gemeinsam sind(z.B. Verzweigungen, Iterationen).

Basis für präzise Beschreibung von Algorithmen.

Leichte Übertragbarkeit auf spezielle Programmiersprachen.

Beispiel: Euklidischer AlgorithmusGeg.: a, b natürliche Zahlen; a>0; b≥0ggT(a,b) ≡ if b=0 then a

else if b>a then ggT(b,a)else ggT(b,mod(a,b))

endifendif

Pseudocode

Algorithmen und Notationen

Page 17: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

17

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Kompromiss zwischen Anforderungen der Maschine und des Menschen.

Neben der mathem. Notation die präziseste Notation.

Abstrakt genug, um (gut) vom Menschen verstanden werden zu können.

Ermöglicht vollautomatische Ausführung durch Computer.

Programm Beschreibung eines Algorithmus in einer konkreten,

vom Rechner ausführbaren Programmiersprache.

(Höhere) Programmiersprache

Algorithmen und Notationen

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Das erste Programm

Hello, world!

/* File: hello_world.c */#include <stdio.h>

int main (void){

printf (”Hello, world!\n“);return 0;

}

Standard-Beispiel seit Kernighan/Ritchie

Was macht das Programm? _____________________________

Page 18: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

18

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Hello, world!

Erläuterungen (im Detail später)

Funktion main () in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm

Anweisungsblock{ Ein Anweisungsblock wird durch geschweifte Klammern eingerahmt.

: Anweisungen im Block werden sequentiell ausgeführt.} Anweisungen werden mit einem Semikolon abgeschlossen.

Funktion printf ()Ein-/Ausgabefunktion „print formatted“ Funktion in der Bibliothek „stdio.h“ (später mehr)

IncludeDirektive „include“ macht die Bibliothek(sfunktionen) bekannt.

KommentareKommentare werden durch /* … */ eingerahmt.

Datenstruktur ZeichenketteZeichenketten werden durch Anführungszeichen “Hello, world!” eingerahmt.

/* File: hello_world.c */#include <stdio.h>

int main (void){

printf (”Hello, world!\n“);return 0;

}

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Hello, world!

Erläuterungen (im Detail später)

Formatierung

Vorhandene Formatierung ist nicht erforderlich! Möglich wäre auch:

#include <stdio.h>int main(void){printf(”Hello, world!\n“);return 0;}

Übersichtlichkeit ginge verloren!

/* File: hello_world.c */#include <stdio.h>int main (void){

printf (”Hello, world!\n“);return 0;

}

Wichtig (in Prüfung notwendig):• ausreichend kommentieren• einrücken

Page 19: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

19

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Hello, world!

Funktionen Zentrales Strukturierungsmittel. (Haupt-) Funktion „main“ und beliebige Unterfunktionen

Funktionsrümpfe und Blöcke…

Typen Datentypen Funktionstypen

Anweisungen Zentral für imperative Programmiersprachen (s.u.).

Bibliotheksfunktionen Wiederverwendung von Funktionen spart Arbeit. Kapselung von Systemsoftware.

Basiselemente eines Programms (Details später)

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Editieren

Übersetzen

(Binden)

Ausführen

Praxiseinschub:Programmerzeugung und Ausführung

Page 20: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

20

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Unix

Terminal/Konsole starten

UNIX

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Unix

Editor Erstellung und Bearbeitung von digitalen Daten (Dateien). Funktionen und Komplexität abhängig vom Aufgabengebiet, z.B.

• Texteditoren (z.B. emacs, vim)• html-/xml-Editoren• sprachsensitive Editoren (unterstützen Syntax von Programmiersprachen)

• gedit• gvim

Page 21: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

21

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Unix

Programm übersetzen und ausführen Übersetzen: gcc –o <Ausgabedatei> <C-Datei> Ausführen: Aufrufen der Ausgabedatei

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Unix

Syntaxfehler (Beispiel)

Page 22: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

22

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Editor

• edit• notepad

Windows

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Programm übersetzen und ausführen Übersetzen: gcc –o <Ausgabedatei> <C-Datei> Ausführen: Aufrufen der Ausgabedatei

Page 23: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

23

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Syntaxfehler (Beispiel)

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

C(++) Umgebung

Windows

Page 24: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

24

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

C(++) Umgebung DEV C++

Windows

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Neues Projekt anlegen und speichern

Windows

Page 25: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

25

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Programm übersetzen

Windows

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Arbeiten unter Windows

Programm ausführen

Windows

Page 26: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

26

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Testen

Goldene Regeln für Programmierer Alles, was schiefgehen kann, wird auch schiefgehen.

Alles, was nicht schiefgehen kann, wird voraussichtlich doch schiefgehen.

Programme systematisch testen!In der Praxis:

Debugging-Werkzeuge Testumgebungen

Fehlerklassen Syntaxfehler: vom Compiler entdeckt

Laufzeitfehler: viel schwerer zu entdecken

Testen

in der Vorlesung nur ansatzweise

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Testen

Grundlegende Guidelines Übliche Fehler, die alle machen (s.u.)

• Zuweisung ’=‘ statt Vergleich ’==‘if (x = 3) . . . : x wird 3 zugewiesen; Bedingung ist wahr

Semikolon fehltP = p + x entspricht p = p + xq = q + y;q = q + y; Fehlermeldung „undeclared variable“

( ist nicht der Fehler). Laufzeitfehler,

falls Variable ‚xq‘ existiert.

Analog: fehlende { }, ” “, /* */

Nicht deklarierte Variablen

Testen

Page 27: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

27

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Programmiersprache C

Historie

eng mit der Entwicklung von UNIX verbunden

• erstes UNIX auf DEC-Rechnern in Assembler (vgl. Vorlesung „Architektur digitaler Systeme I“)

• Ziel: portable/höhere Programmiersprache, die nahe genug an der Hardware ist

• Sprachmittel zur strukturierten Programmierung• Möglichkeit der hardwarenahen Programmierung (z.B. Registerzugriff)• Performance wie Assembler

Die Programmiersprache C

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Historie

Zunächst „B“ (Ableger von BCPL) noch ohne Datentypen

1971: Ritchie: Weiterentwicklung zu C 1975: UNIX: 90% C, 10% Assembler

1978: „Kernighan/Ritchie, The C Programming Language“ zunächst Quasi-Standard (K&R-C)

Entwicklung vieler C-Dialekte Portabilität gefährdet

Die Programmiersprache C

Programmiersprache C

Page 28: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

28

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Historie

1989: Standardisierung durch ANSI-Komitee: ANSI-C (x3.159-1985)• (Teil) aller heutigen C-Compiler• Auch Normierung der Standard-Bibliotheken, z.B. stdio.h• 1990 durch ISO/IEC 9899 [C90] ersetzt• 1999: Erweiterung um C++-Sprachkonstrukte: ISO/IEC 9899 [C99]• 2011: Einführung des aktuellen Standards [C11]

Lehrbuch: C90• Wird von (fast) allen Systemen unterstützt• „Ausreichend“ für Einführungsvorlesung

Die Programmiersprache C

Programmiersprache C

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

C99-Standard

Erweiterung in der Sprache und Bibliotheken. Objektorientierte Erweiterung: C++.

Beispiele• Bei Funktionen ohne Rückgabewert wird nicht mehr int angenommen.•long long int für 64-Bit-Zahlen, boolesche und komplexe Zahlen.• Arrays variabler Länge.• Einzeilige Kommentare mit //.• Bessere Unterstützung der Codeoptimierung.

Die Programmiersprache C

Programmiersprache C

Page 29: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

29

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

C11-Standard

Optionale Elemente aus C99 verpflichtend und umgekehrt. Multithreading und atomare Operationen.

Beispiele• Bessere Unterstützung von Unicode (utf-8, utf-16).• Ausrichten von Strukturen im Speicher.• Arrays variabler Länge nur noch optional.• Entfernung der Funktion gets().• Bessere Unterstützung der Codeoptimierung.

Die Programmiersprache C

Programmiersprache C

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Eigenschaften von C

HW-nah, d.h. gleiche „Objekte“ wie Prozessor/Assembler:• Zahlen und Adressen• Zeichen als Zahlen interpretiert

C-Datentypen (später vertieft):• verschiedene Integer-Datentypen• verschiedene Gleitkomma-Datentypen• zusammengesetzte Datentypen:

• Strukturen• Unions• Bitfelder

• Adressen ( Pointer)

direkter Zugriff auf Speicheradressen und Bitoperationen

oft Unterstützung des Zugriffs auf HW-Register über Bibliotheken (nicht ANSI-Std.)z.B. Visual C++-Compiler: _inp(), _outp(): Bibliotheksfunktionen, die x86-Befehlen

in und out entsprechen

Die Programmiersprache C

Programmiersprache C

Page 30: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

30

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Eigenschaften von C

enthält Elemente der strukturierten Programmierung• Kontrollstrukturen• Typkonzept (nicht streng, d.h. einige automatische Typkonvertierungen;

nicht bei unverträglichen Datentypen ( Fehlermeldung))

Programmeinheiten getrennt übersetzbarVorteile: - ___________________________________

- ___________________________________

Die Programmiersprache C

Programmiersprache C

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Eigenschaften von C

Einordnung in die Familie der imperativen Programmiersprachen(basieren auf v. Neumann-Rechnermodell: Manipulation von Variablen im Speicher↔ deklarative Sprachen (LISP, PROLOG, OPS5, …))

prozedural objektorientiert

Die Programmiersprache C

FORTRAN

BASIC ALGOL60

BCPL

CSmalltalk

Modula ConcurrentPascal

AdaC++

JavaC#

COBOL

ALGOL68 SIMULA Pascal PL/I

prozedural

objektorientiert

Programmiersprache C

Page 31: Programmieren in C - TU Kaiserslautern · 2020. 12. 29. · prozedurale, imperative Programmierung ... in C wird diese Funktion beim Aufruf ausgeführt Hauptprogramm Anweisungsblock

31

Vorlesung „Programmieren in C“

Einführung Bernd Schürmann

Eigenschaften von C

C++-Erweiterung ( Folgevorlesung, neben Java)• objektorientiertes Programmiermodell• strengeres Typkonzept

Die Programmiersprache C

Programmiersprache C