Einstieg in C – Für Programmiereinsteiger geeignet · mit Ihnen ein erstes Programm. Außerdem...

33
Leseprobe Mit diesem Buch gelingt Ihnen der Einstieg in C. In dieser Leseprobe macht Sie Thomas Theis mit den Grundlagen vertraut und entwickelt mit Ihnen ein erstes Programm. Außerdem können Sie einen Blick in das vollständige Inhalts- und Stichwortverzeichnis des Buches werfen. Thomas Theis Einstieg in C 447 Seiten, broschiert, mit CD, Juni 2014 24,90 Euro, ISBN 978-3-8362-2793-3 www.galileo-press.de/3557 »Eine erste Einführung« »Unser erstes Programm« »Verschiedene Arten von Daten« »Verschiedene Fälle in einem Programm« Inhalt Index Der Autor Leseprobe weiterempfehlen Wissen, wie’s geht.

Transcript of Einstieg in C – Für Programmiereinsteiger geeignet · mit Ihnen ein erstes Programm. Außerdem...

LeseprobeMit diesem Buch gelingt Ihnen der Einstieg in C. In dieser Leseprobe macht Sie Thomas Theis mit den Grundlagen vertraut und entwickelt mit Ihnen ein erstes Programm. Außerdem können Sie einen Blick in das vollständige Inhalts- und Stichwortverzeichnis des Buches werfen.

Thomas Theis

Einstieg in C447 Seiten, broschiert, mit CD, Juni 2014 24,90 Euro, ISBN 978-3-8362-2793-3

www.galileo-press.de/3557

»Eine erste Einführung« »Unser erstes Programm« »Verschiedene Arten von Daten« »Verschiedene Fälle in einem Programm«

Inhalt

Index

Der Autor

Leseprobe weiterempfehlen

Wissen, wie’s geht.

15

Kapitel 1

Eine erste Einführung

Was erreichen Sie mit der Programmierung in C? Was benötigen Sie,

um anzufangen? Wie nutzen Sie dieses Buch möglichst gut?

UniversellDie Programmiersprache C gibt es schon seit Anfang der 1970er Jahre.

Dennoch ist diese Sprache nach wie vor aktuell, schnell und universell ein-

setzbar. Ihr Einsatzgebiet erweitert sich ständig und erstreckt sich vom

normalen Anwender-PC über das eingebettete System innerhalb eines

technischen Geräts bis hin zum vernetzten Rechnerverbund.

1.1 Welche Vorteile bietet C?

PortierbarDie Sprache C besitzt einen breiten Anwendungsbereich und erfreut sich

großer Bekanntheit und Popularität. C-Programme sind zwischen den ver-

schiedenen Rechnersystemen leicht portierbar. Sie benötigen weder eine

spezielle Laufzeitumgebung noch einen Interpreter.

SchnellSie können mit C schnelle, ressourcensparende Programme erstellen. Dies

ist unter anderem dem direkten Zugriff auf den Speicherplatz und die

Hardware zu verdanken.

GCCC ist weitverbreitet und bindet Sie nicht an einen bestimmten Hersteller.

Der C-Compiler aus der GNU Compiler Collection (kurz: GCC C-Compiler)

steht für viele Betriebssysteme zur Verfügung und stellt das zentrale Ele-

ment vieler Entwicklungsumgebungen dar. Einige davon werden auch in

diesem Buch eingesetzt.

EinfachDurch seinen einfachen Aufbau und seine geringe Anzahl an Schlüsselwör-

tern ist C leicht erlernbar. Seine Effizienz hat C zur Basis vieler bekannter

Sprachen gemacht.

Sowohl zur Programmierung von Anwendungen für den Endbenutzer als

auch zur Systemprogrammierung für Bestandteile und Erweiterungen von

Betriebssystemen findet C seinen Einsatz.

1 Eine erste Einführung

16

1.2 Was benötige ich zum Programmieren?

Als angehender Entwickler von C-Programmen benötigen Sie:

� einen Editor, mit dessen Hilfe Sie den Programmcode schreiben

� einen Compiler, mit dessen Hilfe Sie den Programmcode in die Sprache

übersetzen, die der jeweilige Rechner versteht

IDE

GCC

Darüber hinaus ist es sinnvoll, einen Debugger zu benutzen, der Ihnen bei

der Fehlersuche hilft. Die meisten Editoren bieten zur Erleichterung der

Programmierung ein sogenanntes Syntax-Highlighting, also ein farbliches

Hervorheben der Elemente von C. Sowohl unter Windows als auch unter

Ubuntu Linux und unter OS X gibt es eine Reihe von IDEs (kurz für: Integra-

ted Development Environment, zu Deutsch: Integrierte Entwicklungsumge-

bung), die all dies und vieles mehr bieten.

Zusätzlich können Sie unter vielen Betriebssystemen mit dem GCC C-Com-

piler auf Kommandozeilenebene arbeiten. Dies vereinfacht teilweise die

Nutzung externer Bibliotheken, die Ihnen weitere Funktionen bieten.

Dev-C++ Im Buch arbeiten wir primär unter Windows 7 in der 32-Bit-Version mit der

frei verfügbaren Entwicklungsumgebung Dev-C++ 5.4.0. Ich werde Ihnen

aber immer wieder Hinweise geben, wie es unter anderen Betriebssyste-

men und in anderen Entwicklungsumgebungen läuft.

In Anhang B werde ich alle notwendigen Installationen für Windows,

Ubuntu Linux und OS X beschreiben.

1.3 Wie ist dieses Buch aufgebaut?

In Kapitel 2 werde ich Ihnen anhand des klassischen Hallo-Welt-Programms

die Bedienung der Entwicklungsumgebung Dev-C++ 5.4.0 erläutern.

Grundkurs In Kapitel 3 bis 11 lernen Sie anhand eines anschaulichen Beispiels aus dem

Alltag die wichtigen Elemente der Programmierung mit C kennen: Variab-

len, Operatoren, Kontrollstrukturen, Funktionen, Felder, Zeichenketten,

Zeiger, Strukturen und Dateispeicherung.

Dies geschieht Schritt für Schritt, mit ausführlicher Erläuterung der

Begriffe. Dabei werden wir die Programme Stück für Stück durch das neu

erworbene Wissen erweitern. Allerdings werden wir uns dabei nicht in

sämtlichen Details der Programmierung verzetteln.

1.4 Wie sollten Sie mit diesem Buch arbeiten?

17

VertiefungAnschließend sind wir in der Lage, die wichtigen Begriffe richtig einzu-

ordnen. Kapitel 12 wird die Kenntnis der Programmierelemente vertie-

fen. Wir schauen auch einmal links und rechts: Welche Möglichkeiten

bieten diese Elemente noch? Auf welche Weise können sie miteinander

verbunden werden?

Kapitel 13 bis 18 erläutern zahlreiche nützliche Funktionen, nach Themen-

gebieten geordnet: dynamische Felder, Zahlen und Mathematik, Präpro-

zessor, Dateien und Verzeichnisse, Datum und Zeit sowie die Kommunika-

tion mit dem Betriebssystem.

Datenbanken, GUIs,

Hardware

In Kapitel 19, 21 und 22 werde ich Ihnen die Vielfalt der Programmierung

mit C anhand von drei Beispielen zeigen. Sie lernen:

� wie Sie auf SQLite-Datenbanken zugreifen

� wie Sie grafische Benutzeroberflächen mit Hilfe von GTK+ erstellen

� wie Sie elektronische Schaltungen mit Hilfe des Einkartencomputers

Raspberry Pi programmieren

Kapitel 20 bietet einige größere Beispielprojekte. Mehrere Spiele und

andere Programme dienen zur Verbindung vieler Elemente der bisherigen

Kapitel, jeweils in einem umfangreichen Programm.

In Anhang A werde ich einige der Änderungen ansprechen, die C in den Jah-

ren seit seinem ersten Einsatz erfahren hat. Die weiteren Anhänge bieten

schließlich die notwendigen Installationsanleitungen, wichtige Befehle

unter Unix, die Schlüsselwörter der Sprache C, eine Funktionsreferenz und

die Lösungen der Übungsaufgaben.

Für die Hilfe bei der Erstellung dieses Buchs bedanke ich mich bei Anne

Scheibe, Petra Biedermann, Jan Hohlmann und dem ganzen Team von

Galileo Press.

1.4 Wie sollten Sie mit diesem Buch arbeiten?

BeispieleLernen Sie Schritt für Schritt die einzelnen Programmierelemente, ihre

Besonderheiten und ihre Vorteile kennen. Die Beispielprogramme und die

Erläuterungen helfen Ihnen dabei.

ProgrammierenVerändern Sie die Programme, und prüfen Sie, ob die Ergebnisse so sind,

wie Sie sie erwartet haben. Lösen Sie die Übungsaufgaben, aber erstellen Sie

1 Eine erste Einführung

18

auch Programme nach eigenen Aufgabenstellungen, die die neu erlernten

Programmierelemente enthalten.

Fehler Das Buch gibt Ihnen Hinweise auf viele typische Einsteigerfehler. Sollten

Sie gerade überlegen, warum Ihr Programm nicht das ausführt, was Sie

erwarten, dann prüfen Sie es einmal dahingehend.

Die Compiler und die verschiedenen Entwicklungsumgebungen setzen

den C-Standard nicht einheitlich um und lassen daher manchmal unter-

schiedliche Schreibweisen zu. In den Beispielprogrammen des Buchs

verwende ich jeweils die Schreibweise, die unter möglichst vielen Umge-

bungen lauffähig ist.

Datenträger

zum Buch

Auf dem beigelegten Datenträger finden Sie die Software, die wir im

Laufe des Buches benötigen. Außerdem habe ich dort unter Programme

alle Beispielprogramme des Buches fertig beigefügt. Der Dateiname steht

jeweils in der Listing-Unterschrift; den Code aus Listing 2.1 finden Sie also

beispielsweise unter <Datenträger> Programme\hallo.c..

E-Book-Ausgabe Leser der E-Book-Ausgabe finden die Beispielprogramme in den Materia-

lien zum Buch unter:

http://www.galileo-press.de/3557

19

Kapitel 2

Unser erstes Programm

Anhand des ersten Programms lernen Sie die Entwicklungsumgebung

Dev-C++ und die Grundbegriffe eines C-Programms kennen.

Hallo WeltBei unserem ersten Programm handelt es sich um einen Klassiker, mit dem

viele Entwickler in vielen Programmiersprachen starten. Auf dem Bild-

schirm wird einfach nur folgender Text ausgegeben:

Hallo Welt

Sehen Sie als Entwickler diese Ausgabe vor sich, dann wissen Sie, dass Sie

den ersten wichtigen Schritt bewältigt haben.

2.1 Wie gebe ich das Programm ein?

Starten Sie die Entwicklungsumgebung Dev-C++. Die Installation dieser

Software beschreibe ich in Abschnitt B.1.1, »Dev-C++«. Sie bietet unter ande-

rem einen Editor, in dem Sie den Code Ihrer Programme eingeben können.

Neue DateiIn Dev-C++ wählen Sie den Menüpunkt Datei � Neu � Quelldatei. Dies

geht auch einfacher mit Hilfe der Tastenkombination (Strg)+(N). Im rech-

ten Teil erscheint ein neues Fenster, das zunächst den Titel Unbenannt1

hat. Geben Sie darin den Code des folgenden Listings ein (siehe auch Abbil-

dung 2.1):

#include <stdio.h>int main(){ printf("Hallo Welt\n"); return 0;}

Listing 2.1 Datei »hallo.c«

2 Unser erstes Programm

20

Sonderzeichen Die vielen Sonderzeichen stellen eine erste Hürde dar. Die geschweiften

Klammern { und } sowie das Backslash-Zeichen \ können Sie mit Hilfe

der Tastenkombinationen (Alt_Gr)+({), (Alt_Gr)+(}) und (Alt_Gr)+(\)

eingeben.

Klammern,

Einrückungen

Nach der Eingabe einer geöffneten Klammer erscheint in Dev-C++ von

selbst die passende schließende Klammer. Falls es sich um eine ge-

schweifte Klammer handelt, dann wird die nächste Zeile automatisch

eingerückt. Nach einer kurzen Eingewöhnung werden Sie feststellen,

dass sich dieses selbständige Verhalten des Editors als hilfreich erweist

und Sie bei der Erstellung von gut lesbaren Programmen unterstützt.

Diese Unterstützung erhalten Sie auch in vielen anderen Entwicklungs-

umgebungen.

Abbildung 2.1 Erste Eingabe

case sensitivity In C wird nach Klein- und Großbuchstaben unterschieden. Dieses Verhal-

ten wird auch case sensitivity genannt. Sie sollten also zum Beispiel printf

nicht mit einem großen P schreiben. Dies wird in der Regel zu einem Fehler

führen.

Was bedeuten die einzelnen Zeilen?

Bei der Erläuterung der Programmzeilen arbeiten wir uns, ein wenig unge-

wöhnlich, von innen nach außen vor.

printf() In der Mitte des Programms finden Sie die Anweisung printf("Hallo

Welt\n");. Sie dient zur Ausgabe des gewünschten Texts auf dem Bild-

schirm. Der Text wird in doppelte Anführungsstriche eingeschlossen. Das

2.2 Das Programm wird gespeichert

21

Sonderzeichen \n bewirkt einen anschließenden Zeilenumbruch. Das Steu-

erzeichen n steht für new line. Jede Anweisung muss mit einem Semikolon

beendet werden.

Die restlichen Zeilen sehen momentan noch etwas abstrakt aus. Ihre

Bedeutung wird aber im weiteren Verlauf des Buchs klarer. Sie dienen dazu,

rund um die Anweisung printf(...); ein vollständiges C-Programm zu

erstellen, das übersetzt und ausgeführt werden kann.

Die Anweisung return 0; liefert die Zahl 0 zurück. Für uns bedeutet das

zunächst vereinfacht, dass kein Fehler aufgetreten ist.

main()Beide genannten Anweisungen stehen innerhalb der Funktion main().

Jedes C-Programm besteht aus einer oder mehreren Funktionen, die unter-

schiedliche Namen haben und miteinander arbeiten. Die Funktion main()

bildet stets den Startpunkt eines Programms. Nach dem Namen einer

Funktion folgen stets runde Klammern. Alle Anweisungen einer Funktion

müssen innerhalb eines Blocks stehen, erkennbar an den geschweiften

Klammern.

Die Angabe int besagt, dass die Funktion main() eine ganze Zahl (englisch:

integer) zurückliefert, in diesem Falle 0.

#includeDie Anweisung #include zu Beginn des Programms dient dazu, Funktionen

aus bestimmten Bibliotheken für das Programm verfügbar zu machen.

Über die sogenannte Header-Datei stdio.h erreichen Sie eine Bibliothek mit

Standardfunktionen zur Ein- und Ausgabe. Die Abkürzung stdio steht dabei

für standard input output.

stdio.hÜber stdio.h wird unter anderem die Funktion printf() erreichbar ge-

macht. Ohne diese Header-Datei wären C-Programme nicht in der Lage, et-

was auf dem Bildschirm auszugeben oder Angaben des Benutzers von der

Tastatur einzulesen. Im weiteren Verlauf des Buchs werden wir noch Funk-

tionen aus anderen Bibliotheken benötigen.

2.2 Das Programm wird gespeichert

Nach der Eingabe speichern Sie das Programm über den Menüpunkt Datei

� Speichern oder mit der Tastenkombination (Strg)+(S). Es erscheint das

Dialogfeld Datei speichern.

2 Unser erstes Programm

22

Dateiendung ».c« Sie können mit Hilfe von Dev-C++ sowohl in der Sprache C als auch in der

Sprache C++ programmieren. Dateien mit Programmen in der Sprache C

haben die Endung .c. Falls es sich um Programme in der Sprache C++ han-

delt, dann haben die Dateien die Endung .cpp. In diesem Buch programmie-

ren wir in C, und unser Programm gibt ein »Hallo Welt« aus, also geben Sie

im Feld Dateiname zum Beispiel den Namen »hallo.c« ein (siehe auch

Abbildung 2.2).

Abbildung 2.2 Dateiname eingeben

C:\CProgramme Wählen Sie ein Verzeichnis aus. Ich habe das Verzeichnis C:\CProgramme

ausgewählt und beziehe mich auch in späteren Anleitungen darauf. Zum

Abspeichern im richtigen Verzeichnis haben Sie nun mehrere Möglich-

keiten:

� Verwenden Sie ein vorhandenes Verzeichnis.

� Erzeugen Sie beim Abspeichern im Dialogfeld Datei speichern ein

neues Verzeichnis: Nach Betätigung der rechten Maustaste erscheint

das bekannte Kontextmenü des Windows-Explorers mit dem Menü-

punkt Neu � Ordner.

Im Dialogfeld Datei speichern klicken Sie den Button Speichern.

Schließen

Öffnen

Einige nützliche Hinweise

� Sie können die Datei schließen, und zwar über den Menüpunkt DATEI �

SCHLIEßEN oder mit der Tastenkombination (Strg)+(W).

� Sie können eine vorhandene Datei erneut öffnen: über den Menüpunkt

DATEI � PROJEKT ODER DATEI ÖFFNEN, oder mit der Tastenkombination

(Strg)+(O).

� Sie können an mehreren Programmen parallel arbeiten, falls Sie zum

Beispiel einzelne Elemente eines Programms in ein anderes Programm

übernehmen möchten. Jedes Programm erscheint rechts in einem eige-

nen Fenster.

2.3 Wie starte ich das fertige Programm?

23

2.3 Wie starte ich das fertige Programm?

ÜbersetzenIch gehe davon aus, dass Sie die Datei gespeichert und aktuell geöffnet

haben. Sie können das Programm über den Menüpunkt Ausführen �

Kompilieren oder die Funktionstaste (F9) in die Sprache des Rechners

übersetzen. Dies wird auch kompilieren genannt. Der entsprechende

Bestandteil der Entwicklungsumgebung nennt sich Compiler.

SyntaxBeim Kompilieren können Syntaxfehler festgestellt werden. Unter der

Syntax eines Programms versteht man seinen Aufbau gemäß den Regeln

der Programmiersprache. Falls das Programm keinen Syntaxfehler enthält,

erscheint ein Dialogfeld wie in Abbildung 2.3.

Abbildung 2.3 Erfolgreiche Übersetzung

FehlermeldungSollte das Programm Syntaxfehler aufweisen, erscheinen eine oder meh-

rere Fehlermeldungen. Zur Demonstration (siehe Abbildung 2.4) habe ich

einmal das Semikolon am Ende der ersten Anweisung weggelassen. Die

Fehlermeldung besagt, dass in Zeile 6 ein Semikolon vor return erwartet

wird. Der Fehler, der in Zeile 5 gemacht wurde, wird also erst in Zeile 6

bemerkt. Nach Beseitigung des Fehlers muss das Programm erneut über-

setzt werden.

Suchen nach oben

Hinweis

Es ist häufig so, dass sich Fehler erst in späteren Programmzeilen auswir-

ken. Falls Sie also nach der Ursache eines Fehlers suchen, dann beginnen

Sie in der Zeile mit der Fehlermeldung und arbeiten sich anschließend

Zeile für Zeile nach oben.

2 Unser erstes Programm

24

Abbildung 2.4 Übersetzung mit Fehlermeldung

Ausführen Nach einer erfolgreichen Übersetzung können Sie das Programm über den

Menüpunkt Ausführen � Ausführen oder die Funktionstaste (F10) star-

ten. Es erscheint ein Konsolenfenster mit der Ausgabe des Programms,

siehe Abbildung 2.5. Nach einem Tastendruck wird das Konsolenfenster

wieder geschlossen.

Abbildung 2.5 Ausgabe des Programms

F11 Nach einer Änderung können Sie Ihr Programm auch auf einen Schlag spei-

chern, übersetzen und ausführen. Dies geschieht mit Hilfe des Menü-

punkts Ausführen � Kompilieren + Ausführen oder der Funktionstaste

(F11). Diese Abkürzung erweist sich in der Praxis als sehr hilfreich.

Hinweis

Größere Programme bestehen häufig aus mehreren Dateien und werden

in Dev-C++ in einem zusammenhängenden Projekt gespeichert. Dazu fin-

den Sie eine Erläuterung in Abschnitt B.1.1, »Dev-C++«.

2.4 Eine weitere Möglichkeit zum Starten

25

2.4 Eine weitere Möglichkeit zum Starten

Diesen Abschnitt können Sie zunächst übergehen und später bei Bedarf

lesen. Aber vielleicht würden Sie gerne einmal Folgendes ausprobieren:

� Ihr Programm direkt von der Kommandozeile aus aufrufen.

� Ihr Programm auf einem anderen Windows-PC nutzen.

Ausführbare DateiSie haben mit Hilfe der Entwicklungsumgebung Dev-C++ aus dem C-Pro-

gramm in der Datei hallo.c bereits ein ausführbares Programm in der Datei

hallo.exe erstellt. Es befindet sich im selben Verzeichnis wie die Datei

hallo.c, also in C:\CProgramme. Im Kommandozeilenmodus können Sie es

direkt aus diesem Verzeichnis heraus aufrufen.

KommandozeileSie erreichen den Kommandozeilenmodus unter Windows 7 sowohl über

das Startmenü � Alle Programme � Zubehör � Eingabeaufforderung

als auch über die Tastenkombination (œ)+(R) und die anschließende Ein-

gabe des Befehls cmd. Unter Windows 8 gibt es die letztere Möglichkeit

ebenso.

AusführenWechseln Sie im Kommandozeilenmodus in das Verzeichnis C:\CPro-

gramme, und zwar wie in Abbildung 2.6 mit dem Befehl cd C:\CProgramme.

Lassen Sie sich mit dem Befehl dir alle Dateien im Verzeichnis anzeigen.

Starten Sie das ausführbare Programm in der Datei hallo.exe – dazu dient

der Befehl hallo. Es erscheint die Ausgabe des Programms: Hallo Welt.

Abbildung 2.6 Eingabeaufforderung, mit Programmaufruf

2 Unser erstes Programm

26

Programm kopieren Sie können die Datei hallo.exe einfach auf einen anderen Windows-PC

kopieren, etwa mit Hilfe eines USB-Sticks. Anschließend können Sie das

Programm auf dem anderen Windows-PC starten.

Codeseite Standardmäßig ist unter Windows die Codeseite 850 eingestellt. Falls Sie

die deutschen Umlaute und das scharfe S (ß) ausgeben möchten, sollten Sie

im Kommandozeilenfenster mit Hilfe des Befehls chcp 1252 auf die Code-

seite 1.252 umstellen.

2.5 Kommentare sind wichtig

Gute Entwickler kommentieren den Code ihrer Programme. Auf diese

Weise erläutern sie den Zweck und den Aufbau wichtiger Bestandteile des

Programms für sich selbst und für andere Entwickler.

Weitere

Entwicklung

Häufig nimmt sich ein Entwickler ein Programm nach Wochen oder Mona-

ten noch einmal vor, um es zu verbessern oder ein anderes Programm auf

seiner Basis zu erschaffen. Oder er muss ein Programm bearbeiten, das

ursprünglich von einem anderen Entwickler erstellt wurde. In diesen Fäl-

len ist es sehr hilfreich, wenn die Programme gut kommentiert sind.

/* Kommentar */ Kommentare werden nicht übersetzt und sind nur in der Datei mit dem

C-Quellcode sichtbar. Sie stehen zwischen den Zeichenfolgen /* und */ und

können sich über mehrere Zeilen erstrecken.

// Kommentar Viele Entwicklungsumgebungen (so auch Dev-C++ 5.4.0) setzen bereits

einige, aber nicht alle Vorgaben des Sprachstandards C99 um. Somit sind

normalerweise auch einzeilige Kommentare möglich. Sie beginnen nach

der Zeichenfolge // und erstrecken sich bis zum Ende der Zeile. Weitere

Informationen zum C99-Standard finden Sie in Anhang A, Ȁnderungen

der Programmierung mit C«.

Ein Beispiel:

#include <stdio.h>int main(){ /* Es gibt lange Kommentare. Diese stehen in mehreren Zeilen */ printf("Es gibt auch lange" " Texte.\nDiese stehen"

2.6 Eine Übungsaufgabe

27

" auch in mehreren Zeilen.\n");

return 0; // Kommentar bis zum Ende der Zeile, seit C99}

Listing 2.2 Datei »kommentar.c«

Zu Beginn der Funktion main() steht ein Kommentar über zwei Zeilen.

Nach der Anweisung mit return steht ein einzeiliger Kommentar.

Langer TextGleichzeitig sehen Sie in diesem Programm, wie Sie einen längeren Ausga-

betext unterteilen können. Die einzelnen Textstücke stehen jeweils inner-

halb von doppelten Anführungsstrichen. Die Zeichenfolge \n sorgt für

einen Zeilenumbruch. Die Ausgabe sieht wie folgt aus:

Es gibt auch lange Texte.Diese stehen auch in mehreren Zeilen.

2.6 Eine Übungsaufgabe

Schreiben Sie ein Programm in der Datei u_name.c. Es soll die folgende

Ausgabe erzeugen:

Guten Morgen.Mein Name ist Claus Clever.

Kommentieren Sie jede Zeile innerhalb der Funktion main(). Eine mög-

liche Lösung zu der Übungsaufgabe finden Sie in Abschnitt D.1, »Datei

›u_name.c‹«. Denken Sie daran: Es kann zu jeder Aufgabe beliebig viele

richtige Lösungen geben. Falls Ihre Lösung von meiner Lösung abweicht,

dann überlegen Sie, welche Lösung für Sie verständlicher ist.

Hinweis

Kommentare geben Ihnen auch die Möglichkeit, bestimmte Teile eines

Programms zeitweilig von der Übersetzung auszuschließen. Dies kann

sich während der Entwicklung eines größeren Programms oder bei der

Fehlersuche als nützlich erweisen.

29

Kapitel 3

Verschiedene Arten von Daten

Sie speichern Zahlenwerte, geben Sie auf dem Bildschirm aus, lesen Sie von

Tastatur ein und rechnen mit ihnen. Außerdem lernen Sie, wie Sie Fehler

leichter finden können.

Innerhalb eines Programms müssen unterschiedliche Daten ermittelt,

gespeichert, weiterverarbeitet und ausgegeben werden. Dies können Zah-

len, aber auch Texte sein.

Ein EinkaufIn vielen Beispielen dieses Buchs wird mit den Daten eines alltäglichen,

leicht verständlichen Anwendungsbeispiels gearbeitet: Wir tätigen einen

Einkauf in einem Geschäft. Schritt für Schritt lernen Sie weitere Program-

mierelemente kennen, die Ihnen die Möglichkeit geben, diesen Einkauf

und die Erstellung der zugehörigen Rechnung immer realistischer zu

gestalten.

Sie erlernen zunächst die verschiedenen Programmierelemente und set-

zen sie in einem anschaulichen Zusammenhang ein. Später, ab Kapitel 12,

zeige ich Ihnen ihre vielfältigen Möglichkeiten.

3.1 Daten bekannt machen und speichern

ZahlenartenNehmen wir an, Sie kaufen zwei Äpfel. Jeder Apfel kostet 1,45 Euro, da es

sich um besonders gute Äpfel aus zertifiziertem Bio-Anbau handelt. Damit

haben wir unsere ersten Daten. Die Anzahl der gekauften Äpfel ist eine

ganze Zahl. Beim Preis der Äpfel handelt es sich um eine Zahl mit Stellen

nach dem Komma.

DatentypenEinzelne Daten werden in Variablen gespeichert. Variablen können ihren

Wert verändern. In C gibt es unterschiedliche Typen von Variablen. Jeder

dieser sogenannten Datentypen hat einen eigenen Einsatzzweck und bietet

bestimmte Vorteile. Wir beschränken uns zunächst auf die Datentypen int

für ganze Zahlen und double für Zahlen mit Nachkommastellen.

3 Verschiedene Arten von Daten

30

Ein Beispiel:

#include <stdio.h>int main(){ /* Deklaration */ int anzahl; double preis;

/* Zuweisung */ anzahl = 2; preis = 1.45;

return 0;}

Listing 3.1 Datei »daten.c«

Deklaration Eine Deklaration dient dazu, einer Variablen einen Namen zu geben und sie

einem Datentyp zuzuordnen. Eine Variable kann erst nach einer Deklara-

tion verwendet werden, daher stehen Deklarationen normalerweise zu

Beginn.

int, double In der Variablen anzahl vom Typ int kann eine ganze Zahl gespeichert wer-

den, in der Variablen preis vom Typ double eine Zahl mit Nachkommastellen.

Zuweisung Eine Variable kann per Zuweisung einen Wert erhalten. Eine Zuweisung

wird mit Hilfe des Zeichens = notiert. Die Variable auf der linken Seite

erhält den Wert, der auf der rechten Seite des Gleichheitszeichens steht.

Vor der ersten Zuweisung hat eine Variable einen zufälligen Wert. Im Ver-

lauf des Programms kann sich der Wert einer Variablen beliebig oft ändern.

Sie können das Programm übersetzen und ausführen. Allerdings erzeugt

es keine Ausgabe auf dem Bildschirm.

Namensregeln Einige Regeln für die Namen der Variablen:

� Es sind nur Buchstaben, Ziffern und der Unterstrich gestattet.

� Die deutschen Umlaute und das scharfe S (ß) gehören nicht zu den

erlaubten Buchstaben.

� Der Name darf nicht mit einer Ziffer beginnen.

