Dietmar Herrmann Effektiv Programmieren in C und C++ Die Bücher der Reihe ~Ausbildung und Studium~ bieten praxisorientierte Einführungen für die Aus- und Weiterbildung sowie Bausteine für ein erfolgreiches berufsqualil1zierendes Studium. Unter anderem sind erschienen: Turbo Pa_I We.-laer für Einführung In UNIX Auablldun, und Studium von Wemer Brecht von Ekkehard Kaier Grundkurs JAVA o.lphl EHentIals von Dietmar Abts von Ekkehard Kaler PLjI für Workstatlona Pro. ...m mleren mit Fortran 90 von Eberhard $Iunn von Hans-Peler Bäumer Modul. . KI ....n . V.rtrip Wlrtsehafhmathenlatlk mit von Karlheinz Hug dem Comput.r Aufbaukurs Wirtschafts.. von Hans Benker Informatik D.tentMink-E"lineerln, von Dietmar Abts und Wilhelm Mülder von Alfred Moos und Gerhard Daues Onll..-Publlahln, für Studenten Vlaual haie:: EHentlala und W1nenschaftler von Ekkehard Kaier ' von Michael BeißlI'enger Exc::el fOr BetrIebswirte Vlsual h.le für von Robert Horvat technische An_ndunpn und Kambiz Koochaki von ]ürgen Radel Praktische Gnlndkurs AllOrithmen Systemprogramml.run, und Datanstnlkturen von Helmut Weber von Andreas Solymosi und Utrich Grude Inpnl.urmathematlk mit Compl.lten.lpbra-Systemen Theorie und Praxla von Hans Benker von Rene Steiner Exeel für Technlk.r und Inpnleure ObJektorientierte von Hans-Jürgen Holland ProBJ'Smmlarun,ln JAVA und Uwe Bemhardt von Dito Rauh RelatIonai. . und objekt Gnlndkurs Wirtschafts relatIonai. . SQL Informatik von Wolf-Michael Kähler von Dletmar Abts und Wilhelm Mülder Kostenstellanrechnung Mana,ementvon mit SAP-R/3- Gaschlftapt"OZ. ...n von Franz Klenger und Ellen Falk von Andreas Gadatsch Kalms effektiv Pro. ...m mleren OBERON InCundC++ von B. Marincek, J.L. Marais von Dietmar Henmann und E. fe1ler Studlenfiihrer WIrtschaftlIInformatIk von Peler Mertens, Peter Chamoni, Dieter Ehrenberg, Joachim Griese, Lutz /. Heinri~h und Karl Kurbel (Hrsg.) Vieweg Dietmar Herrmann Effektiv Programmieren in C und C++ Eine aktuelle Einführung mit Beispielen aus Mathematik, Naturwissenschaft und Technik 5., überarbeitete und verbesserte Auflage ~ vleweg Die Deutsche Bibliothek - CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei Der Deutschen Bibliothek erhältlich. 1. Auflage 1989 2., überarbeitete Auflage 1990 (Nachdruck 1991) 3., vollständig überarbeitete und erweiterte Auflage 1996 4., aktualisierte und erweiterte Auflage 1999 5., überarbeitete und verbesserte Auflage Februar 2001 Alle Rechte vorbehalten © Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, Braunschweig/Wiesbaden, 2001 Der Verlag Vieweg ist ein Unternehmen der Fachverlagsgruppe BertelsmannSpringer. Das Werk einschließlich aller seiner Teile ist urheberrechtlich ge schützt. Jede Verwertung außerhalb der engen Grenzen des Ur heberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Über setzungen, Mikroverfilmungen und die Einspeicherung und Ver arbeitung in elektronischen Systemen. www.vieweg.de Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Auslieferung unserer Bücher wollen wir die Umwelt schonen: Dieses Buch ist auf säurefreiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweiß folie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verbrennung Schadstoffe freisetzen. Konzeption und Layout des Umschlags: Ulrike Weigel, www.CorporateDesignGroup.de Gedruckt auf säurefreiem Papier ISBN 978-3-528-44655-0 ISBN 978-3-322-94365-1 (eBook) DOI 10.1007/978-3-322-94365-1 Die vierte Auflage dieses Buchs ist so freundlich aufgenom men worden, dass der Verlag sich zur Herausgabe einer Folge auflage entschlossen hat. Obwohl sich im Bereich der Programmiersprachen einige Neuerungen ergeben haben, hat C seine grundlegende Position als Programmiersprache behalten: • Microsoft hat eine auf der C-Syntax basierende Program miersprache C# (gesprochen C sharp) als Konkurrenzpro dukt zu Java entwickelt. Damit ist C nun Mutter einer gan zen Sprachenfamilie geworden. • Die wichtigste Neuerung ist die Verabschiedung der neuen ANSI/ISO Norm 9899:1999, die die frühere ANSI!ISO Norm 9899:1990 ersetzt. Diese neue Version von C wird nun C99 genannt. Bereits 1995 kam es zu einer Erweiterung der C Norm durch das Amendment 1, das die Verwendung von in ternationalen Zeichensätzen mittels der Norm ISO/IEC 10646 regelte. Die neue C-Norm enthält neben anderem: • neue Datentypen wie long long oder long double, • erweiterte int-Typen wie int32_t, • von C++ übernommene Elemente wie const, sizeof, Kom mentare mit / / und die Blockstruktur von Kontrollanwei sungen. Wie man sieht, ist das Programmieren in C immer noch aktuell; das Erlernen der C-Syntax liefert Zugang zur erfolgreichsten Familie der Programmiersprachen (C, C++, Java, C#). v Vorwort Die Möglichkeit zum Download des Quelleodes aller im Buch enthaltenen Programme besteht bei der Internet-Adresse: http://www.informatik.fh-muenchen.de/-dietmar Wichtig für das Herunterladen ist, dass die Java-Option Ihres Browsers aktiviert ist. In der vorliegenden 5. Auflage habe ich insbesondere den Er fordernissen der neuen deutschen Rechtschreibung Rechnung getragen, aber auch ansonsten das Werk nochmals durchge sehen und einige kleinere Verbesserungen durchgeführt. Möge die Anerkennung auch dieser Auflage möglichst breit zuteil werden. Sollten Sie Fragen oder Hinweise ahben, freue ich mich auf eine Nachricht. Anzing, Januar 2001 Dietmar Herrmann (dietmar. [email protected]) Vorwort zur 4. Auflage C hat sich schon seit vielen Jahren als die wichtigste professi onelle Programmiersprache bewährt. Seit langem hat C sein textgebundenes UNIX-Image überwunden und ist an allen Maschinen in einer grafisch-visuellen Benutzeroberfläche vertreten. Das Buch ist als Arbeitsbuch für alle Leser geschrieben, die selbst am Rechner Erfahrungen in dieser wichtigen Program miersprache sammeln wollen. Das Buch ist kein Lehrbuch, das mit einigen wenigen Programmfragmenten enzyklopä disch alle Sprachelemente in systematischer Weise abhandelt Der Leser kann sich vielmehr an über 150 C-Programmen bei spielorientiert in die Sprache einarbeiten. Die Neuerungen der ANS I C-Norm, die fast alle in C++ ihren Niederschlag gefun den haben, werden ausführlich referiert. Die Darstellung setzt voraus, dass der Leser seinen Rechner und sein Betriebs system kennt und nach dem Laden des Quelltexts in einen Editor das Programm mittels eines C- bzw. C++-Compilers zum Laufen bringt. Das Buch ist ursprünglich aus Aufzeichnungen für Kurse aus dem Bereich Lehrerausbildung entstanden, es wurde mehrfach als Basis für eine Vorlesung "Programmieren 1 und 2" an der Fachhochschule München verwendet. Die vorliegende 4. Auf lage wurde gänzlich überarbeitet, aktualisiert und erweitert. Die Bedeutung von C ist in den letzten Jahren durch die Ein führung der Programmiersprache C++ noch wesentlich ge wachsen. B. STROUSTRUP wählte bewusst C als Basis für seine objektorientierte Spracherweiterung. Eine vertiefte Kenntnis von C ist sicher ein idealer Einstieg in C++. Das Buch bietet in den Kapiteln 18 bis 20 einen elementaren Einstieg in die ob jektorientierte Programmierweise. Da auch James Gosling die CIC++-Syntax für seine Program miersprache JAVA gewählt hat, ist die C-Syntax zur universel len Ausdrucksweise geworden und hat die Pascal-Syntax VII Vorwort zur 4. Auflage längst verdrängt. Obwohl die Philosophie von JA VA eine ganze andere als die von C ist, kann man mit C-Kenntnissen JA VA-Programme weitgehend verstehen, da dort alle Kon trollstrukturen, Datentypen (bis auf array und enum) und die Funktionen übernommen wurden. Die Datentypen Boolesche Werte (boolean) und Zeichenketten (strings) sind in JAVA, anders als in C++, vordefinierte Klassen. Kapitel 1 liefert einen Überblick in die Entstehung und Philo sophie von C. Kapitel 2 legt die Grundlagen der Syntax von C, die im Gegensatz zu anderen Programmiersprachen ge wöhnungsbedürftig ist. Ausführlich werden im Kapitel 3 die einfachen Datentypen, ihre Speicherformate, mögliche Typumwandlungen (casts), die Fallstricke der Computer-Arithmetik und die grundlegen den Ein- und Ausgabefunktionen dargestellt. Die grundlegenden Kontrollstrukturen behandelt Kapitel 4. Das folgende Kapitel 5 zeigt das Arbeiten mit Reihungen und Zei chenketten. In C sind die Pointer aus Kapitel 6 ganz eng mit Reihungen verbunden, die die knifflige Seite von C darstellen. Die Funktionen werden in Kapitel 7 ausführlich und umfas send dargestellt. Seine Flexibilität verdankt C vor allem der Vielfalt von Funktionen, seien es mathematische, Zeichenket ten- oder System-Funktionen. Nach einer kurzen Diskussion der Speicherklassen in Kapi tel 8 folgt in Kapitel 9 eine breite Darstellung von Operatoren in C. Die Schreib- und Verwendungsweisen von Operatoren von C sind nicht immer selbsterklärend, da manche Operato ren in mehrfacher Bedeutung angewandt werden. Hinzu kommt noch, dass in C++ fast alle Operatoren durch Überla den weitere Bedeutungen erhalten können. Kapitel 10 beginnt mit der Rekursion als spezielle Program miertechnik. Diese Techniken werden dann im Kapitel 15 fortgesetzt durch eine Diskussion weiterer Techniken wie Tei le-und-Herrsche-, Backtracking- und Branch & Bound Methoden. VIII In Kapitel 11 erfolgt die Behandlung der höheren Datentypen wie Aufzählungstypen, Verbunde, Strukturen und Bitfelder, Diese werden ergänzt durch die selbst definierten, dynami schen Datentypen wie Listen, Binärbäume u. a. in Kapitel 12. Hinweise zum Präprozessor und zum Einbinden von Biblio theksfunktionen liefert Kapitel 13. Die Standard-Ein- und Aus gabe behandelt Kapitel 14. MS-DOS-spezifisch ist Kapitel 16, das einige Beispiele zur Systemprogrammierung zeigt. Den Abschluss des C-Teils bil det Kapitel 17, das zehn Programme aus der Numerischen Mathematik, Statistik und Grafik enthält. Der C++-Teil des Buchs beginnt in Kapitel 18 mit einer Ein führung in das objektorientierte Programmieren (OOP). Im folgenden Kapitel 19 kann der Leser den Übergang von C nach C++ nachvollziehen. Hier finden sich Neuerungen wie Inline- und Template-Funktionen, Default-Parameter und die objektorientierte Ein- u. Ausgabe. Kapitel 20 enthält zehn C++-Programmen aus verschiedenen Bereichen wie Wirtschaft, Numerik, Statistik, Physik und Astro nomie. Sie zeigen, in welcher Vielfalt die Klassen - als selbst definierte Datentypen - in den Naturwissenschaften Anwen dung finden. Den Abschluss des Buchs bildet das Kapitel 21, in dem das Arbeiten mit der Standard Template Library (STL) aufzeigt. Die se Bibliotheken liefern die wichtigsten Algorithmen und Daten strukturen in Form von Template, d. h. datentypunabhängig. Jeder Programmierer kann diese Templates, z. B. <vector'> mit beliebigen eigenen Daten bzw. Klassen füllen. Dies ist eine er hebliche Arbeitserleichterung für Programmierer. Alle C/C++-Programme dieses Buches können Sie als Datei er halten per Internet unter der URL: http://www.informatik.fh-muenchen.de/-dietmar Die im Buch enthaltene Programme entsprechen weitgehend dem ANSI C++-Standard und sollten daher von allen gängigen IX VOIWort zur 4. Auflage C- Compilern, die meist auch C++-Programme übersetzen können, fehlerfrei akzeptiert werden. Dem Vieweg-Verlag, insbesondere Herrn Dr. R. Klockenbusch, danke ich für die Herausgabe des Buches nunmehr in der 4.Auflage. Besondere Unterstützung erfuhr ich durch Herrn Th. Kregeloh, der das Layout des Buches erstellte, meine Bit map-Grafiken ins Vektorformat umwandelte und auch die Microsoft-Version der Grafikprogramme schrieb. Anzing, Juli 1999 Dietmar Herrmann (dietmar. [email protected]) x
Description: