Wissen, wie’s geht. 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. »Eine erste Einführung« »Unser erstes Programm« »Verschiedene Arten von Daten« »Verschiedene Fälle in einem Programm« Inhalt Index Der Autor Leseprobe weiterempfehlen 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 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? Die Programmiersprache C gibt es schon seit Anfang der 1970er Jahre. Dennoch ist diese Sprache nach wie vor aktuell, schnell und universell einsetzbar. 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. Universell 1.1 Welche Vorteile bietet C? Die Sprache C besitzt einen breiten Anwendungsbereich und erfreut sich großer Bekanntheit und Popularität. C-Programme sind zwischen den verschiedenen Rechnersystemen leicht portierbar. Sie benötigen weder eine spezielle Laufzeitumgebung noch einen Interpreter. Portierbar Sie können mit C schnelle, ressourcensparende Programme erstellen. Dies ist unter anderem dem direkten Zugriff auf den Speicherplatz und die Hardware zu verdanken. Schnell C 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 Element vieler Entwicklungsumgebungen dar. Einige davon werden auch in diesem Buch eingesetzt. GCC Durch seinen einfachen Aufbau und seine geringe Anzahl an Schlüsselwörtern ist C leicht erlernbar. Seine Effizienz hat C zur Basis vieler bekannter Sprachen gemacht. Einfach Sowohl zur Programmierung von Anwendungen für den Endbenutzer als auch zur Systemprogrammierung für Bestandteile und Erweiterungen von Betriebssystemen findet C seinen Einsatz. 15 1 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 Dev-C++ 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: Integrated Development Environment, zu Deutsch: Integrierte Entwicklungsumgebung), die all dies und vieles mehr bieten. Zusätzlich können Sie unter vielen Betriebssystemen mit dem GCC C-Compiler auf Kommandozeilenebene arbeiten. Dies vereinfacht teilweise die Nutzung externer Bibliotheken, die Ihnen weitere Funktionen bieten. 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 Betriebssystemen 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: Variablen, 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. 16 1.4 Eine erste Einführung Wie sollten Sie mit diesem Buch arbeiten? Anschließend sind wir in der Lage, die wichtigen Begriffe richtig einzuordnen. Kapitel 12 wird die Kenntnis der Programmierelemente vertiefen. Wir schauen auch einmal links und rechts: Welche Möglichkeiten bieten diese Elemente noch? Auf welche Weise können sie miteinander verbunden werden? Vertiefung Kapitel 13 bis 18 erläutern zahlreiche nützliche Funktionen, nach Themengebieten geordnet: dynamische Felder, Zahlen und Mathematik, Präprozessor, Dateien und Verzeichnisse, Datum und Zeit sowie die Kommunikation mit dem Betriebssystem. In Kapitel 19, 21 und 22 werde ich Ihnen die Vielfalt der Programmierung mit C anhand von drei Beispielen zeigen. Sie lernen: Datenbanken, GUIs, Hardware 왘 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 Jahren 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? Lernen Sie Schritt für Schritt die einzelnen Programmierelemente, ihre Besonderheiten und ihre Vorteile kennen. Die Beispielprogramme und die Erläuterungen helfen Ihnen dabei. Beispiele Verä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 Programmieren 17 1 Eine erste Einführung 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 unterschiedliche Schreibweisen zu. In den Beispielprogrammen des Buchs verwende ich jeweils die Schreibweise, die unter möglichst vielen Umgebungen lauffähig ist. Datenträger zum Buch E-Book-Ausgabe 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.. Leser der E-Book-Ausgabe finden die Beispielprogramme in den Materialien zum Buch unter: http://www.galileo-press.de/3557 Kapitel 2 Unser erstes Programm Anhand des ersten Programms lernen Sie die Entwicklungsumgebung Dev-C++ und die Grundbegriffe eines C-Programms kennen. Bei unserem ersten Programm handelt es sich um einen Klassiker, mit dem viele Entwickler in vielen Programmiersprachen starten. Auf dem Bildschirm wird einfach nur folgender Text ausgegeben: Hallo Welt 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 anderem einen Editor, in dem Sie den Code Ihrer Programme eingeben können. In Dev-C++ wählen Sie den Menüpunkt Datei 폷 Neu 폷 Quelldatei. Dies geht auch einfacher mit Hilfe der Tastenkombination (Strg)+(N). Im rechten Teil erscheint ein neues Fenster, das zunächst den Titel Unbenannt1 hat. Geben Sie darin den Code des folgenden Listings ein (siehe auch Abbildung 2.1): Neue Datei #include <stdio.h> int main() { printf("Hallo Welt\n"); return 0; } Listing 2.1 Datei »hallo.c« 18 19 2 2.2 Unser erstes Programm Das Programm wird gespeichert 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. Sonderzeichen \n bewirkt einen anschließenden Zeilenumbruch. Das Steuerzeichen n steht für new line. Jede Anweisung muss mit einem Semikolon beendet werden. 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 geschweifte 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 Entwicklungsumgebungen. Bedeutung wird aber im weiteren Verlauf des Buchs klarer. Sie dienen dazu, Die restlichen Zeilen sehen momentan noch etwas abstrakt aus. Ihre 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. Beide genannten Anweisungen stehen innerhalb der Funktion main(). Jedes C-Programm besteht aus einer oder mehreren Funktionen, die unterschiedliche 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. main() Die Angabe int besagt, dass die Funktion main() eine ganze Zahl (englisch: integer) zurückliefert, in diesem Falle 0. Die Anweisung #include zu Beginn des Programms dient dazu, Funktionen #include 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 case sensitivity Abbildung 2.1 Erste Eingabe für standard input output. In C wird nach Klein- und Großbuchstaben unterschieden. Dieses Verhalten 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. Über stdio.h wird unter anderem die Funktion printf() erreichbar gemacht. Ohne diese Header-Datei wären C-Programme nicht in der Lage, etwas auf dem Bildschirm auszugeben oder Angaben des Benutzers von der Tastatur einzulesen. Im weiteren Verlauf des Buchs werden wir noch Funktionen aus anderen Bibliotheken benötigen. stdio.h Was bedeuten die einzelnen Zeilen? Bei der Erläuterung der Programmzeilen arbeiten wir uns, ein wenig ungewöhnlich, von innen nach außen vor. printf() 20 In der Mitte des Programms finden Sie die Anweisung printf("Hallo Welt\n");. Sie dient zur Ausgabe des gewünschten Texts auf dem Bildschirm. Der Text wird in doppelte Anführungsstriche eingeschlossen. Das 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. 21 2 2.3 Unser erstes Programm 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++ handelt, dann haben die Dateien die Endung .cpp. In diesem Buch programmieren 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). Wie starte ich das fertige Programm? 2.3 Wie starte ich das fertige Programm? Ich 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. Übersetzen Beim Kompilieren können Syntaxfehler festgestellt werden. Unter der Syntax 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.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öglichkeiten: 왘 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. Einige nützliche Hinweise Schließen 왘 Sie können die Datei schließen, und zwar über den Menüpunkt DATEI 폷 SCHLIEßEN oder mit der Tastenkombination (Strg)+(W). Öffnen Sollte das Programm Syntaxfehler aufweisen, erscheinen eine oder meh- Fehlermeldung 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 übersetzt werden. 왘 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 eigenen Fenster. 22 Abbildung 2.3 Erfolgreiche Übersetzung Hinweis Es ist häufig so, dass sich Fehler erst in späteren Programmzeilen auswirken. 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. Suchen nach oben 23 2 2.4 Unser erstes Programm Eine weitere Möglichkeit zum Starten 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. 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) starten. Es erscheint ein Konsolenfenster mit der Ausgabe des Programms, siehe Abbildung 2.5. Nach einem Tastendruck wird das Konsolenfenster wieder geschlossen. Sie haben mit Hilfe der Entwicklungsumgebung Dev-C++ aus dem C-Programm 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. Ausführbare Datei Sie 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 Eingabe des Befehls cmd. Unter Windows 8 gibt es die letztere Möglichkeit ebenso. Kommandozeile Wechseln Sie im Kommandozeilenmodus in das Verzeichnis C:\CProgramme, 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. Ausführen Abbildung 2.5 Ausgabe des Programms F11 Nach einer Änderung können Sie Ihr Programm auch auf einen Schlag speichern, ü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 finden Sie eine Erläuterung in Abschnitt B.1.1, »Dev-C++«. 24 Abbildung 2.6 Eingabeaufforderung, mit Programmaufruf 25 2 Programm kopieren Codeseite 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. 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 Codeseite 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 Monaten 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ällen 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" 26 2.6 Unser erstes Programm Eine Übungsaufgabe " 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. Gleichzeitig sehen Sie in diesem Programm, wie Sie einen längeren Ausgabetext unterteilen können. Die einzelnen Textstücke stehen jeweils innerhalb von doppelten Anführungsstrichen. Die Zeichenfolge \n sorgt für einen Zeilenumbruch. Die Ausgabe sieht wie folgt aus: Langer Text Es gibt auch lange Texte. Diese stehen auch in mehreren Zeilen. 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. 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ögliche 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. 27 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 Zahlen, aber auch Texte sein. In 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 Programmierelemente kennen, die Ihnen die Möglichkeit geben, diesen Einkauf und die Erstellung der zugehörigen Rechnung immer realistischer zu gestalten. Ein Einkauf Sie erlernen zunächst die verschiedenen Programmierelemente und setzen 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 Nehmen 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. Zahlenarten Einzelne 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. Datentypen 29 3 3.2 Verschiedene Arten von Daten 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 Deklaration verwendet werden, daher stehen Deklarationen normalerweise zu Beginn. int, double In der Variablen anzahl vom Typ int kann eine ganze Zahl gespeichert werden, 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. Erleichtern Sie sich die Entwicklung: Geben Sie den Variablen aussagekräftige 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 »Kamelhöckers« mitten im Wort. Sie können zu jedem Zeitpunkt des Programms den aktuellen Wert einer Variablen auf dem Bildschirm ausgeben. Dazu werden sogenannte Platzhalter benötigt. Diese stehen bei der Ausgabe mit Hilfe der Funktion printf() genau an der Stelle des Textes, an der der Wert ausgegeben werden 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. 왘 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üsselwörter der Sprache C«) darf nicht als Name verwendet werden. 30 Platzhalter %d und %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; Einige Regeln für die Namen der Variablen: 왘 Es sind nur Buchstaben, Ziffern und der Unterstrich gestattet. Aussagekräftige Namen 3.2 Wie gebe ich Daten auf dem Bildschirm aus? Vor der ersten Zuweisung hat eine Variable einen zufälligen Wert. Im Verlauf 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 Wie gebe ich Daten auf dem Bildschirm aus? } Listing 3.2 Datei »daten_aus.c« Diesmal erhalten die Variablen bereits bei der Deklaration einen Wert. Dieser 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. Initialisierung 31 3 3.3 Verschiedene Arten von Daten Das Programm hat die folgende Ausgabe: { /* Deklaration */ int anzahl; double preis; Anzahl: 2 Preis: 1.450000 Euro Preis: 1.45 Euro Formatierte Ausgabe Dezimalpunkt Wie kann der Benutzer seine Daten per Tastatur eingeben? /* Erste Eingabe */ printf("Anzahl eingeben: "); scanf("%d", &anzahl); 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. /* Zweite Eingabe */ printf("Preis in Euro eingeben: "); scanf("%lf", &preis); Beachten Sie die englische Schreibweise: mit einem Dezimalpunkt statt einem Dezimalkomma. /* Ausgabe */ printf("Anzahl: %d\n", anzahl); printf("Preis: %.2f Euro\n", preis); 3.3 Wie kann der Benutzer seine Daten per Tastatur eingeben? return 0; } scanf() Ein Programm wird erst dann interaktiv, wenn sein Benutzer die Möglichkeit 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 verwenden. 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() 32 Listing 3.3 Datei »daten_ein.c« Die Ausgabe des Programms könnte, mit einigen Beispieleingaben des Benutzers, wie folgt aussehen: Anzahl eingeben: 3 Preis in Euro eingeben: 1.35 Anzahl: 3 Preis: 1.35 Euro Die Funktion scanf() bietet einige Stolperfallen für den Benutzer: 왘 Er muss bei der Eingabe wiederum die englische Schreibweise beachten, mit einem Dezimalpunkt statt einem Dezimalkomma. Dezimalpunkt 왘 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. Falsche Eingaben Sie werden in Abschnitt 12.6, »Zeichen und Texte speichern«, Möglichkeiten kennenlernen, mit denen Sie als Entwickler falsche Eingaben des Benutzers abfangen können. Zunächst gehen wir davon aus, dass er richtige Eingaben vornimmt. Abfangen 33 3 3.4 Verschiedene Arten von Daten Auch Sie als Entwickler können Fehler machen. Hier einige Tipps, die Sie beim Einsatz der Funktion scanf() beachten sollten: summeRechnung = anzahlApfel * preisApfel + anzahlBirne * preisBirne; preisMittel = summeRechnung / (anzahlApfel + anzahlBirne); preisDifferenz = preisApfel - preisBirne; 왘 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 Vielfalt Das Gefährliche an den genannten Fehlern des Entwicklers: Es sind keine Syntaxfehler. Das Programm wird also leider übersetzt, ohne sichtbare Fehlermeldung. 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. Sie werden sich fragen: Wieso meldet der Compiler diese Fehler nicht als Syntaxfehler? Der Grund liegt unter anderem in der Vielfalt der Programmierung 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 Punkt vor Strich 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. /* 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? 왘 Es werden zwei verschiedene Artikel eingekauft, in unterschiedlicher Anzahl. Daher werden weitere Variablen benötigt. Mehrere Variable desselben Typs können Sie durch Komma getrennt innerhalb einer Anweisung deklarieren und auch initialisieren. Mehrere Deklarationen 왘 Es werden Variable für die Ergebnisse der Rechenoperationen deklariert. 왘 Zur Berechnung der Summe der Rechnung werden die Einzelsummen pro Artikel ermittelt. Anschließend werden diese Einzelsummen addiert. Summe 왘 Der mittlere Preis eines Artikels dieses Einkaufsvorgangs ergibt sich, indem wir die Summe der Rechnung durch die Gesamtanzahl der Artikel teilen. Wir müssen Klammern setzen, da ansonsten die Division Vorrang hätte. Mittelwert Zunächst das Programm: 왘 Als Letztes wird die preisliche Differenz der beiden Artikel ermittelt. Differenz #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; Es ergibt sich die folgende Ausgabe: Wie in der Mathematik gilt: Punktrechnung vor Strichrechnung. Die Operatoren * und / haben also Vorrang vor den Operatoren + und -. Sie können zusätzlich Klammern setzen, um die Reihenfolge der Berechnung zu beeinflussen. Sie finden in Abschnitt 12.1.9, »Alle Operatoren«, eine Tabelle mit den Vorrangregeln für die Operatoren. /* Berechnung */ 34 Berechnungen mit Operatoren Summe der Rechnung: 6.30 Euro Mittlerer Preis: 1.05 Euro Preis-Differenz: 0.60 Euro Eine Rechenoperation, an der eine ganze Zahl und eine Zahl mit Nachkommastellen beteiligt sind, ergibt in C eine Zahl mit Nachkommastellen. Ein Beispiel: Bei der Berechnung des mittleren Preises pro Artikel wird eine Daten umwandeln 35 3 double-Variable durch die Summe von zwei int-Variablen geteilt. Es ergibt sich ein double-Wert. Hinweis Ganzzahldivision Falls an einer Division zwei ganze Zahlen beteiligt sind, ergibt sich wiederum 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.5 Entwicklung eines Programms Teile eines Programms Einfache Version Bei der Entwicklung Ihrer eigenen Programme sollten Sie Schritt für Schritt vorgehen. Stellen Sie zuerst einige Überlegungen an, wie das gesamte Programm 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 schreiben! Dies ist der größte Fehler, den Einsteiger (und manchmal auch Fortgeschrittene) machen können. 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 wiederum. Sollte sich ein Fehler zeigen, so wissen Sie, dass er aufgrund der letzten Ä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- 36 3.6 Verschiedene Arten von Daten Fehler suchen 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 überdenken den Aufbau. Das bedeutet nicht, dass Sie die bisherigen Programmzeilen löschen müssen, sondern möglicherweise nur ein wenig ändern und anders anordnen. Schreiben 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 Programms wesentlich schneller. Einzelne Schritte 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 Sollte eines Ihrer Programme unerwartete Ergebnisse haben, so müssen Sie sich auf die Suche nach dem Fehler machen. Wie auch andere Entwicklungsumgebungen bietet Ihnen Dev-C++ einige Möglichkeiten für dieses sogenannte Debugging. Debugging Diese 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 unterschiedlichen Zeitpunkten des Programms zu kontrollieren. Werte kontrollieren Klicken 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 Abbildung 3.1 sehen Sie im Programm daten_rechnen.c zwei Haltepunkte. Haltepunkt 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. 37 3 3.7 Verschiedene Arten von Daten Eine Übungsaufgabe Sie 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. Watch hinzufügen Abbildung 3.1 Zwei Haltepunkte Programm hält an Aktuelle Werte Falls Sie aber das Menü Fehlersuche und darin den Menüpunkt Fehlersuche wählen (Funktionstaste (F5)), dann hält das Programm vor dem Ausführen der Zeile mit dem Haltepunkt an. Falls es schon Ausgaben gegeben 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. 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 Weiterspringen 38 Die Auswahl des Menüpunkts Nächster Schritt im Menü Fehlersuche (Funktionstaste (F7)) führt dazu, dass genau eine Programmzeile bearbeitet wird. Auf diese Weise können Sie also Ihr Programm schrittweise ablaufen lassen. Dies habe ich in Abbildung 3.1 bereits mehrmals durchgeführt, so dass das Programm aktuell auf Programmzeile 14 steht. 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)). Abbildung 3.3 Watch hinzufügen Diese Variable erscheint dann inklusive ihres jeweils aktuellen Werts dauerhaft 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. Dauerhafte Anzeige 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: 5 Erster Artikel, Preis in Euro: 2.10 Zweiter Artikel, Anzahl: 2 Zweiter Artikel, Preis in Euro: 1.60 Summe ohne Rabatt: 13.70 Euro Summe mit Rabatt: 10.96 Euro 39 3 Verschiedene Arten von Daten Rabatt berechnen Der Benutzer soll also Anzahl und Preis für zwei verschiedene eingekaufte 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 Programm ausreichend. Eine mögliche Lösung finden Sie im Anhang in Abschnitt D.2, »Datei ›u_daten.c‹«. 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 unterschiedliche 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. In diesen Fällen sollte Ihr Programm verzweigen. Es sollte abhängig von der Situation unterschiedliche Anweisungen durchlaufen. Eine Verzweigung wird mit Hilfe einer Bedingung formuliert. Eine Bedingung hat einen Wahrheitswert. Dieser ist entweder wahr oder falsch. Verzweigung 4.1 Eine einfache Bedingung mit »if« Sie 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 Anweisungen ausgeführt. Eine Bedingung bilden Sie mit Hilfe eines Vergleichsoperators. Wahr Einen Block von Anweisungen erzeugen Sie mit Hilfe von geschweiften Klammern. Jede Funktion, also auch die Funktion main(), enthält einen solchen Block von Anweisungen. Anweisungsblock Ein Beispiel: #include <stdio.h> int main() { 40 41 4 4.2 Verschiedene Fälle in einem Programm double preis = 0.85; 4.2 Welche Bedingungen gibt es? /* Bedingte Ausführung eines Blocks von Anweisungen */ if(preis > 0.99) { printf("Ein teurer Artikel\n"); printf("Brauchen wir den wirklich?\n"); } Beim Vergleich von Zahlen stehen Ihnen sechs verschiedene Vergleichsoperatoren 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). /* Bedingte Ausführung einer einzelnen Anweisung */ if(preis < 1.0) printf("Ein billiger Artikel\n"); #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"); } Listing 4.1 Datei »fall_if.c« /* Kleiner */ if(preisBirne < preisKiwi) printf("Birne ist billiger als Kiwi\n"); Es werden die beiden Vergleichsoperatoren > (größer als) und < (kleiner als) verwendet. Liegt der Preis über 99 Cent, dann handelt es sich um einen teuren Artikel, und es wird der Block mit den beiden Anweisungen zur Ausgabe durchgeführt. Liegt der Preis unterhalb von einem Euro, dann ist der Artikel billig, und es wird die einzelne Anweisung ausgeführt. /* Größer oder gleich */ if(preisApfel >= preisKiwi) printf("Apfel ist mindestens so teuer wie Kiwi\n"); Das Programm erzeugt die folgende Ausgabe: Ein billiger Artikel /* Kleiner oder gleich */ if(preisBirne <= preisKiwi) printf("Birne ist hoechstens so teuer wie Kiwi\n"); Ändern Sie einmal den Preis so ab, dass die andere Ausgabe erfolgt. Einrückung > < >= <= == != Alle Vergleichsoperatoren werden in folgendem Beispiel genutzt: return 0; Vergleichsoperatoren Welche Bedingungen gibt es? 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. /* Gleich */ if(preisApfel == preisKiwi) printf("Apfel und Kiwi haben denselben Preis\n"); Hinweis /* Ungleich */ if(preisBirne != preisKiwi) printf("Birne und Kiwi haben unterschiedliche Preise\n"); Achten Sie darauf, nach der Bedingung kein Semikolon zu notieren. Dies würde die Verzweigung unmittelbar beenden. Der Compiler meldet diesen Fehler nicht. Die anschließende Anweisung wäre nicht mehr mit der Verzweigung verbunden und würde stets ausgeführt. return 0; } Listing 4.2 Datei »fall_vergleich.c« 42 43 4 4.4 Verschiedene Fälle in einem Programm Es werden die Preise von drei unterschiedlichen Artikeln miteinander verglichen. Das Programm erzeugt die folgende Ausgabe: Apfel Birne Apfel Birne Apfel Birne ist ist ist ist und und teurer als Birne billiger als Kiwi mindestens so teuer wie Kiwi hoechstens so teuer wie Kiwi Kiwi haben denselben Preis 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 überlegen Sie, welche Ausgaben dann erfolgen und welche nicht. Starten Sie erst anschließend zur Bestätigung das Programm. Wie kann ich Bedingungen kombinieren? /* 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 Artikel Den nehmen wir Hinweis = und == 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. Hinweis Achten Sie auch darauf, nach dem else kein Semikolon zu notieren. Dies würde diesen Zweig der Verzweigung unmittelbar beenden. Der Compiler meldet diesen Fehler ebenfalls nicht. Die anschließende Anweisung wäre nicht mehr mit der Verzweigung verbunden und würde stets ausgeführt. 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"); 44 4.4 Wie kann ich Bedingungen kombinieren? Der Ablauf innerhalb einer Verzweigung kann auch von mehreren Bedingungen 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? Verknüpfung 왘 Falls alle Bedingungen zutreffen sollen, dann verknüpfen Sie sie mit Hilfe des Operators &&. Er steht für das logische Und. Und && 왘 Reicht dagegen eine Bedingung aus, dann nutzen Sie den Operator ||. Er steht für das logische Oder. Oder || Es gibt noch einen dritten logischen Operator: Das Zeichen ! steht für das logische Nicht. Mit diesem Operator wird der Wahrheitswert einer Bedin- Nicht ! 45 4 4.5 Verschiedene Fälle in einem Programm Eine Übungsaufgabe gung umgedreht: Aus wahr wird falsch und umgekehrt. Manche Verzweigung lässt sich mit Hilfe dieses Operators einfacher formulieren. Bedingungen ermittelt wird. Erst anschließend werden die Bedingungen verknüpft. Ein Beispiel: Allerdings hat der Operator ! für das logische Nicht Vorrang vor den Vergleichsoperatoren. 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. #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"); 4.5 Eine Übungsaufgabe Schreiben Sie ein Programm in der Datei u_fall.c. Es soll die folgende Ausgabe ermöglichen (hier mit Eingaben des Benutzers): /* Logisches Oder */ if(preisApfel > 0.99 || preisBirne > 0.99) printf("Mindestens einer der Artikel ist teuer\n"); Anzahl: 5 Preis in Euro: 3.20 Summe der Rechnung: 12.80 Euro /* Logisches Nicht */ if(!(preisBanane > 0.99)) printf("Artikel ist nicht teuer\n"); Der Benutzer soll Anzahl und Preis für einen eingekauften Artikel eingeben. 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 Variablennamen, und kommentieren Sie Ihr Programm ausreichend. Eine mögliche Lösung finden Sie in Abschnitt D.3, » Datei ›u_fall.c‹«. return 0; } Vorrangregeln 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 billig Mindestens einer der Artikel ist teuer Artikel 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 überlegen Sie, welche Ausgaben dann erfolgen und welche nicht. Starten Sie erst anschließend zur Bestätigung das Programm. Vergleich vor Verknüpfung 46 Die Vergleichsoperatoren haben Vorrang vor den logischen Operatoren && und ||. Das bedeutet, dass zunächst der Wahrheitswert der einzelnen 47 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 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 5 Inhalt 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 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 7 Inhalt Inhalt 11 Daten auf der Festplatte 12.4.6 101 12.5 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 12.1 Verschiedene Arten von Daten .............................................................................. 107 12.1.1 12.1.2 12.1.3 12.1.4 12.1.5 12.1.6 12.1.7 12.1.8 12.1.9 12.2 12.8 Varianten der »for«-Schleife .................................................................... Schleifen vorzeitig abbrechen oder später fortsetzen .......................... Eine Schleife in einer Schleife .................................................................. Eine mehrfache Schleife abbrechen ....................................................... Funktionen deklarieren ............................................................................ 140 Lokale und globale Variablen .................................................................. 141 Statische Variable ..................................................................................... 143 Rekursive Funktionen ............................................................................... 144 Zeiger auf Funktionen .............................................................................. 146 166 167 169 171 172 174 175 177 179 181 Rechnen mit Zeigern und Adressen ........................................................ 190 Vereinfachung durch »typedef« .............................................................. Strukturen in Strukturen .......................................................................... Enumerationen ......................................................................................... 193 193 195 Daten auf der Festplatte ......................................................................................... 197 12.9.1 12.9.2 12.9.3 12.9.4 12.9.5 12.9.6 132 135 137 138 Einzelne Zeichen ....................................................................................... Code eines Zeichens ................................................................................. Funktionen für Zeichenketten ................................................................. Zeichenketten vergleichen ....................................................................... Zeichenketten zerlegen ............................................................................ Sicheres Einlesen von Wörtern ................................................................ Sicheres Einlesen von Zeichenketten ...................................................... Zeichenketten und Zahlen umwandeln ................................................. Sicheres Einlesen von Zahlen ................................................................... Operationen mit Zeichenketten .............................................................. Unterschiedliche Daten zusammenfassen .......................................................... 192 12.8.1 12.8.2 12.8.3 12.9 150 156 158 162 Indirekter Zugriff mit Zeigern ................................................................................ 190 12.7.1 12.9.7 Programme übersichtlich aufteilen ...................................................................... 139 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 8 Wahrheitswerte ........................................................................................ 124 Bedingte Zuweisung ................................................................................. 126 Mehr als zwei Fälle .................................................................................... 127 Fälle zusammenfassen ............................................................................. 128 Nebenwirkungen bei logischen Verknüpfungen .................................. 130 12.7 Programmteile wiederholen .................................................................................. 131 12.3.1 12.3.2 12.3.3 12.3.4 12.4 107 109 111 113 115 116 118 120 122 Verschiedene Fälle in einem Programm .............................................................. 124 12.2.1 12.2.2 12.2.3 12.2.4 12.2.5 12.3 Mehrere Daten auf einmal einlesen ....................................................... Datentypen für ganze Zahlen .................................................................. Datentypen für Zahlen mit Nachkommastellen ................................... Umwandlungen zwischen Datentypen .................................................. Konstanten sind unveränderlich ............................................................. Zufällige Zahlen ........................................................................................ Kombinierte Zuweisungen ...................................................................... Daten tauschen ......................................................................................... Alle Operatoren ......................................................................................... Operationen mit Feldern .......................................................................... Mehrdimensionale Felder ........................................................................ Felder sortieren ......................................................................................... Elemente in einem Feld suchen .............................................................. Zeichen und Texte speichern .................................................................................. 166 12.6.1 12.6.2 12.6.3 12.6.4 12.6.5 12.6.6 12.6.7 12.6.8 12.6.9 12.6.10 107 148 Große Datenmengen speichern ............................................................................. 149 12.5.1 12.5.2 12.5.3 12.5.4 12.6 Beliebige Anzahl von Parametern ........................................................... Programm mit Ein- und Ausgabe ............................................................ Umlenkung der Ein- und Ausgabe .......................................................... CSV-Dateien schreiben ............................................................................. CSV-Dateien lesen ..................................................................................... Datensätze mit fester Länge schreiben .................................................. Datensätze mit fester Länge lesen .......................................................... 197 199 200 203 205 207 Datensätze mit fester Länge schreiben und lesen ................................ 209 13 Daten dynamisch im Speicher verwalten 13.1 Warum benötige ich dynamische Felder? ........................................................... 215 13.2 Eine Datenreihe dynamisch speichern ................................................................. 216 215 9 Inhalt Inhalt 10 13.3 Größe eines dynamischen Felds ändern .............................................................. 218 16.4 Inhalt eines Verzeichnisbaums .............................................................................. 263 13.4 Eine Tabelle dynamisch speichern ........................................................................ 220 16.5 Dateien ändern .......................................................................................................... 266 13.5 Wie übergebe ich ein dynamisches Feld an eine Funktion? ............................ 223 16.6 Verzeichnisse ändern ............................................................................................... 267 14 Arbeiten mit Zahlen 227 17 Umgang mit Datum und Uhrzeit 14.1 Winkelfunktionen .................................................................................................... 227 17.1 Weltzeit ausgeben .................................................................................................... 269 14.2 Runden, Nachkommastellen, Modulo .................................................................. 229 17.2 Lokale Zeit ausgeben und formatieren ................................................................ 270 14.3 Weitere mathematische Funktionen ................................................................... 231 17.3 Zeitangaben erzeugen ............................................................................................. 273 14.4 Komplexe Zahlen darstellen .................................................................................. 232 17.4 Zeitspanne messen ................................................................................................... 274 14.5 Rechnen mit komplexen Zahlen ............................................................................ 234 17.5 Zeit abwarten ............................................................................................................ 276 14.6 Weitere Funktionen für komplexe Zahlen .......................................................... 236 17.6 Alter berechnen ......................................................................................................... 278 14.7 Bit-Operatoren .......................................................................................................... 237 14.8 Umwandlung von Dualzahlen ............................................................................... 241 14.9 Bitfelder ...................................................................................................................... 243 18 Kommunikation mit dem Betriebssystem 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 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 15 Präprozessor-Anweisungen 15.1 Einbinden von Dateien ............................................................................................ 247 15.2 Definitionen und Makros ........................................................................................ 248 15.3 Definitionen und Verzweigungen ......................................................................... 250 15.4 Eine Systemweiche ................................................................................................... 252 247 269 281 287 16 Zugriff auf Dateien und Verzeichnisse 16.1 Attribute von Dateien und Verzeichnissen ......................................................... 255 19.5 Anzeigen der Datensätze ........................................................................................ 293 16.2 Zugriffsrechte ändern .............................................................................................. 258 19.6 Auswahl von Datensätzen und Feldern ............................................................... 295 16.3 Inhalt eines Verzeichnisses ..................................................................................... 261 19.7 Auswahl mit Platzhaltern ....................................................................................... 298 255 11 Inhalt Inhalt 19.8 Auswahl nach Eingabe ............................................................................................. 300 21.5 Eigenschaften setzen und abrufen ....................................................................... 349 19.9 Sortieren der Ausgabe ............................................................................................. 302 21.6 Ereignisfunktionen ................................................................................................... 351 19.10 Ändern von Datensätzen ........................................................................................ 304 21.7 Positionierung von Widgets ................................................................................... 352 19.11 Löschen von Datensätzen ....................................................................................... 305 21.8 Auswahl- und Eingabe-Widgets ............................................................................ 354 20 Beispielprojekte 309 22 Raspberry Pi 20.1 Lernspiel: Hauptstädte der EU ............................................................................... 309 22.1 Einzelteile und Installation ..................................................................................... 361 20.2 Lernspiel: Kopfrechnen ............................................................................................ 315 20.2.1 20.2.2 20.2.3 20.3 315 319 320 Ausgabe von Morsezeichen .................................................................................... 323 20.3.1 20.3.2 20.3.3 20.4 Das Basisprogramm .................................................................................. Version mit Zeitmessung ......................................................................... Version mit Highscore-Datei ................................................................... Textdatei als Datenquelle ........................................................................ Morse-Code auf dem Bildschirm ............................................................. Morse-Code per Lautsprecher ................................................................. 22.1.1 22.1.2 324 325 326 22.1.3 22.1.4 22.1.5 22.2 22.3 21 Grafische Benutzeroberflächen mit GTK+ 21.1 Datentypen der »Glib« ............................................................................................ 337 21.2 Zeichenketten mit »GString« ................................................................................. 339 21.3 Felder mit GArray ...................................................................................................... 341 21.3.1 21.3.2 21.3.3 21.3.4 21.3.5 21.3.6 21.3.7 21.4 12 Aufbau des Programms ............................................................................ Rahmen des Programms .......................................................................... Hilfsfunktion zum Einlesen ...................................................................... Ausgabe aller Elemente ............................................................................ Einfügen am Anfang und am Ende ......................................................... Einfügen an beliebiger Position .............................................................. Löschen eines Elements ........................................................................... 337 341 341 343 344 344 345 346 Die erste Benutzeroberfläche ................................................................................. 347 22.6 Gleichspannungs-Stromkreis .................................................................. Spannung ist Information ........................................................................ Bauelemente und Ausrüstung ................................................................ Widerstände .............................................................................................. 367 368 368 369 Bibliothek »wiringPi« ................................................................................ 373 Leuchtdiode ................................................................................................................ 373 22.4.1 22.4.2 22.4.3 22.4.4 22.5 362 364 Installation ................................................................................................. 365 Update ........................................................................................................ 366 WLAN und Internet ................................................................................... 366 Aufbau des GPIO-Anschlusses ................................................................................ 371 22.3.1 22.4 Einzelteile ................................................................................................... Zusammenbau .......................................................................................... Elektronische Schaltungen ..................................................................................... 367 22.2.1 22.2.2 22.2.3 22.2.4 Spiel Mastermind ...................................................................................................... 330 361 Schaltung ................................................................................................... LED ein- und ausschalten ......................................................................... LED blinken lassen .................................................................................... LED blinkt Morsezeichen .......................................................................... 374 374 375 376 Taster ........................................................................................................................... 378 22.5.1 Schaltung ................................................................................................... 22.5.2 22.5.3 Einfache Prüfung des Tasters .................................................................. Verbesserte Prüfung des Tasters ............................................................. 378 379 380 Ein Reaktionsspiel ..................................................................................................... 382 22.6.1 22.6.2 Schaltung ................................................................................................... Programm .................................................................................................. 382 383 13 Inhalt Anhang A Änderungen der Programmierung mit C ............................................................. 389 A.1 A.2 A.3 A.4 A.5 B Installationen unter Windows ................................................................ Installationen unter Ubuntu Linux ......................................................... Installationen unter OS X ......................................................................... 397 405 407 Hilfestellungen und Übersichten .......................................................................... 411 C.1 C.2 C.3 C.4 D 389 389 391 393 393 Installationen ............................................................................................................ 397 B.1 B.2 B.3 C C-Standards ............................................................................................... C99, neue Datentypen ............................................................................. C99, erweiterte Deklarationen ................................................................ C99, boolesche Variable ........................................................................... C11, Überladen von Funktionen ............................................................... Windows – einige Tastenkombinationen .............................................. Unix-Befehle .............................................................................................. Schlüsselwörter der Sprache C ................................................................ Liste der Funktionen ................................................................................. 411 411 415 415 Lösungen der Übungsaufgaben ............................................................................. 423 D.1 D.2 D.3 D.4 D.5 D.6 D.7 D.8 D.9 D.10 D.11 D.12 Datei »u_name.c« (Abschnitt 2.6) ........................................................... Datei »u_daten.c« (Abschnitt 3.7) ........................................................... Datei »u_fall.c« (Abschnitt 4.5) ................................................................ Datei »u_schleife_for.c« (Abschnitt 5.5) ................................................. Datei »u_schleife_do.c« (Abschnitt 5.6) ................................................. Datei »u_funktion.c« (Abschnitt 6.5) ...................................................... Datei »u_feld.c« (Abschnitt 7.4) .............................................................. Datei »u_text.c« (Abschnitt 8.6) .............................................................. Datei »u_zeiger.c« (Abschnitt 9.4) .......................................................... 423 423 424 425 426 427 428 429 430 Datei »u_struktur.c« (Abschnitt 10.7) ..................................................... 432 Datei »u_datei.c« (Abschnitt 11.3) ........................................................... 433 Datei »u_fall_mehrere.c« (Abschnitt 12.2.3) .......................................... 434 Index .......................................................................................................................................... 435 14 Index 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 435 Index Index __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 436 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 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 437 Index Index 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 438 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 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 439 Index Index 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 440 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 Header-Datei .................................................................. 21 Hexadezimalsystem................................................ 109 HIGH .............................................................................. 368 hoch ................................................................................ 232 I I (Strom)......................................................................... 367 I2C .................................................................................... 373 id....................................................................................... 258 IDE...................................................................................... 16 if.......................................................................................... 41 Index................................................................................ 69 Indirektionsoperator ................................................. 84 Inhaltsoperator *........................................... 84, 98, 121 Initialisierung................................................................. 31 Inkrementoperator.................................................... 118 INSERT INTO ............................................................... 292 Installation für OS X .................................................................... 407 für Ubuntu Linux ................................................. 405 für Windows............................................................ 397 int.......................................................................... 29, 31–32 INT_MAX....................................................................... 110 INT_MIN........................................................................ 110 Inter-Integrated Circuit 씮 I2C Inversion 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 ................................................................... 23 Komplexe Zahl ........................................................... 233 Betrag ........................................................................ 234 Exponentialfunktion ........................................... 236 hoch............................................................................ 236 Imaginärteil ............................................................ 234 konjugierte komplexe ......................................... 236 Logarithmus ........................................................... 236 Realteil ...................................................................... 234 Rechenoperationen.............................................. 234 Winkel........................................................................ 234 Wurzel ....................................................................... 236 Komponente ................................................................ 90 Zeiger -> ...................................................................... 98 Konsolenfenster .......................................................... 24 Konstante ..................................................... 115, 117, 248 mehrere..................................................................... 195 vordefinierte ........................................................... 253 Kopfgesteuert ............................................................... 54 Kopfrechnen................................................................. 315 Kosinus.......................................................................... 227 Kosinus Hyperbolicus ............................................. 227 Kreiszahl Pi................................................................... 227 L LAN-Kabel..................................................................... 363 Laufbedingung .............................................................. 51 Laufzeitfehler ................................................................ 34 Leafpad ......................................................................... 366 LED .................................................................................. 373 anschließen ............................................................. 374 blinken ...................................................................... 375 ein- und ausschalten ........................................... 374 Vorwiderstand ....................................................... 374 Leuchtdiode 씮 LED LibreOffice Calc .......................................................... 201 Light Emitting Diode 씮 LED LIKE (SQL)..................................................................... 298 limits.h.......................................................................... 109 Lineare Suche ..................................................... 162–163 -lm.................................................................................... 229 localtime() ................................................................... 270 log() ................................................................................. 232 log10()............................................................................. 232 Logarithmus ................................................................ 232 Logischer Operator ..................................................... 45 Logisches Nicht ............................................................ 45 441 Index Index 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 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 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 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 442 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 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 R r (Öffnungsmodus) ................................................... 105 R (Widerstand) ............................................................ 367 r+ (Öffnungsmodus)................................................ 209 rand() .............................................................................. 116 RAND_MAX ................................................................. 116 Raspberry Pi................................................................. 361 Benutzeroberfläche .............................................. 365 Browser .................................................................... 366 S scanf() ............................................................................... 32 formatiert ................................................................ 107 mehrere Daten ....................................................... 107 Schaltjahr...................................................................... 274 Schaltung elektronische ................................................. 361, 367 scharfes s.................................................................. 26, 30 443 Index Index 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 444 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 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 445 Index Index 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 446 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 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 447 Wissen, wie’s geht. 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. 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 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 urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag. Teilen Sie Ihre Leseerfahrung mit uns!