� Eines der Schlüsselwörter der Sprache C (siehe Abschnitt C.3, »Schlüssel-

wörter der Sprache C«) darf nicht als Name verwendet werden.

3.2 Wie gebe ich Daten auf dem Bildschirm aus?

31

Aussagekräftige

Namen

Erleichtern Sie sich die Entwicklung: Geben Sie den Variablen aussagekräf-

tige Namen. Sie können den Preis eines eingekauften Artikels auch in der

Variablen x speichern. Dann weiß aber später niemand mehr, was sich

dahinter verbirgt. Falls Sie zwei verschiedene Preise speichern möchten,

dann nehmen Sie zum Beispiel die Namen preisApfel und preisBanane.

Diese gut lesbare Schreibweise nennt sich camelCase, wegen des »Kamel-

höckers« mitten im Wort.

3.2 Wie gebe ich Daten auf dem Bildschirm aus?

Platzhalter %d

und %f

Sie können zu jedem Zeitpunkt des Programms den aktuellen Wert einer

Variablen auf dem Bildschirm ausgeben. Dazu werden sogenannte Platz-

halter benötigt. Diese stehen bei der Ausgabe mit Hilfe der Funktion

printf() genau an der Stelle des Textes, an der der Wert ausgegeben wer-

den soll. Variablen vom Typ int können mit dem Platzhalter %d (oder auch

mit dem Platzhalter %i) ausgegeben werden. Bei Variablen vom Datentyp

double nimmt man den Platzhalter %f.

Ein Beispiel:

#include <stdio.h>int main(){ /* Deklaration mit Initialisierung */ int anzahl = 2; double preis = 1.45;

/* Ausgabe */ printf("Anzahl: %d\n", anzahl); printf("Preis: %f Euro\n", preis); printf("Preis: %.2f Euro\n", preis);

return 0;}

Listing 3.2 Datei »daten_aus.c«

InitialisierungDiesmal erhalten die Variablen bereits bei der Deklaration einen Wert. Die-

ser Vorgang wird Initialisierung genannt und macht das Programm ein

wenig kompakter. Die Werte der Variablen können sich nach wie vor im

Verlauf des Programms ändern.

3 Verschiedene Arten von Daten

32

Das Programm hat die folgende Ausgabe:

Anzahl: 2Preis: 1.450000 EuroPreis: 1.45 Euro

Formatierte

Ausgabe

Der Wert der Variablen anzahl steht am Ende der ersten Ausgabe. Der Wert

der Variablen preis wird jeweils mitten in der zweiten und dritten Ausgabe

eingebettet. Ohne genauere Angabe führt %f zu einer Formatierung der

Ausgabe auf sechs Nachkommastellen. Durch die Angabe %.2f findet eine

Formatierung auf zwei Nachkommastellen statt.

Dezimalpunkt Beachten Sie die englische Schreibweise: mit einem Dezimalpunkt statt

einem Dezimalkomma.

3.3 Wie kann der Benutzer seine Daten per Tastatur eingeben?

scanf() Ein Programm wird erst dann interaktiv, wenn sein Benutzer die Möglich-

keit hat, Eingaben zu machen. Dazu setzen Sie als Entwickler die Funktion

scanf() ein. Was bewirkt sie?

� Das Programm hält an und wartet auf eine Eingabe. Sie sollten dem

Benutzer vorher mitteilen, welche Information von ihm an dieser Stelle

erwartet wird.

� Nach der Eingabe per Tastatur betätigt der Benutzer die Taste (¢). Erst

dann läuft das Programm weiter, speichert die eingegebenen Daten in

Variablen und verarbeitet sie im weiteren Verlauf des Programms.

Adressoperator Auch bei scanf() werden Platzhalter benötigt, wie bei der Funktion

printf(). Bei Variablen des Datentyps int können Sie weiterhin %d verwen-

den. Eine double-Variable muss allerdings mit %lf eingelesen werden, also

mit dem kleinen Buchstaben l vor dem f. Außerdem muss vor dem Namen

der Variablen das Zeichen & angegeben werden. Dabei handelt es sich um

den sogenannten Adressoperator, der auf die Adresse der Variablen im

Speicher verweist.

Ein Beispiel:

#include <stdio.h>int main()

3.3 Wie kann der Benutzer seine Daten per Tastatur eingeben?

33

{ /* Deklaration */ int anzahl; double preis;

/* Erste Eingabe */ printf("Anzahl eingeben: "); scanf("%d", &anzahl); /* Zweite Eingabe */ printf("Preis in Euro eingeben: "); scanf("%lf", &preis);

/* Ausgabe */ printf("Anzahl: %d\n", anzahl); printf("Preis: %.2f Euro\n", preis);

return 0;}

Listing 3.3 Datei »daten_ein.c«

Die Ausgabe des Programms könnte, mit einigen Beispieleingaben des

Benutzers, wie folgt aussehen:

Anzahl eingeben: 3Preis in Euro eingeben: 1.35Anzahl: 3Preis: 1.35 Euro

Die Funktion scanf() bietet einige Stolperfallen für den Benutzer:

Dezimalpunkt� Er muss bei der Eingabe wiederum die englische Schreibweise beachten,

mit einem Dezimalpunkt statt einem Dezimalkomma.

Falsche Eingaben� Sollte er mehrere Eingaben auf einmal vornehmen, Buchstaben statt

Ziffern eingeben oder ein Komma statt eines Punkts, führt dies leider zu

einem unerwarteten Programmverlauf.

AbfangenSie werden in Abschnitt 12.6, »Zeichen und Texte speichern«, Möglichkei-

ten kennenlernen, mit denen Sie als Entwickler falsche Eingaben des

Benutzers abfangen können. Zunächst gehen wir davon aus, dass er rich-

tige Eingaben vornimmt.

3 Verschiedene Arten von Daten

34

Auch Sie als Entwickler können Fehler machen. Hier einige Tipps, die Sie

beim Einsatz der Funktion scanf() beachten sollten:

� Innerhalb der Anführungsstriche sollte allein der Platzhalter notiert

werden, also nur %d oder %lf, nicht etwa %d\n oder %.2lf.

� Vergessen Sie nicht, den Adressoperator & zu notieren.

Fehler bei der

Ausführung

Das Gefährliche an den genannten Fehlern des Entwicklers: Es sind keine

Syntaxfehler. Das Programm wird also leider übersetzt, ohne sichtbare Feh-

lermeldung. Erst während der Laufzeit des Programms treten Fehler auf,

weil zum Beispiel eine Variable nicht den richtigen Eingabewert erhalten

hat und in der Folge ein unverständliches Ergebnis auftritt.

Vielfalt Sie werden sich fragen: Wieso meldet der Compiler diese Fehler nicht als

Syntaxfehler? Der Grund liegt unter anderem in der Vielfalt der Program-

mierung mit C. Es gibt auch Operationen für andere Einsatzzwecke, die

genau diese Schreibweise erfordern, die zunächst als falsch erscheint.

3.4 Berechnungen mit Operatoren

Grundrechenarten In diesem Abschnitt führen wir einige Berechnungen im Bereich der

Grundrechenarten durch. Wir benutzen die Operatoren + für die Addition,

- für die Subtraktion, * für die Multiplikation und / für die Division.

Punkt vor Strich Wie in der Mathematik gilt: Punktrechnung vor Strichrechnung. Die Opera-

toren * und / haben also Vorrang vor den Operatoren + und -. Sie können

zusätzlich Klammern setzen, um die Reihenfolge der Berechnung zu beein-

flussen. Sie finden in Abschnitt 12.1.9, »Alle Operatoren«, eine Tabelle mit

den Vorrangregeln für die Operatoren.

Zunächst das Programm:

#include <stdio.h>int main(){ /* Deklaration, teilweise mit Initialisierung */ int anzahlApfel = 2, anzahlBirne = 4; double preisApfel = 1.45, preisBirne = 0.85; double summeRechnung, preisMittel, preisDifferenz;

/* Berechnung */

3.4 Berechnungen mit Operatoren

35

summeRechnung = anzahlApfel * preisApfel + anzahlBirne * preisBirne; preisMittel = summeRechnung / (anzahlApfel + anzahlBirne); preisDifferenz = preisApfel - preisBirne;

/* Ausgabe */ printf("Summe der Rechnung: %.2f Euro\n", summeRechnung); printf("Mittlerer Preis: %.2f Euro\n", preisMittel); printf("Preis-Differenz: %.2f Euro\n", preisDifferenz);

return 0;}

Listing 3.4 Datei »daten_rechnen.c«

Was passiert bei diesem Einkaufsvorgang?

Mehrere

Deklarationen

� Es werden zwei verschiedene Artikel eingekauft, in unterschiedlicher

Anzahl. Daher werden weitere Variablen benötigt. Mehrere Variable des-

selben Typs können Sie durch Komma getrennt innerhalb einer Anwei-

sung deklarieren und auch initialisieren.

� Es werden Variable für die Ergebnisse der Rechenoperationen deklariert.

Summe� Zur Berechnung der Summe der Rechnung werden die Einzelsummen

pro Artikel ermittelt. Anschließend werden diese Einzelsummen ad-

diert.

Mittelwert� Der mittlere Preis eines Artikels dieses Einkaufsvorgangs ergibt sich,

indem wir die Summe der Rechnung durch die Gesamtanzahl der Arti-

kel teilen. Wir müssen Klammern setzen, da ansonsten die Division Vor-

rang hätte.

Differenz� Als Letztes wird die preisliche Differenz der beiden Artikel ermittelt.

Es ergibt sich die folgende Ausgabe:

Summe der Rechnung: 6.30 EuroMittlerer Preis: 1.05 EuroPreis-Differenz: 0.60 Euro

Daten umwandelnEine Rechenoperation, an der eine ganze Zahl und eine Zahl mit Nach-

kommastellen beteiligt sind, ergibt in C eine Zahl mit Nachkommastellen.

Ein Beispiel: Bei der Berechnung des mittleren Preises pro Artikel wird eine

3 Verschiedene Arten von Daten

36

double-Variable durch die Summe von zwei int-Variablen geteilt. Es ergibt

sich ein double-Wert.

Ganzzahldivision

3.5 Entwicklung eines Programms

Teile eines

Programms

Bei der Entwicklung Ihrer eigenen Programme sollten Sie Schritt für Schritt

vorgehen. Stellen Sie zuerst einige Überlegungen an, wie das gesamte Pro-

gramm aufgebaut sein sollte, und zwar auf Papier. Aus welchen Teilen

sollte es nacheinander bestehen? Versuchen Sie dann nicht, das gesamte

Programm mit all seinen komplexen Bestandteilen auf einmal zu schrei-

ben! Dies ist der größte Fehler, den Einsteiger (und manchmal auch Fort-

geschrittene) machen können.

Einfache Version Schreiben Sie zunächst eine einfache Version des ersten Programmteils.

Anschließend testen Sie sie. Erst nach einem erfolgreichen Test fügen Sie

den folgenden Programmteil hinzu. Nach jeder Änderung testen Sie wie-

derum. Sollte sich ein Fehler zeigen, so wissen Sie, dass er aufgrund der letz-

ten Änderung aufgetreten ist. Nach dem letzten Hinzufügen haben Sie eine

einfache Version Ihres gesamten Programms.

Komplexe Version Nun ändern Sie einen Teil Ihres Programms in eine komplexere Version ab.

Auf diese Weise machen Sie Ihr Programm Schritt für Schritt komplexer,

bis Sie schließlich das gesamte Programm so erstellt haben, wie es Ihren

anfänglichen Überlegungen auf Papier entspricht.

Änderungen Manchmal ergibt sich während der praktischen Programmierung noch die

eine oder andere Änderung gegenüber Ihrem Entwurf. Das ist kein Pro-

Hinweis

Falls an einer Division zwei ganze Zahlen beteiligt sind, ergibt sich wie-

derum eine ganze Zahl. Sollten sich Nachkommastellen ergeben, dann

werden diese abgeschnitten. Ein Beispiel: 11 durch 4 ergibt den Wert 2

und nicht etwa 2,75, wie es mathematisch richtig wäre.

Als Abhilfe kann zum Beispiel Folgendes dienen:

� Sie schreiben 11.0 / 4 oder 11 / 4.0, geben also eine der beiden Zahlen

als double-Wert an.

� Sie schreiben 1.0 * 11 / 4, multiplizieren also einen double-Wert mit der

ersten Zahl.

3.6 Fehler suchen

37

blem, solange sich nicht der gesamte Aufbau ändert. Sollte dies allerdings

der Fall sein, so kehren Sie noch einmal kurz zum Papier zurück und über-

denken den Aufbau. Das bedeutet nicht, dass Sie die bisherigen Programm-

zeilen löschen müssen, sondern möglicherweise nur ein wenig ändern und

anders anordnen.

Einzelne SchritteSchreiben Sie Ihre Programme übersichtlich. Falls Sie gerade überlegen,

wie Sie drei, vier bestimmte Schritte Ihres Programms auf einmal machen

können: Machen Sie daraus einfach einzelne Anweisungen, die der Reihe

nach ausgeführt werden. Dies vereinfacht eine eventuelle Fehlersuche.

Falls Sie (oder jemand anders) Ihr Programm später einmal ändern oder

erweitern möchten, dann gelingt der Einstieg in den Aufbau des Pro-

gramms wesentlich schneller.

Sie können die Funktion printf() und das nachfolgend beschriebene

Debugging zur Kontrolle von Werten und zur Suche von logischen Fehlern

einsetzen. Zusätzlich können Sie einzelne Zeilen Ihres Programms als

Kommentar kennzeichnen, um festzustellen, welcher Teil des Programms

fehlerfrei läuft und welcher Teil demnach fehlerbehaftet ist.

3.6 Fehler suchen

DebuggingSollte eines Ihrer Programme unerwartete Ergebnisse haben, so müssen

Sie sich auf die Suche nach dem Fehler machen. Wie auch andere Entwick-

lungsumgebungen bietet Ihnen Dev-C++ einige Möglichkeiten für dieses

sogenannte Debugging.

Werte kontrollierenDiese möchte ich Ihnen schon zu diesem frühen Zeitpunkt vorstellen,

damit Sie sich an die Handhabung gewöhnen. Sie können Ihr Programm

schrittweise ablaufen lassen, um die Werte bestimmter Variablen zu unter-

schiedlichen Zeitpunkten des Programms zu kontrollieren.

HaltepunktKlicken Sie einmal auf den grauen Balken vor einer Programmzeile.

Anschließend wird die Zeile rot unterlegt. Sie dient nun als Haltepunkt. Sie

können auf diese Weise mehrere Haltepunkte setzen. Ein erneuter Klick in

derselben Programmzeile entfernt den Haltepunkt wieder. In Abbil-

dung 3.1 sehen Sie im Programm daten_rechnen.c zwei Haltepunkte.

Bei der normalen Ausführung des Programms mit Hilfe des Menüpunkts

Ausführen � Kompilieren + Ausführen (Funktionstaste (F11)) ändert

sich durch die Haltepunkte noch nichts.

3 Verschiedene Arten von Daten

38

Abbildung 3.1 Zwei Haltepunkte

Programm hält an Falls Sie aber das Menü Fehlersuche und darin den Menüpunkt Fehler-

suche wählen (Funktionstaste (F5)), dann hält das Programm vor dem

Ausführen der Zeile mit dem Haltepunkt an. Falls es schon Ausgaben gege-

ben hat, so stehen diese bereits im Ausgabefenster. Steht das Programm

zum Beispiel am zweiten Haltepunkt in Abbildung 3.1, dann wurde die

Summe der Rechnung bereits ausgegeben.

Aktuelle Werte Lassen Sie die Maus über einer der Variablen schweben (ohne zu klicken),

dann wird der aktuelle Wert der Variablen in einem kleinen Feld sichtbar.

In Abbildung 3.2 sehen Sie den aktuellen Wert der Variablen preisMittel,

nachdem Programmzeile 13 durchlaufen wurde.

Abbildung 3.2 Wert einer Variablen im Tooltip-Feld

Einzelschritte Die Auswahl des Menüpunkts Nächster Schritt im Menü Fehlersuche

(Funktionstaste (F7)) führt dazu, dass genau eine Programmzeile bearbei-

tet wird. Auf diese Weise können Sie also Ihr Programm schrittweise ablau-

fen lassen. Dies habe ich in Abbildung 3.1 bereits mehrmals durchgeführt,

so dass das Programm aktuell auf Programmzeile 14 steht.

Weiterspringen Der Menüpunkt Fortsetzen im Menü Fehlersuche bewirkt, dass das

Programm zum nächsten Haltepunkt vorrückt, falls vorhanden. Falls es

keinen weiteren Haltepunkt geben sollte, wird die Fehlersuche beendet.

Dasselbe passiert, wenn Sie den Menüpunkt Ausführung stoppen im

Menü Fehlersuche wählen (Funktionstaste (F6)).

3.7 Eine Übungsaufgabe

39

Watch hinzufügenSie können im Menü Fehlersuche auch jederzeit den Menüpunkt Watch

hinzuf. aufrufen. Anschließend geben Sie in dem kleinen Dialogfeld

Neuer Variablen Watch den Namen einer Variablen ein, zum Beispiel

»preisMittel«, siehe Abbildung 3.3.

Abbildung 3.3 Watch hinzufügen

Dauerhafte AnzeigeDiese Variable erscheint dann inklusive ihres jeweils aktuellen Werts dau-

erhaft auf der Registerkarte Fehlersuche im Projekt/Klassen-Browser

auf der linken Seite, siehe Abbildung 3.4. Sollte der Browser nicht zu sehen

sein, so können Sie ihn über den entsprechenden Menüpunkt im Menü

Ansicht einblenden.

Abbildung 3.4 Variable im Watch-Fenster

3.7 Eine Übungsaufgabe

Schreiben Sie ein Programm in der Datei u_daten.c. Es soll die folgende

Ausgabe ermöglichen (hier mit Eingaben des Benutzers):

Erster Artikel, Anzahl: 5Erster Artikel, Preis in Euro: 2.10Zweiter Artikel, Anzahl: 2Zweiter Artikel, Preis in Euro: 1.60Summe ohne Rabatt: 13.70 EuroSumme mit Rabatt: 10.96 Euro

3 Verschiedene Arten von Daten

40

Rabatt berechnen Der Benutzer soll also Anzahl und Preis für zwei verschiedene einge-

kaufte Artikel eingeben. Anschließend wird die Summe der Rechnung

ermittelt. Außerdem wird ein Rabatt von 20 % gewährt. Als Letztes soll die

Summe einschließlich des eingerechneten Rabatts ausgegeben werden.

Wählen Sie geeignete Variablennamen, und kommentieren Sie Ihr Pro-

gramm ausreichend. Eine mögliche Lösung finden Sie im Anhang in

Abschnitt D.2, »Datei ›u_daten.c‹«.

41

Kapitel 4

Verschiedene Fälle in einem Programm

Ein Programm kann unterschiedliche Anweisungen durchlaufen,

abhängig vom Wahrheitswert einer oder mehrerer Bedingungen.

In den bisherigen Programmen wurden alle Anweisungen Zeile für Zeile

ausgeführt. Ein Programm soll aber auch in der Lage sein, auf unterschied-

liche Situationen zu reagieren. Sie als Entwickler können nicht wissen, was

der Benutzer eingibt oder welche Inhalte eine Datei bietet, die Daten für Ihr

Programm bereitstellt.

VerzweigungIn diesen Fällen sollte Ihr Programm verzweigen. Es sollte abhängig von

der Situation unterschiedliche Anweisungen durchlaufen. Eine Verzwei-

gung wird mit Hilfe einer Bedingung formuliert. Eine Bedingung hat einen

Wahrheitswert. Dieser ist entweder wahr oder falsch.

4.1 Eine einfache Bedingung mit »if«

WahrSie können eine Verzweigung durch das Schlüsselwort if einleiten. Nach

dem if folgt in runden Klammern eine Bedingung. Ist diese Bedingung

wahr, wird die folgende Anweisung oder der folgende Block von Anwei-

sungen ausgeführt. Eine Bedingung bilden Sie mit Hilfe eines Vergleichs-

operators.

AnweisungsblockEinen Block von Anweisungen erzeugen Sie mit Hilfe von geschweiften

Klammern. Jede Funktion, also auch die Funktion main(), enthält einen sol-

chen Block von Anweisungen.

Ein Beispiel:

#include <stdio.h>int main(){

4 Verschiedene Fälle in einem Programm

42

double preis = 0.85;

/* Bedingte Ausführung eines Blocks von Anweisungen */ if(preis > 0.99) { printf("Ein teurer Artikel\n"); printf("Brauchen wir den wirklich?\n"); }

/* Bedingte Ausführung einer einzelnen Anweisung */ if(preis < 1.0) printf("Ein billiger Artikel\n");

return 0;}

Listing 4.1 Datei »fall_if.c«

Vergleichs-

operatoren

Es werden die beiden Vergleichsoperatoren > (größer als) und < (kleiner als)

verwendet. Liegt der Preis über 99 Cent, dann handelt es sich um einen teu-

ren Artikel, und es wird der Block mit den beiden Anweisungen zur Aus-

gabe durchgeführt. Liegt der Preis unterhalb von einem Euro, dann ist der

Artikel billig, und es wird die einzelne Anweisung ausgeführt.

Das Programm erzeugt die folgende Ausgabe:

Ein billiger Artikel

Ändern Sie einmal den Preis so ab, dass die andere Ausgabe erfolgt.

Einrückung Eine Empfehlung: Erhöhen Sie die Lesbarkeit Ihrer Programme, indem Sie

die Anweisung(en) innerhalb einer Verzweigung einrücken, wie Sie dies im

vorliegenden Programm sehen.

Hinweis

Achten Sie darauf, nach der Bedingung kein Semikolon zu notieren. Dies

würde die Verzweigung unmittelbar beenden. Der Compiler meldet die-

sen Fehler nicht. Die anschließende Anweisung wäre nicht mehr mit der

Verzweigung verbunden und würde stets ausgeführt.

4.2 Welche Bedingungen gibt es?

43

4.2 Welche Bedingungen gibt es?

> < >= <= == !=Beim Vergleich von Zahlen stehen Ihnen sechs verschiedene Vergleichs-

operatoren zur Verfügung. Neben > und < gibt es vier Operatoren, die

jeweils aus zwei Zeichen bestehen: >= (größer als oder gleich), <= (kleiner als

oder gleich), == (gleich) und != (ungleich).

Alle Vergleichsoperatoren werden in folgendem Beispiel genutzt:

#include <stdio.h>int main(){ double preisApfel = 1.45, preisBirne = 0.85, preisKiwi = 1.45;

/* Größer */ if(preisApfel > preisBirne) printf("Apfel ist teurer als Birne\n");

/* Kleiner */ if(preisBirne < preisKiwi) printf("Birne ist billiger als Kiwi\n");

/* Größer oder gleich */ if(preisApfel >= preisKiwi) printf("Apfel ist mindestens so teuer wie Kiwi\n");

/* Kleiner oder gleich */ if(preisBirne <= preisKiwi) printf("Birne ist hoechstens so teuer wie Kiwi\n");

/* Gleich */ if(preisApfel == preisKiwi) printf("Apfel und Kiwi haben denselben Preis\n");

/* Ungleich */ if(preisBirne != preisKiwi) printf("Birne und Kiwi haben unterschiedliche Preise\n");

return 0;}

Listing 4.2 Datei »fall_vergleich.c«

4 Verschiedene Fälle in einem Programm

44

Es werden die Preise von drei unterschiedlichen Artikeln miteinander ver-

glichen. Das Programm erzeugt die folgende Ausgabe:

Apfel ist teurer als BirneBirne ist billiger als KiwiApfel ist mindestens so teuer wie KiwiBirne ist hoechstens so teuer wie KiwiApfel und Kiwi haben denselben PreisBirne und Kiwi haben unterschiedliche Preise

Bei den hier gewählten Preisen werden alle Bedingungen erfüllt, und es

erfolgen alle Ausgaben. Ändern Sie einmal einzelne Preise ab, und überle-

gen Sie, welche Ausgaben dann erfolgen und welche nicht. Starten Sie erst

anschließend zur Bestätigung das Programm.

= und ==

4.3 Zwei Möglichkeiten, mit »if« und »else«

Nicht wahr Sie können eine Verzweigung durch das Schlüsselwort else erweitern. Ist

die Bedingung nach dem if nicht wahr, dann wird die Anweisung oder der

Block von Anweisungen ausgeführt, der dem else folgt.

Ein Beispiel:

#include <stdio.h>int main(){ double preis = 0.85;

/* Falls Bedingung zutrifft */ if(preis > 0.99) printf("Ein teurer Artikel\n");

Hinweis

Achten Sie auf den Unterschied zwischen einer Zuweisung mit = und

einem Vergleich mit ==. Der Compiler übersetzt auch die Anweisung

if(preis = 1.5) ohne Fehlermeldung. Allerdings haben Sie damit nicht

geprüft, ob der Preis 1,50 Euro beträgt, sondern den Preis mit 1,50 Euro

festgelegt. Dies führt nicht zu den erwarteten Ergebnissen.

4.4 Wie kann ich Bedingungen kombinieren?

45

/* Ansonsten, falls also Bedingung nicht zutrifft */ else { printf("Ein billiger Artikel\n"); printf("Den nehmen wir\n"); }

return 0;}

Listing 4.3 Datei »fall_else.c«

Das Programm erzeugt in jedem Fall eine Ausgabe. Hier ist es die folgende:

Ein billiger ArtikelDen nehmen wir

4.4 Wie kann ich Bedingungen kombinieren?

VerknüpfungDer Ablauf innerhalb einer Verzweigung kann auch von mehreren Bedin-

gungen abhängig sein, die miteinander verknüpft werden. Die wichtigste

Frage ist: Sollen alle Bedingungen wahr sein, oder reicht es aus, wenn eine

der Bedingungen wahr ist?

Und &&� Falls alle Bedingungen zutreffen sollen, dann verknüpfen Sie sie mit

Hilfe des Operators &&. Er steht für das logische Und.

Oder ||� Reicht dagegen eine Bedingung aus, dann nutzen Sie den Operator ||.

Er steht für das logische Oder.

Nicht !Es gibt noch einen dritten logischen Operator: Das Zeichen ! steht für das

logische Nicht. Mit diesem Operator wird der Wahrheitswert einer Bedin-

Hinweis

Achten Sie auch darauf, nach dem else kein Semikolon zu notieren. Dies

würde diesen Zweig der Verzweigung unmittelbar beenden. Der Compi-

ler meldet diesen Fehler ebenfalls nicht. Die anschließende Anweisung

wäre nicht mehr mit der Verzweigung verbunden und würde stets ausge-

führt.

4 Verschiedene Fälle in einem Programm

46

gung umgedreht: Aus wahr wird falsch und umgekehrt. Manche Verzwei-

gung lässt sich mit Hilfe dieses Operators einfacher formulieren.

Ein Beispiel:

#include <stdio.h>int main(){ double preisApfel = 1.45, preisBirne = 0.85, preisBanane = 0.75;

/* Logisches Und */ if(preisBirne < 1.0 && preisBanane < 1.0) printf("Beide Artikel sind billig\n");

/* Logisches Oder */ if(preisApfel > 0.99 || preisBirne > 0.99) printf("Mindestens einer der Artikel ist teuer\n");

/* Logisches Nicht */ if(!(preisBanane > 0.99)) printf("Artikel ist nicht teuer\n");

return 0;}

Listing 4.4 Datei »fall_kombi.c«

Es werden die Preise von drei unterschiedlichen Artikeln miteinander

verglichen. Das Programm erzeugt die folgende Ausgabe:

Beide Artikel sind billigMindestens einer der Artikel ist teuerArtikel ist nicht teuer

Bei den hier gewählten Preisen werden alle Bedingungen erfüllt, und es

erfolgen alle Ausgaben. Ändern Sie einmal einzelne Preise ab, und über-

legen Sie, welche Ausgaben dann erfolgen und welche nicht. Starten Sie

erst anschließend zur Bestätigung das Programm.

Vergleich vor

Verknüpfung

Die Vergleichsoperatoren haben Vorrang vor den logischen Operatoren &&

und ||. Das bedeutet, dass zunächst der Wahrheitswert der einzelnen

4.5 Eine Übungsaufgabe

47

Bedingungen ermittelt wird. Erst anschließend werden die Bedingungen

verknüpft.

VorrangregelnAllerdings hat der Operator ! für das logische Nicht Vorrang vor den Ver-

gleichsoperatoren. Daher wird die Bedingung in Klammern gesetzt, bevor

ihr Wahrheitswert umgekehrt wird. Sie finden in Abschnitt 12.1.9, »Alle

Operatoren«, eine Tabelle mit den Vorrangregeln für die Operatoren.

4.5 Eine Übungsaufgabe

Schreiben Sie ein Programm in der Datei u_fall.c. Es soll die folgende Aus-

gabe ermöglichen (hier mit Eingaben des Benutzers):

Anzahl: 5Preis in Euro: 3.20Summe der Rechnung: 12.80 Euro

Der Benutzer soll Anzahl und Preis für einen eingekauften Artikel einge-

ben. Anschließend wird die Summe der Rechnung ermittelt. Falls diese

Summe 10 Euro überschreitet, soll ein Rabatt von 20% gewährt werden;

ansonsten soll kein Rabatt gewährt werden. Wählen Sie geeignete Variab-

lennamen, und kommentieren Sie Ihr Programm ausreichend. Eine mögli-

che Lösung finden Sie in Abschnitt D.3, » Datei ›u_fall.c‹«.

Auf einen Blick

Auf einen Blick

1 Eine erste Einführung ........................................................................................... 15

2 Unser erstes Programm ....................................................................................... 19

3 Verschiedene Arten von Daten ......................................................................... 29

4 Verschiedene Fälle in einem Programm ........................................................ 41

5 Programmteile wiederholen .............................................................................. 49

6 Programme übersichtlich aufteilen ................................................................ 61

7 Große Datenmengen speichern ....................................................................... 69

8 Zeichen und Texte speichern ............................................................................. 75

9 Indirekter Zugriff mit Zeigern ........................................................................... 83

10 Unterschiedliche Daten zusammenfassen ................................................... 89

11 Daten auf der Festplatte ..................................................................................... 101

12 Eine Vertiefung der bisherigen Themen ........................................................ 107

13 Daten dynamisch im Speicher verwalten ..................................................... 215

14 Arbeiten mit Zahlen .............................................................................................. 227

15 Präprozessor-Anweisungen ............................................................................... 247

16 Zugriff auf Dateien und Verzeichnisse ........................................................... 255

17 Umgang mit Datum und Uhrzeit ..................................................................... 269

18 Kommunikation mit dem Betriebssystem .................................................... 281

19 Datenbanken ........................................................................................................... 287

20 Beispielprojekte ..................................................................................................... 309

21 Grafische Benutzeroberflächen mit GTK+ .................................................... 337

22 Raspberry Pi ............................................................................................................. 361

Inhalt

5

Inhalt

1 Eine erste Einführung 15

1.1 Welche Vorteile bietet C? ....................................................................................... 15

1.2 Was benötige ich zum Programmieren? .............................................................. 16

1.3 Wie ist dieses Buch aufgebaut? ............................................................................. 16

1.4 Wie sollten Sie mit diesem Buch arbeiten? ......................................................... 17

2 Unser erstes Programm 19

2.1 Wie gebe ich das Programm ein? .......................................................................... 19

2.2 Das Programm wird gespeichert ........................................................................... 21

2.3 Wie starte ich das fertige Programm? .................................................................. 23

2.4 Eine weitere Möglichkeit zum Starten ................................................................. 25

2.5 Kommentare sind wichtig ...................................................................................... 26

2.6 Eine Übungsaufgabe ................................................................................................ 27

3 Verschiedene Arten von Daten 29

3.1 Daten bekannt machen und speichern ................................................................ 29

3.2 Wie gebe ich Daten auf dem Bildschirm aus? ..................................................... 31

3.3 Wie kann der Benutzer seine Daten per Tastatur eingeben? .......................... 32

3.4 Berechnungen mit Operatoren .............................................................................. 34

3.5 Entwicklung eines Programms .............................................................................. 36

3.6 Fehler suchen ............................................................................................................. 37

3.7 Eine Übungsaufgabe ................................................................................................ 39

Inhalt

6

4 Verschiedene Fälle in einem Programm 41

4.1 Eine einfache Bedingung mit »if« ......................................................................... 41

4.2 Welche Bedingungen gibt es? ................................................................................ 43

4.3 Zwei Möglichkeiten, mit »if« und »else« ............................................................ 44

4.4 Wie kann ich Bedingungen kombinieren? .......................................................... 45

4.5 Eine Übungsaufgabe ................................................................................................ 47

5 Programmteile wiederholen 49

5.1 Regelmäßige Wiederholungen mit »for« ............................................................ 50

5.2 Bedingte Wiederholungen mit »do-while« ........................................................ 52

5.3 Besser vorher prüfen mit »while«? ....................................................................... 54

5.4 Tabellen formatieren ............................................................................................... 57

5.5 Eine Übungsaufgabe zu Tabellen .......................................................................... 58

5.6 Eine Übungsaufgabe zur Eingabekontrolle ......................................................... 59

6 Programme übersichtlich aufteilen 61

6.1 Wie definiere ich eine Funktion? ........................................................................... 61

6.2 Wie rufe ich eine Funktion auf? ............................................................................. 63

6.3 Werte an eine Funktion übergeben ...................................................................... 64

6.4 Ein Ergebnis von einer Funktion zurückerhalten ............................................... 66

6.5 Eine Übungsaufgabe ................................................................................................ 67

7 Große Datenmengen speichern 69

7.1 Felder erzeugen und mit Daten füllen ................................................................. 69

7.2 Wie gebe ich die Daten aus? .................................................................................. 71

Inhalt

7

7.3 Wie kann der Benutzer ein Feld füllen? ............................................................... 72

7.4 Eine Übungsaufgabe ................................................................................................ 74

8 Zeichen und Texte speichern 75

8.1 Zeichenketten erzeugen und füllen ...................................................................... 75

8.2 Wie gebe ich eine Zeichenkette aus? ................................................................... 77

8.3 Wie kann der Benutzer eine Zeichenkette füllen? ............................................ 78

8.4 Mehrere Zeichenketten ........................................................................................... 79

8.5 Wie kann ich Zeichenketten formatieren? .......................................................... 80

8.6 Eine Übungsaufgabe ................................................................................................ 81

9 Indirekter Zugriff mit Zeigern 83

9.1 Wie arbeite ich mit Zeigern und Adressen? ........................................................ 83

9.2 Wie nutze ich Zeiger bei Funktionen? .................................................................. 85

9.3 Wir zeigen auf Felder ............................................................................................... 86

9.4 Eine Übungsaufgabe ................................................................................................ 88

10 Unterschiedliche Daten zusammenfassen 89

10.1 Strukturen definieren .............................................................................................. 89

10.2 Wie erzeuge ich Strukturdaten? ............................................................................ 90

10.3 Wie gebe ich die Daten aus? .................................................................................. 91

10.4 Wie kann der Benutzer Strukturen füllen? ......................................................... 92

10.5 Mehrere Strukturdaten ........................................................................................... 94

10.6 Wie übergebe ich Strukturdaten? ......................................................................... 95

10.7 Eine Übungsaufgabe ................................................................................................ 98

Inhalt

8

11 Daten auf der Festplatte 101

11.1 Wie speichere ich Daten auf der Festplatte? ...................................................... 101

11.2 Wie lese ich Daten von der Festplatte? ................................................................ 104

11.3 Eine Übungsaufgabe ................................................................................................ 106

12 Eine Vertiefung der bisherigen Themen 107

12.1 Verschiedene Arten von Daten .............................................................................. 107

12.1.1 Mehrere Daten auf einmal einlesen ....................................................... 107

12.1.2 Datentypen für ganze Zahlen .................................................................. 109

12.1.3 Datentypen für Zahlen mit Nachkommastellen ................................... 111

12.1.4 Umwandlungen zwischen Datentypen .................................................. 113

12.1.5 Konstanten sind unveränderlich ............................................................. 115

12.1.6 Zufällige Zahlen ........................................................................................ 116

12.1.7 Kombinierte Zuweisungen ...................................................................... 118

12.1.8 Daten tauschen ......................................................................................... 120

12.1.9 Alle Operatoren ......................................................................................... 122

12.2 Verschiedene Fälle in einem Programm .............................................................. 124

12.2.1 Wahrheitswerte ........................................................................................ 124

12.2.2 Bedingte Zuweisung ................................................................................. 126

12.2.3 Mehr als zwei Fälle .................................................................................... 127

12.2.4 Fälle zusammenfassen ............................................................................. 128

12.2.5 Nebenwirkungen bei logischen Verknüpfungen .................................. 130

12.3 Programmteile wiederholen .................................................................................. 131

12.3.1 Varianten der »for«-Schleife .................................................................... 132

12.3.2 Schleifen vorzeitig abbrechen oder später fortsetzen .......................... 135

12.3.3 Eine Schleife in einer Schleife .................................................................. 137

12.3.4 Eine mehrfache Schleife abbrechen ....................................................... 138

12.4 Programme übersichtlich aufteilen ...................................................................... 139

12.4.1 Funktionen deklarieren ............................................................................ 140

12.4.2 Lokale und globale Variablen .................................................................. 141

12.4.3 Statische Variable ..................................................................................... 143

12.4.4 Rekursive Funktionen ............................................................................... 144

12.4.5 Zeiger auf Funktionen .............................................................................. 146

Inhalt

9

12.4.6 Beliebige Anzahl von Parametern ........................................................... 148

12.5 Große Datenmengen speichern ............................................................................. 149

12.5.1 Operationen mit Feldern .......................................................................... 150

12.5.2 Mehrdimensionale Felder ........................................................................ 156

12.5.3 Felder sortieren ......................................................................................... 158

12.5.4 Elemente in einem Feld suchen .............................................................. 162

12.6 Zeichen und Texte speichern .................................................................................. 166

12.6.1 Einzelne Zeichen ....................................................................................... 166

12.6.2 Code eines Zeichens ................................................................................. 167

12.6.3 Funktionen für Zeichenketten ................................................................. 169

12.6.4 Zeichenketten vergleichen ....................................................................... 171

12.6.5 Zeichenketten zerlegen ............................................................................ 172

12.6.6 Sicheres Einlesen von Wörtern ................................................................ 174

12.6.7 Sicheres Einlesen von Zeichenketten ...................................................... 175

12.6.8 Zeichenketten und Zahlen umwandeln ................................................. 177

12.6.9 Sicheres Einlesen von Zahlen ................................................................... 179

12.6.10 Operationen mit Zeichenketten .............................................................. 181

12.7 Indirekter Zugriff mit Zeigern ................................................................................ 190

12.7.1 Rechnen mit Zeigern und Adressen ........................................................ 190

12.8 Unterschiedliche Daten zusammenfassen .......................................................... 192

12.8.1 Vereinfachung durch »typedef« .............................................................. 193

12.8.2 Strukturen in Strukturen .......................................................................... 193

12.8.3 Enumerationen ......................................................................................... 195

12.9 Daten auf der Festplatte ......................................................................................... 197

12.9.1 Programm mit Ein- und Ausgabe ............................................................ 197

12.9.2 Umlenkung der Ein- und Ausgabe .......................................................... 199

12.9.3 CSV-Dateien schreiben ............................................................................. 200

12.9.4 CSV-Dateien lesen ..................................................................................... 203

12.9.5 Datensätze mit fester Länge schreiben .................................................. 205

12.9.6 Datensätze mit fester Länge lesen .......................................................... 207

12.9.7 Datensätze mit fester Länge schreiben und lesen ................................ 209

13 Daten dynamisch im Speicher verwalten 215

13.1 Warum benötige ich dynamische Felder? ........................................................... 215

13.2 Eine Datenreihe dynamisch speichern ................................................................. 216

Inhalt

10

13.3 Größe eines dynamischen Felds ändern .............................................................. 218

13.4 Eine Tabelle dynamisch speichern ........................................................................ 220

13.5 Wie übergebe ich ein dynamisches Feld an eine Funktion? ............................ 223

14 Arbeiten mit Zahlen 227

14.1 Winkelfunktionen .................................................................................................... 227

14.2 Runden, Nachkommastellen, Modulo .................................................................. 229

14.3 Weitere mathematische Funktionen ................................................................... 231

14.4 Komplexe Zahlen darstellen .................................................................................. 232

14.5 Rechnen mit komplexen Zahlen ............................................................................ 234

14.6 Weitere Funktionen für komplexe Zahlen .......................................................... 236

14.7 Bit-Operatoren .......................................................................................................... 237

14.8 Umwandlung von Dualzahlen ............................................................................... 241

14.9 Bitfelder ...................................................................................................................... 243

15 Präprozessor-Anweisungen 247

15.1 Einbinden von Dateien ............................................................................................ 247

15.2 Definitionen und Makros ........................................................................................ 248

15.3 Definitionen und Verzweigungen ......................................................................... 250

15.4 Eine Systemweiche ................................................................................................... 252

16 Zugriff auf Dateien und Verzeichnisse 255

16.1 Attribute von Dateien und Verzeichnissen ......................................................... 255

16.2 Zugriffsrechte ändern .............................................................................................. 258

16.3 Inhalt eines Verzeichnisses ..................................................................................... 261

Inhalt

11

16.4 Inhalt eines Verzeichnisbaums .............................................................................. 263

16.5 Dateien ändern .......................................................................................................... 266

16.6 Verzeichnisse ändern ............................................................................................... 267

17 Umgang mit Datum und Uhrzeit 269

17.1 Weltzeit ausgeben .................................................................................................... 269

17.2 Lokale Zeit ausgeben und formatieren ................................................................ 270

17.3 Zeitangaben erzeugen ............................................................................................. 273

17.4 Zeitspanne messen ................................................................................................... 274

17.5 Zeit abwarten ............................................................................................................ 276

17.6 Alter berechnen ......................................................................................................... 278

18 Kommunikation mit dem Betriebssystem 281

18.1 Wie übergebe ich Daten an ein Programm? ....................................................... 281

18.2 Wie nutze ich die Rückgabe eines Programms? ................................................. 283

18.3 Systemkommandos ausführen .............................................................................. 286

19 Datenbanken 287

19.1 Aufbau einer Datenbank ......................................................................................... 287

19.2 Datenbanken mit SQLite ......................................................................................... 288

19.3 Datenbank und Tabelle erzeugen ......................................................................... 289

19.4 Datensätze einfügen ................................................................................................ 291

19.5 Anzeigen der Datensätze ........................................................................................ 293

19.6 Auswahl von Datensätzen und Feldern ............................................................... 295

19.7 Auswahl mit Platzhaltern ....................................................................................... 298

Inhalt

12

19.8 Auswahl nach Eingabe ............................................................................................. 300

19.9 Sortieren der Ausgabe ............................................................................................. 302

19.10 Ändern von Datensätzen ........................................................................................ 304

19.11 Löschen von Datensätzen ....................................................................................... 305

20 Beispielprojekte 309

20.1 Lernspiel: Hauptstädte der EU ............................................................................... 309

20.2 Lernspiel: Kopfrechnen ............................................................................................ 315

20.2.1 Das Basisprogramm .................................................................................. 315

20.2.2 Version mit Zeitmessung ......................................................................... 319

20.2.3 Version mit Highscore-Datei ................................................................... 320

20.3 Ausgabe von Morsezeichen .................................................................................... 323

20.3.1 Textdatei als Datenquelle ........................................................................ 324

20.3.2 Morse-Code auf dem Bildschirm ............................................................. 325

20.3.3 Morse-Code per Lautsprecher ................................................................. 326

20.4 Spiel Mastermind ...................................................................................................... 330

21 Grafische Benutzeroberflächen mit GTK+ 337

21.1 Datentypen der »Glib« ............................................................................................ 337

21.2 Zeichenketten mit »GString« ................................................................................. 339

21.3 Felder mit GArray ...................................................................................................... 341

21.3.1 Aufbau des Programms ............................................................................ 341

21.3.2 Rahmen des Programms .......................................................................... 341

21.3.3 Hilfsfunktion zum Einlesen ...................................................................... 343

21.3.4 Ausgabe aller Elemente ............................................................................ 344

21.3.5 Einfügen am Anfang und am Ende ......................................................... 344

21.3.6 Einfügen an beliebiger Position .............................................................. 345

21.3.7 Löschen eines Elements ........................................................................... 346

21.4 Die erste Benutzeroberfläche ................................................................................. 347

Inhalt

13

21.5 Eigenschaften setzen und abrufen ....................................................................... 349

21.6 Ereignisfunktionen ................................................................................................... 351

21.7 Positionierung von Widgets ................................................................................... 352

21.8 Auswahl- und Eingabe-Widgets ............................................................................ 354

22 Raspberry Pi 361

22.1 Einzelteile und Installation ..................................................................................... 361

22.1.1 Einzelteile ................................................................................................... 362

22.1.2 Zusammenbau .......................................................................................... 364

22.1.3 Installation ................................................................................................. 365

22.1.4 Update ........................................................................................................ 366

22.1.5 WLAN und Internet ................................................................................... 366

22.2 Elektronische Schaltungen ..................................................................................... 367

22.2.1 Gleichspannungs-Stromkreis .................................................................. 367

22.2.2 Spannung ist Information ........................................................................ 368

22.2.3 Bauelemente und Ausrüstung ................................................................ 368

22.2.4 Widerstände .............................................................................................. 369

22.3 Aufbau des GPIO-Anschlusses ................................................................................ 371

22.3.1 Bibliothek »wiringPi« ................................................................................ 373

22.4 Leuchtdiode ................................................................................................................ 373

22.4.1 Schaltung ................................................................................................... 374

22.4.2 LED ein- und ausschalten ......................................................................... 374

22.4.3 LED blinken lassen .................................................................................... 375

22.4.4 LED blinkt Morsezeichen .......................................................................... 376

22.5 Taster ........................................................................................................................... 378

22.5.1 Schaltung ................................................................................................... 378

22.5.2 Einfache Prüfung des Tasters .................................................................. 379

22.5.3 Verbesserte Prüfung des Tasters ............................................................. 380

22.6 Ein Reaktionsspiel ..................................................................................................... 382

22.6.1 Schaltung ................................................................................................... 382

22.6.2 Programm .................................................................................................. 383

Inhalt

14

Anhang

A Änderungen der Programmierung mit C ............................................................. 389

A.1 C-Standards ............................................................................................... 389

A.2 C99, neue Datentypen ............................................................................. 389

A.3 C99, erweiterte Deklarationen ................................................................ 391

A.4 C99, boolesche Variable ........................................................................... 393

A.5 C11, Überladen von Funktionen ............................................................... 393

B Installationen ............................................................................................................ 397

B.1 Installationen unter Windows ................................................................ 397

B.2 Installationen unter Ubuntu Linux ......................................................... 405

B.3 Installationen unter OS X ......................................................................... 407

C Hilfestellungen und Übersichten .......................................................................... 411

C.1 Windows – einige Tastenkombinationen .............................................. 411

C.2 Unix-Befehle .............................................................................................. 411

C.3 Schlüsselwörter der Sprache C ................................................................ 415

C.4 Liste der Funktionen ................................................................................. 415

D Lösungen der Übungsaufgaben ............................................................................. 423

D.1 Datei »u_name.c« (Abschnitt 2.6) ........................................................... 423

D.2 Datei »u_daten.c« (Abschnitt 3.7) ........................................................... 423

D.3 Datei »u_fall.c« (Abschnitt 4.5) ................................................................ 424

D.4 Datei »u_schleife_for.c« (Abschnitt 5.5) ................................................. 425

D.5 Datei »u_schleife_do.c« (Abschnitt 5.6) ................................................. 426

D.6 Datei »u_funktion.c« (Abschnitt 6.5) ...................................................... 427

D.7 Datei »u_feld.c« (Abschnitt 7.4) .............................................................. 428

D.8 Datei »u_text.c« (Abschnitt 8.6) .............................................................. 429

D.9 Datei »u_zeiger.c« (Abschnitt 9.4) .......................................................... 430

D.10 Datei »u_struktur.c« (Abschnitt 10.7) ..................................................... 432

D.11 Datei »u_datei.c« (Abschnitt 11.3) ........................................................... 433

D.12 Datei »u_fall_mehrere.c« (Abschnitt 12.2.3) .......................................... 434

Index .......................................................................................................................................... 435

Index

435

Index

- (Vorzeichen) .............................................................. 120

! ........................................................................................... 45

!=......................................................................................... 43

- ........................................................................................... 34

--.................................................................................. 72, 118

#define................................................................... 117, 248

#elif ................................................................................. 251

#else................................................................................ 251

#endif............................................................................. 251

#if..................................................................................... 251

#ifdef .............................................................................. 251

#ifndef ........................................................................... 251

#include .................................................................. 21, 247

$?....................................................................................... 285

% (Modulo) ................................................................... 116

% (SQL) .......................................................................... 298

%=..................................................................................... 120

%[^\n]............................................................................. 176

%c ....................................................................................... 77

%d ................................................................................ 31–32

%e...................................................................................... 112

%errorlevel% ............................................................... 285

%f......................................................................................... 31

%hd................................................................................... 111

%hu................................................................................... 111

%i......................................................................................... 31

%ld .................................................................................... 111

%Le .................................................................................. 391

%Lf ................................................................................... 391

%lf ...................................................................................... 32

%lld......................................................................... 258, 391

%llu.................................................................................. 391

%lu .................................................................................... 111

%o ..................................................................................... 111

%p ............................................................................ 166, 191

%s ....................................................................................... 77

%u ..................................................................................... 111

%X ..................................................................................... 111

%x ..................................................................................... 111

& ....................................................................... 32, 239, 242

&&...................................................................................... 45

* ........................................................................................... 34

* (Zeiger)........................................................................... 84

** (Zeiger auf Zeiger) ................................................. 222

*= ...................................................................................... 120

+ .......................................................................................... 34

++................................................................................ 72, 118

+=...................................................................................... 120

, (Komma-Operator) ................................................. 134

. (Punkt-Operator) ....................................................... 91

. (Verzeichnis)............................................ 262, 265, 412

.. (Verzeichnis)........................................... 262, 265, 412

.c ......................................................................................... 22

.cpp .................................................................................... 22

/........................................................................................... 34

/* */ .................................................................................... 26

//......................................................................................... 26

/= ...................................................................................... 120

: (Bitfeld)........................................................................ 245

< .......................................................................................... 42

< (SQL) ............................................................................ 297

< (umlenken) ............................................................. 200

<<..................................................................................... 240

<=........................................................................................ 43

<= (SQL).......................................................................... 297

<> (SQL).......................................................................... 297

-=....................................................................................... 120

= ................................................................................... 30, 44

= (SQL) ............................................................................ 297

==........................................................................................ 43

->......................................................................................... 98

> .......................................................................................... 42

> (SQL) ............................................................................ 297

> (umlenken) ............................................................. 200

>=........................................................................................ 43

>= (SQL).......................................................................... 297

>>............................................................................ 240, 243

?......................................................................................... 126

(Ohm)......................................................................... 367

[ ]......................................................................................... 70

\.......................................................................................... 20

\0........................................................................................ 76

\n.................................................................................. 21, 27

^ ....................................................................................... 240

_ (SQL) ........................................................................... 298

__DATE__ ................................................................... 250

Index

436

__FILE__ ...................................................................... 250

__LINE__ ..................................................................... 250

__TIME__ .................................................................... 250

__unix............................................................................ 253

_Generic ........................................................................ 395

_WIN32........................................................................... 253

{ }........................................................................................ 20

| ........................................................................................ 239

|| .......................................................................................... 45

~ ....................................................................................... 240

A

A (Ampere) ................................................................... 367

a (Öffnungsmodus)................................................... 198

abs() ................................................................................. 232

Addition .......................................................................... 34

Adresse............................................................................. 83

Adressoperator ............................................................. 32

Aktueller Parameter ................................................... 65

Ampere .......................................................................... 367

AND ................................................................................. 297

Anführungsstriche

doppelte ............................................................... 20, 27

Anode ............................................................................. 374

Anweisung....................................................................... 21

Anweisungsblock................................ 21, 41, 52, 54, 56

append ........................................................................... 198

Arkuskosinus............................................................... 227

Arkussinus.................................................................... 227

Arkustangens .............................................................. 227

Array ................................................................................ 69

ASC.................................................................................. 303

ASCII-Code............................................................. 167, 171

asctime()....................................................................... 270

atof()................................................................................ 178

atoi() ................................................................................ 178

Aufzählung................................................................... 195

Ausgabe .......................................................................... 20

formatierte .................................................... 32, 57, 81

langer Text................................................................. 27

Zahl ................................................................................ 31

Zeichenkette .............................................................. 77

Auswertungsrichtung.............................................. 122

auto_increment ........................................................ 290

B

Backslash........................................................................ 20

doppelter .................................................................. 262

Bauteil

elektronisches......................................................... 368

Bedingung ........................................................ 41, 54, 124

mehrere....................................................................... 45

Nebenwirkung........................................................ 130

Benutzerdefinierter Datentyp................................ 89

Benutzername pi ....................................................... 365

Betrag ............................................................................. 232

Betriebssystem

Datenaustausch .................................................... 281

Kommando ............................................................. 286

Bibliothek ........................................................................ 21

Binär ............................................................................... 124

Binäre Suche....................................................... 162, 164

Bit..................................................................................... 237

prüfen ........................................................................ 239

schieben .......................................................... 240, 243

setzen........................................................................ 240

Bitfeld............................................................................. 243

Bit-Operator................................................................. 237

Bitweise Inversion.................................................... 240

Bitweises Exklusiv-Oder ........................................ 240

Bitweises Oder ............................................................ 239

Bitweises Und..................................................... 239, 242

Block ........................................................ 21, 41, 52, 54, 56

Bogenmaß ........................................................... 227, 234

bool ................................................................................. 393

Breadboard.................................................................. 369

break ....................................................................... 130, 135

bsearch()........................................................................ 164

Bubble Sort................................................................... 159

Byte ................................................................................. 237

C

C (Taster) ....................................................................... 379

C++..................................................................................... 22

C11

Entwicklungsumgebung .................................... 394

Überladen ................................................................ 393

C90 ................................................................................. 389

C95 .................................................................................. 389

Index

437

C99............................................................................ 26, 232

boolesche Variable ............................................... 393

Datentyp.................................................................. 389

Deklaration ............................................................. 391

Programm übersetzen ........................................ 391

cabs() ............................................................................... 234

Callback-Funktion ............................................ 348, 351

call-by-reference ........................................... 86, 97, 121

call-by-value............................................................ 86, 97

camelCase ........................................................................ 31

carg() ............................................................................... 234

case .................................................................................. 128

Case Sensitivity ........................................................... 20

Cast-Operator..................................................... 113, 230

cd................................................................................ 25, 413

ceil() ................................................................................ 230

cexp() ............................................................................. 236

char.................................................................... 75, 111, 166

CHAR_MAX.................................................................. 110

CHAR_MIN ................................................................... 110

chdir() ............................................................................. 267

chmod ............................................................................ 261

chmod() ......................................................................... 258

cimag() ........................................................................... 234

clock() ............................................................................. 274

CLOCKS_PER_SEC...................................................... 274

clog() .............................................................................. 236

closedir()........................................................................ 261

Code::Blocks............................................................... 406

Codeseite

umstellen.................................................................... 26

Compiler.................................................................... 16, 23

complex double ......................................................... 234

complex.h..................................................................... 233

conj() .............................................................................. 236

const ................................................................................ 115

continue ........................................................................ 135

cos() ................................................................................. 227

cp...................................................................................... 414

cpow() ............................................................................ 236

creal() .............................................................................. 234

CREATE TABLE............................................................ 290

csqrt()............................................................................. 236

C-Standard................................................................... 389

CSV-Datei

lesen .......................................................................... 203

schreiben ................................................................ 200

ctime() .................................................................. 256, 270

D

Datei

anhängen an .......................................................... 198

anlegen ..................................................................... 413

CSV................................................................... 200, 203

Eigenschaften ......................................................... 255

einbinden ................................................................. 247

erzeugen ...................................................................... 19

feste Datensatzlänge....................... 205, 207, 209

Größe ................................................................ 256, 258

kopieren .................................................................... 414

lesen .................................................................. 105, 198

löschen ............................................................. 266, 414

Modus........................................................................ 256

neu erzeugen ............................................................. 19

öffnen ................................................................. 22, 102

Position ..................................................................... 101

schließen............................................................ 22, 103

schreiben ......................................................... 103, 198

sequentielle ............................................................. 101

speichern ..................................................................... 21

umbenennen.................................................. 266, 414

Umlenkung.............................................................. 199

unbekannte Menge lesen................................... 197

verschieben.............................................................. 414

versteckte ................................................................. 413

Zugriff bei OS X ...................................................... 104

Zugriff prüfen ......................................................... 103

Zugriffsrechte ................................................ 256, 258

Zugriffsrechte ändern ............................... 259–260

Zugriffszeitpunkt ......................................... 256, 258

Dateiliste

anzeigen ..................................................................... 25

Dateizeiger ................................................................... 101

Position .................................................................... 207

setzen........................................................................ 207

Daten

austauschen.................................................... 101, 201

speichern .................................................................... 29

Datenbank.................................................................... 287

betroffene Datensätze ........................................ 305

Datensatz................................................................. 287

Datensatz ändern ................................................ 304

Datensatz ausgeben ............................................ 294

Datensatz erzeugen ............................................. 291

Datensatz löschen ................................................ 305

Datensatz sortieren ............................................ 302

Index

438

Datensätze, betroffene ...................................... 305

erzeugen .................................................................. 289

Feld ............................................................................. 287

Feld auswählen ...................................................... 297

Inhalt auswählen .................................................. 293

Primärschlüssel .................................................... 290

Struktur .................................................................... 288

Tabelle ....................................................................... 287

Tabelle erzeugen .................................................. 289

Verbindung öffnen .............................................. 290

Verbindung schließen ......................................... 291

Verbindungszeiger .............................................. 290

Datenfeld ....................................................................... 69

Datensatzlänge

Unix ........................................................................... 207

Windows .................................................................. 207

Datentyp ......................................................................... 29

benutzerdefinierter ................................................ 89

definieren .......................................................... 89, 193

explizit umwandeln .............................................. 113

Genauigkeit ............................................................... 111

Glib ............................................................................. 337

Speicherbedarf ...................................................... 109

Umwandlung..................................................... 35–36

Umwandlung, explizite ....................................... 113

Wertebereich .......................................................... 109

Datum ........................................................................... 269

Debian............................................................................ 361

Debugger......................................................................... 16

Debugging ...................................................................... 37

anhalten ..................................................................... 38

Watch hinzufügen .................................................. 39

default ............................................................................ 130

Definition .................................................................... 248

prüfen ......................................................................... 251

Deklaration ..................................................................... 31

im Block .................................................................... 392

mehrere ....................................................................... 35

mittendrin................................................................ 392

Variable ..................................................................... 30

Dekrementoperator .................................................. 118

delay()............................................................................. 375

DELETE .......................................................................... 305

Dereferenzierungsoperator..................................... 84

DESC............................................................................... 303

Dev-C++ ............................................................ 16, 19, 397

Projekt anlegen ..................................................... 399

Dezimalkomma............................................. 32–33, 201

Dezimalpunkt ................................................ 32–33, 201

Dezimalsystem.......................................................... 109

Dezimalzahl zu Dualzahl........................................ 241

digitalRead()................................................................ 380

digitalWrite() ............................................................... 375

DIR ................................................................................... 261

dir....................................................................................... 25

Division ........................................................................... 34

ganze Zahlen .................................................... 36, 113

Rest .............................................................................. 116

do while ........................................................................... 52

double ........................................................................ 31–32

Dualzahl ........................................................................ 239

zu Dezimalzahl ...................................................... 241

Dynamisches Feld ...................................................... 215

E

e (Eulersche Zahl)....................................................... 232

echo................................................................................. 285

Editor.......................................................................... 16, 19

Raspberry Pi ........................................................... 366

Eingabe

falsche ......................................................................... 33

formatierte ...................................................... 107, 175

mehrere Daten ....................................................... 107

Prüfung ....................................................................... 52

Zahl............................................................................... 32

Zeichenkette.............................................................. 78

Eingabepuffer........................................................ 78, 175

Einplatinencomputer .............................................. 361

Einrückung.............................................................. 20, 42

Einzelschritt................................................................... 38

Elektronische Schaltung................................ 361, 367

Elektronisches Bauteil ............................................ 368

Elektrostatik ............................................................... 364

Element .......................................................................... 69

else..................................................................................... 44

Ende-Zeichen 0............................................. 76, 167, 171

Endlosschleife ...................................................... 135, 137

Entwicklungsumgebung .......................................... 16

enum .............................................................................. 195

Enumeration ...................................................... 195, 245

EOF ................................................................................... 175

Ereignis ......................................................................... 348

Index

439

errorlevel....................................................................... 285

Eulersche Zahl e.......................................................... 232

Exklusiv-Oder

bitweises .................................................................. 240

exp() ................................................................................ 232

Exponentialfunktion ............................................... 232

Exponentialzahl .......................................................... 112

F

f (float) ............................................................................. 112

fabs() ............................................................................... 232

Farbcode

Widerstand ............................................................. 369

fclose() ............................................................................ 103

Fehlermeldung ............................................................. 23

Fehlersuche....................................................... 23, 27, 37

Feld ........................................................................... 69, 149

Adresse ........................................................................ 87

an Funktion ............................................................... 87

dynamisches ............................................................ 215

Element ....................................................................... 69

Element einfügen .................................................. 154

Element löschen .................................................... 154

GArray ....................................................................... 341

Größe ........................................................................... 70

Größe ermitteln ...................................................... 152

größter Wert............................................................. 153

Initialisierung ............................................ 72, 98, 157

kleinster Wert .......................................................... 153

kopieren ..................................................................... 155

mehrdimensional ................................................. 156

mit 0 füllen ................................................................ 72

Operationen ............................................................ 150

sortieren.................................................................... 158

Speicher anfordern ....................................... 217–218

Speicher freigeben ................................................ 218

Strukturvariable ...................................................... 94

umdrehen.................................................................. 155

variable Größe ....................................................... 392

von Zeichenketten .................................................. 79

von Zeigern.............................................................. 222

Wert suchen............................................................. 162

zweidimensionales ................................................. 79

zweidimensionales dynamisches .................. 220

Festplatte .............................................................. 101, 197

fflush()............................................................................. 177

fgets()............................................................................... 177

FILE * ............................................................................... 102

float ................................................................................... 111

float.h .............................................................................. 112

floor()............................................................................. 230

fmax() ............................................................................. 231

fmin().............................................................................. 231

fmod()............................................................................ 230

fopen()............................................................................ 102

Formaler Parameter ................................................... 65

Formatierung.................................. 32, 57, 81, 178, 270

for-Schleife ..................................................................... 50

Varianten .................................................................. 132

fprintf() ................................................................. 103, 198

free()................................................................................ 218

fscanf() .................................................................. 105, 198

fseek() ............................................................................ 207

ftell()............................................................................... 207

Führende Null ............................................................... 58

Funktion............................................................ 21, 61, 139

Adresse ...................................................................... 146

Adresse übergeben ................................................. 86

aufrufen ...................................................................... 63

Datentyp .................................................................... 66

definieren .................................................................... 61

Deklaration ............................................................. 140

mathematische...................................................... 227

Name ........................................................................... 62

Parameter .................................................................. 64

Parameter »const« ................................................ 115

Parameter beliebig ............................................... 148

rekursive ........................................................... 145, 263

vordefinierte .............................................................. 61

Werte übergeben ..................................................... 64

Zeiger ......................................................................... 146

zum Vergleichen .................................................... 161

Fußgesteuert ................................................................. 52

G

g_array_append_val() ............................................. 345

g_array_free().............................................................. 343

g_array_index().......................................................... 344

g_array_insert_val() ................................................ 346

Index

440

g_array_new() ............................................................. 343

g_array_prepend_val()............................................ 345

g_array_remove_index() ...................................... 346

g_object_get() ............................................................ 350

g_object_new() .......................................................... 348

g_object_set() ............................................................. 350

g_print()......................................................................... 338

g_signal_connect()........................................... 348, 352

g_string_append().................................................... 340

g_string_assign() ...................................................... 340

g_string_insert() ....................................................... 340

g_string_new()........................................................... 340

g_string_prepend() .................................................. 340

Ganze Zahl ...................................................................... 29

Ganzzahldivision................................................. 36, 113

GArray ............................................................................ 341

Element einfügen ................................................. 346

Element löschen ................................................... 346

Elementzugriff........................................................ 344

erweitern .................................................................. 345

erzeugen ................................................................... 343

freigeben................................................................... 343

gboolean........................................................................ 338

gchar ............................................................................... 338

gdouble .......................................................................... 338

gedit ............................................................................... 405

General Purpose Input Output � GPIO

getchar().......................................................................... 175

getcwd() ......................................................................... 267

gettimeofday() ............................................................ 274

GID................................................................................... 258

GIMP Toolkit................................................................ 337

gint .................................................................................. 338

Gleich................................................................................ 43

Glib .................................................................................. 337

Datentyp................................................................... 337

Globale Variable .......................................................... 141

gmtime()....................................................................... 270

GNU C-Compiler ....................................... 16, 405, 409

GPIO .............................................................. 363, 368, 371

Ausgang.................................................................... 375

Ein- und Ausgang.................................................. 372

Eingang ..................................................................... 378

GND ............................................................................ 372

Pin 1 ............................................................................. 371

Spannungsversorgung........................................ 372

gpointer ......................................................................... 338

Grafische Benutzeroberfläche � GUI

Großbuchstaben......................................................... 20

Größer als ....................................................................... 42

Größer als oder gleich................................................ 43

Gruppen-ID .................................................................. 258

GString........................................................................... 339

einfügen................................................................... 340

erweitern ................................................................. 340

erzeugen .................................................................. 340

zuweisen .................................................................. 340

GTK+ ............................................................................... 337

Installation......................................... 404, 407, 409

Programm erzeugen......................... 339, 405, 407

gtk_container_add()................................................ 349

gtk_init() ...................................................................... 348

gtk_layout_put()........................................................ 354

gtk_main() ................................................................... 349

gtk_main_quit() ........................................................ 349

gtk_widget_show_all() ........................................... 349

GtkButton..................................................................... 352

GtkCheckButton ........................................................ 354

GtkEntry........................................................................ 354

GtkLabel ....................................................................... 348

GtkLayout ..................................................................... 354

GtkRadioButton ......................................................... 354

GtkWindow ................................................................. 348

GUI................................................................................... 347

beenden ........................................................... 347, 349

Button ....................................................................... 352

Eingabefeld.............................................................. 354

Endlosschleife ......................................................... 349

Ereignis »changed« .............................................. 357

Ereignis »clicked« ................................ 352, 355, 357

Fenster ....................................................................... 348

Kontrollkästchen .................................................. 354

Layout ....................................................................... 352

Radio-Button .......................................................... 354

Radio-Button-Gruppe ......................................... 356

Textausgabe ........................................................... 348

Gültigkeitsbereich...................................................... 141

H

Halbleiter ...................................................................... 373

Hallo Welt ....................................................................... 19

Haltepunkt ..................................................................... 37

Hardware-Ebene ........................................................ 237

HDMI .............................................................................. 363

Index

441

Header-Datei .................................................................. 21

Hexadezimalsystem................................................ 109

HIGH .............................................................................. 368

hoch ................................................................................ 232

I

I (Strom)......................................................................... 367I2C .................................................................................... 373

id....................................................................................... 258

IDE...................................................................................... 16if.......................................................................................... 41

Index................................................................................ 69

Indirektionsoperator ................................................. 84Inhaltsoperator *........................................... 84, 98, 121

Initialisierung................................................................. 31

Inkrementoperator.................................................... 118INSERT INTO ............................................................... 292

Installation

für OS X .................................................................... 407für Ubuntu Linux ................................................. 405

für Windows ............................................................ 397

int.......................................................................... 29, 31–32INT_MAX....................................................................... 110

INT_MIN........................................................................ 110

Inter-Integrated Circuit � I2CInversion

bitweise .................................................................... 240

K

Kathode ......................................................................... 374

Klammer

eckige ........................................................................... 70

geschweifte ......................................................... 20–21

Vorrang....................................................................... 34

Kleinbuchstaben......................................................... 20

Kleiner als ....................................................................... 42

Kleiner als oder gleich ............................................... 43

Kommandozeile.......................................................... 411

Parameter ................................................................ 281

Rückgabewert......................................................... 283

Kommandozeilenmodus ......................................... 25

Komma-Operator ...................................................... 134

Kommentar ................................................................... 26

einzeiliger................................................................... 26

mehrzeiliger .............................................................. 26

kompilieren ................................................................... 23Komplexe Zahl ........................................................... 233

Betrag ........................................................................ 234Exponentialfunktion ........................................... 236hoch............................................................................ 236Imaginärteil ............................................................ 234konjugierte komplexe ......................................... 236Logarithmus ........................................................... 236Realteil ...................................................................... 234Rechenoperationen.............................................. 234Winkel........................................................................ 234Wurzel ....................................................................... 236

Komponente ................................................................ 90Zeiger -> ...................................................................... 98

Konsolenfenster .......................................................... 24Konstante ..................................................... 115, 117, 248

mehrere..................................................................... 195vordefinierte ........................................................... 253

Kopfgesteuert ............................................................... 54Kopfrechnen................................................................. 315Kosinus.......................................................................... 227Kosinus Hyperbolicus ............................................. 227Kreiszahl Pi................................................................... 227

L

LAN-Kabel..................................................................... 363Laufbedingung .............................................................. 51Laufzeitfehler ................................................................ 34Leafpad ......................................................................... 366LED .................................................................................. 373

anschließen ............................................................. 374blinken ...................................................................... 375ein- und ausschalten ........................................... 374Vorwiderstand ....................................................... 374

Leuchtdiode � LEDLibreOffice Calc .......................................................... 201Light Emitting Diode � LEDLIKE (SQL)..................................................................... 298limits.h.......................................................................... 109Lineare Suche ..................................................... 162–163-lm.................................................................................... 229localtime() ................................................................... 270log() ................................................................................. 232log10()............................................................................. 232Logarithmus ................................................................ 232Logischer Operator ..................................................... 45Logisches Nicht ............................................................ 45

Index

442

Logisches Oder.............................................................. 45

Nebenwirkung ........................................................ 130

Logisches Und............................................................... 45

Nebenwirkung ........................................................ 130

Lokale Variable ..................................................... 65, 141

long................................................................................... 111

long double .................................................................. 391

long long .............................................................. 258, 391

LONG_MAX.................................................................. 110

LONG_MIN................................................................... 110

LOW................................................................................ 368

ls -al ................................................................................. 413

ls -l........................................................................... 258, 412

LXTerminal.................................................................. 366

M

M_E.................................................................................. 232

M_PI....................................................................... 227, 232

main() ......................................................................... 21, 61

Parameter ................................................................ 281

Rückgabewert......................................................... 283

Makro ............................................................................ 248

vordefiniertes ........................................................ 250

malloc() .......................................................................... 217

Mastermind ................................................................ 330

math.h............................................................................ 227

Mathematik ................................................................. 227

Maximum..................................................................... 231

Midori............................................................................ 366

MinGW.......................................................................... 399

Minimum...................................................................... 231

mkdir .............................................................................. 413

mkdir() ........................................................................... 267

mktime()........................................................................ 273

modf()............................................................................ 230

Modularisierung .................................................. 61, 142

Modulo-Operator ............................................. 116, 230

Monitor......................................................................... 363

Morse-Code......................................................... 323, 376

MS Excel ........................................................................ 201

Multiplikation............................................................... 34

mv.................................................................................... 414

N

Name

aussagekräftiger ...................................................... 31

Regeln .......................................................................... 30

NC (Taster) .................................................................... 379

New Line........................................................................... 21

New Out Of Box Software � NOOBS

Nicht

logisches ..................................................................... 45

NO (Taster) ................................................................... 379

NOOBS .......................................................................... 364

NOT ................................................................................. 297

NULL ............................................................................... 103

Null

führende ..................................................................... 58

O

Oder

bitweises ................................................................... 239

logisches ..................................................................... 45

Öffnungsmodus............................. 103, 105, 198, 209

Ohm ................................................................................ 367

Ohmsches Gesetz ...................................................... 367

Oktalsystem................................................................ 109

opendir() ....................................................................... 261

Operator

Auswertungsrichtung .......................................... 122

Bit- .............................................................................. 237

logischer ..................................................................... 45

Priorität ..................................................................... 122

Rechen- ....................................................................... 34

Vergleichs- .................................................................. 41

Verknüpfungs- ......................................................... 45

Vorrang........................................................ 34, 46, 122

OR .................................................................................... 297

ORDER BY .................................................................... 302

OS X

Dateizugriff ............................................................. 104

P

Parameter ....................................................................... 64

aktueller...................................................................... 65

formaler...................................................................... 65

Index

443

Pelles C ................................................................. 394, 403

Peripherie .................................................................... 362

Pfad ändern................................................................ 400

Pi....................................................................................... 227

pi (Benutzername) .................................................... 365

Pi Store.......................................................................... 366

pinMode() ..................................................................... 375

Platzhalter ....................................................... 31–32, 109

Pointer ............................................................................. 83

Postfix-Notation ........................................................ 120

pow() ............................................................................... 232

Präfix-Notation .......................................................... 120

Präprozessor........................................................ 117, 247

PRIMARY KEY ............................................................. 290

printf() ............................................................................. 20

Priorität ......................................................................... 122

Programm

ausführen ............................................................ 24–25

binden....................................................................... 402

Code eingeben .......................................................... 19

Entwicklung .............................................................. 36

kopieren ...................................................................... 26

Lesbarkeit ............................................................ 20, 42

Startpunkt................................................................... 21

Teil wiederholen ...................................................... 49

übersetzen.................................................................. 23

übersetzen und ausführen .................................. 24

zerlegen....................................................................... 61

Punktoperator . ............................................................ 91

Q

qsort() ............................................................................ 160

Quadratwurzel ............................................................ 232

Quick Sort .................................................................... 160

R

r (Öffnungsmodus) ................................................... 105

R (Widerstand) ............................................................ 367

r+ (Öffnungsmodus)................................................ 209

rand() .............................................................................. 116

RAND_MAX ................................................................. 116

Raspberry Pi................................................................. 361

Benutzeroberfläche .............................................. 365

Browser .................................................................... 366

Raspberry Pi (Forts)

CPU-Informationen .............................................. 371

Ein-Aus-Schalter .................................................... 365

Festplatte ................................................................. 362

Gehäuse .................................................................... 363

Haftung .................................................................... 364

herunterfahren ...................................................... 365

Maus .......................................................................... 363

Modell........................................................................ 362

Neustart.................................................................... 365

Revision .................................................................... 362

Schäden .................................................................... 364

Sicherheit ................................................................. 364

Tastatur .................................................................... 363

Update...................................................................... 366

WLAN ........................................................................ 366

raspberrypi.org........................................................... 361

Raspbian........................................................................ 361

installieren............................................................... 365

read ................................................................................. 105

readdir()......................................................................... 261

realloc() .......................................................................... 218

reboot............................................................................. 365

Rechenoperator............................................................ 34

Rechte

Unix .................................................................... 365, 412

Rekursion............................................................. 145, 263

remove() ....................................................................... 266

rename()....................................................................... 266

return ....................................................................... 21, 103

rewinddir() ................................................................... 261

rm .................................................................................... 414

rmdir............................................................................... 413

rmdir()............................................................................ 267

round() .......................................................................... 230

Rückgabewert............................................................... 66

rwx................................................................................... 412

S

scanf() ............................................................................... 32

formatiert ................................................................ 107

mehrere Daten ....................................................... 107

Schaltjahr...................................................................... 274

Schaltung

elektronische ................................................. 361, 367

scharfes s.................................................................. 26, 30

Index

444

Schleife..................................................................... 49, 131

abbrechen .......................................................... 49, 135

abwärts ...................................................................... 132

Anzahl bekannt ....................................................... 50

bedingungsgesteuert ................................ 49, 52, 54

Endlos- ................................................................ 135, 137

fortsetzen .................................................................. 135

fußgesteuerte............................................................ 52

kopfgesteuerte ......................................................... 54

läuft nie..................................................................... 134

mehrfache ................................................................. 137

mehrfache, abbrechen ........................................ 138

regelmäßige .............................................................. 49

Zahl mit Nachkommastellen............................. 133

Schleifenvariable .......................................................... 51

doppelte .................................................................... 134

Schlüsselwörter ........................................................... 30

Schnittstelle

seriell .......................................................................... 373

Scope................................................................................ 141

SD-Karte........................................................................ 362

formatieren ............................................................ 364

SEEK_CUR .................................................................... 209

SEEK_END.................................................................... 209

SEEK_SET...................................................................... 209

Semikolon........................................................................ 21

Sequentielle Datei ..................................................... 101

Serial Peripheral Interface � SPI

Serielle Schnittstelle ................................................. 373

short................................................................................. 111

SHRT_MAX................................................................... 110

SHRT_MIN .................................................................... 110

shutdown...................................................................... 365

sin().................................................................................. 227

Sinus ............................................................................... 227

Sinus Hyperbolicus................................................... 227

sizeof...................................................................... 109, 152

Sleep() ............................................................................. 277

sleep() ............................................................................. 277

Sommerzeit ................................................................. 272

Sortieralgorithmus ................................................... 158

Spannung...................................................................... 367

Spannungsquelle ....................................................... 367

Spannungsversorgung ........................................... 368

Speicheradresse............................................................ 83

Speicherbedarf........................................................... 109

Speicherung

dauerhafte ....................................................... 101, 197

Speicherzuteilung ...................................................... 217

SPI .................................................................................... 373

Spiel

Lernen....................................................................... 309

Reaktionsfähigkeit ............................................... 382

sprintf().......................................................................... 178

SQL.................................................................................. 288

Befehl ausführen ................................................... 291

logischer Operator ............................................... 297

Vergleichsoperator............................................... 297

SQLite ............................................................................ 288

Ausgabefunktion .................................................. 294

Datentyp ................................................................. 290

Installation......................................... 404, 406, 409

Programm erzeugen................................. 404, 406

Programm übersetzen ........................................ 291

sqlite3 (Struktur) ....................................................... 290

sqlite3_changes() ...................................................... 305

sqlite3_close() ............................................................. 291

sqlite3_exec() .............................................................. 291

sqlite3_open() ............................................................ 290

sqrt()................................................................................ 232

srand() ............................................................................. 116

st_atime ........................................................................ 256

st_mode ........................................................................ 256

st_size............................................................................. 256

Startanweisung ............................................................. 51

startx .............................................................................. 365

Startzuweisung

doppelte .................................................................... 134

stat (Struktur).............................................................. 255

stat() ................................................................................ 255

static ............................................................................... 144

Statische Variable ...................................................... 144

-std=c11.......................................................................... 389

-std=c99........................................................................ 389

stdarg.h.......................................................................... 148

stdio.h ............................................................................... 21

stdlib.h ........................................... 116, 158, 162, 178, 217

Steckbrett..................................................................... 369

Steckbrücke................................................................. 369

Steckernetzteil ............................................................ 362

Steuerelement ............................................................ 347

strcat() ............................................................................ 170

strcmp() .......................................................................... 171

strcpy() ............................................................................. 76

strftime() ...................................................................... 270

Index

445

String ................................................................................ 75

string.h.................................................................... 75, 169

strlen() ............................................................................ 170

Strom.............................................................................. 367

Stromfluss

Richtung ................................................................... 367

Stromkreis .................................................................... 367

schließen................................................................... 378

strstr() ............................................................................. 170

strtok()............................................................................ 172

struct....................................................................... 90, 193

struct dirent................................................................. 261

Struktur .................................................................. 89, 192

Definition ................................................................... 89

Feld ............................................................................... 94

in Struktur................................................................ 193

Initialisierung ................................................... 91, 195

Variable ..................................................................... 90

Zeiger ........................................................................... 96

Subtraktion .................................................................... 34

Suchalgorithmus ....................................................... 162

Suche

binäre......................................................................... 162

lineare........................................................................ 162

sudo................................................................................. 365

Summe

berechnen.................................................................... 51

switch case.................................................................... 128

Syntaxfehler ........................................................... 23, 34

system() ........................................................................ 286

Systemweiche ............................................................. 252

T

Tabelle

Ausgabe ...................................................................... 57

tan() ................................................................................. 227

Tangens ......................................................................... 227

Tangens Hyperbolicus............................................. 227

Taste

F5 ................................................................................... 38

F6 ................................................................................... 38

F7 ................................................................................... 38

F9 ................................................................................... 23

F10 ................................................................................. 24

F11 .................................................................................. 24

Tastenkombination

Alt+F4 ........................................................................ 347

AltGr+ .......................................................................... 20

AltGr+{......................................................................... 20

AltGr+}......................................................................... 20

Cmd+. .................................................................. 49, 135

Strg+C .................................................................. 49, 135

Strg+N........................................................................... 19

Strg+O ......................................................................... 22

Strg+S............................................................................ 21

Strg+W......................................................................... 22

Win+E ......................................................................... 411

Win+I .......................................................................... 411

Win+R ................................................................... 25, 411

Win+X ......................................................................... 411

Taster.............................................................................. 378

prüfen ........................................................................ 378

Temperaturkoeffizient

Widerstand ............................................................... 371

Terminal........................................................................ 412

Raspberry Pi ........................................................... 366

Ternär..................................................................... 124, 126

Text ........................................................................... 75, 166

TextWrangler ............................................................. 409

time() ............................................................................. 270

time_t............................................................................ 270

timeval........................................................................... 276

timezone....................................................................... 276

tm.................................................................................... 270

touch.............................................................................. 366

Trigonometrie ............................................................ 227

typedef........................................................................... 193

Typloser Zeiger ............................................................ 114

U

U (Spannung) .............................................................. 367

UART............................................................................... 373

UCHAR_MAX .............................................................. 110

Uhrzeit .......................................................................... 269

UID .................................................................................. 258

UINT_MAX ................................................................... 110

ULONG_MAX .............................................................. 110

Umlaut...................................................................... 26, 30

Unär ....................................................................... 120, 124

Index

446

Und

bitweises .......................................................... 239, 242

logisches ..................................................................... 45

Ungleich .......................................................................... 43

Universal Asynchronous Receiver

Transmitter � UART

Unix

Befehle ........................................................................ 411

neuer Zeitstempel ................................................ 366

unsigned ........................................................................ 111

unsigned char .............................................................. 111

unsigned int.................................................................. 111

unsigned long .............................................................. 111

unsigned long long ................................................... 391

unsigned short............................................................. 111

UPDATE ........................................................................ 304

update ........................................................................... 366

USB ................................................................................. 363

User-ID ........................................................................... 258

USHRT_MAX ............................................................... 110

UTC ................................................................................. 269

V

V (Volt) ........................................................................... 367

va_arg() .......................................................................... 148

va_end()......................................................................... 148

va_list ............................................................................. 148

va_start() ....................................................................... 148

Variable............................................................................ 29

deklarieren................................................................ 30

globale........................................................................ 141

Gültigkeitsbereich.................................................. 141

Initialisierung ......................................................... 144

kontrollieren ............................................................. 37

Lebensdauer ............................................................ 144

lokale ................................................................... 65, 141

Name........................................................................... 30

sicher einlesen ........................................................ 179

Startwert.................................................................... 30

statische.................................................................... 144

tauschen ................................................................... 120

Vergleichsfunktion ................................................... 161

Vergleichsoperator ..................................................... 41

Verzeichnis

aktuelles ................................................................... 412

anlegen ..................................................................... 413

Eigenschaft .............................................................. 255

ermitteln................................................................... 267

erzeugen ................................................................... 267

Hierarchie ................................................................ 412

Inhalt ......................................................................... 412

Inhalt auflisten ...................................................... 261

löschen .............................................................. 267, 413

übergeordnet .......................................................... 412

verstecktes ............................................................... 413

wechseln .................................................... 25, 267, 413

Verzeichnisbaum

Inhalt auflisten ...................................................... 263

Verzweigung.......................................................... 41, 124

Fälle zusammenfassen ....................................... 128

mehrfache ................................................................. 127

Präprozessor- ........................................................ 250

void ................................................................................... 62

void *................................................................................ 114

Volt .................................................................................. 367

Vorrang.......................................................................... 122

Vorzeichenlos ............................................................... 111

Vorzeichen-Operator ............................................... 120

W

w (Öffnungsmodus).................................................. 103

Wahrheitswert ...................................................... 41, 124

umdrehen................................................................... 45

Wertebereich.............................................................. 109

while ................................................................................. 54

Whitespace-Zeichen ................................................ 108

Widerstand......................................................... 367, 369

Farbcode .................................................................. 369

Temperaturkoeffizient......................................... 371

Widget............................................................................ 347

anzeigen ................................................................... 349

Container ................................................................. 349

Eigenschaft abrufen............................................. 350

Eigenschaft setzen ................................................ 350

erzeugen ................................................................... 348

mit Ereignis verbinden................................ 348, 351

positionieren........................................................... 352

Index

447

Winkelfunktion .......................................................... 227

wiringPi ......................................................................... 373

Programm erzeugen ............................................ 373

wiringPiSetup()........................................................... 375

WLAN............................................................................. 363

konfigurieren ......................................................... 366

Wochentag ................................................................... 272

WPA-TKIP..................................................................... 366

write ................................................................................ 103

Würfel.............................................................................. 118

Wurzel ............................................................................ 232

X

Xcode

Installation ............................................................. 407

Z

Zahl

ganze............................................................................ 29

mit Nachkommastellen........................................ 29

runden ....................................................................... 229

umwandeln ............................................................. 229

vorzeichenlose.......................................................... 111

Zeichen ................................................................... 75, 166

Code............................................................................ 167

vergleichen .............................................................. 169

Zeichenkette ......................................................... 75, 166

einfügen .................................................................... 187

Ende .............................................................................. 76

erweitern .................................................................. 170

GString ...................................................................... 339

kopieren ...................................................................... 76

Länge ......................................................................... 170

Operationen ............................................................. 181

rechtsbündige............................................................ 81

sicher einlesen ................................................ 174–175

suchen .............................................................. 170, 189

Teil austauschen ................................................... 188

Teil löschen...................................................... 185, 187

Teil speichern................................................. 184, 186

umwandeln .............................................................. 177

vergleichen ............................................................... 171

zerlegen...................................................................... 172

Zeiger....................................................................... 83, 190

auf Funktion ................................................... 146, 161

auf nichts ................................................................. 103

bei Funktionen ......................................................... 85

Datentyp .................................................................. 190

explizit umwandeln .............................................. 113

rechnen ..................................................................... 165

Strukturvariable ...................................................... 96

typloser ...................................................................... 114

Umwandlung, explizite ....................................... 113

Zeigerarithmetik............................................... 165, 190

Zeilenumbruch....................................................... 21, 27

Zeitangabe

erzeugen ................................................................... 273

formatierte ............................................................. 270

Komponenten ....................................................... 270

lokale ........................................................................ 270

Zeitspanne

addieren.................................................................... 274

messen ...................................................................... 274

pausieren.................................................................. 276

Zufallszahlengenerator ............................................ 116

Zuweisung ..................................................................... 30

bedingte .................................................................... 126

Fehlerquelle ............................................................... 44

kombinierte.............................................................. 118

mehrfache ................................................................ 120

Wahrheitswert ....................................................... 126

Thomas Theis

Einstieg in C447 Seiten, broschiert, mit CD, Juni 2014 24,90 Euro, ISBN 978-3-8362-2793-3

www.galileo-press.de/3557

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheberrecht-lich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Thomas Theis ist Diplom-Ingenieur für Technische Informatik und verfügt über langjährige Erfahrung als EDV-Dozent, unter anderem an der Fachhochschule Aachen. Er leitet Schulungen zu C/C++, Visual Basic und zur Webprogrammierung.

Wissen, wie’s geht.