Dietmar Herrmann Effektiv Programmieren inCund C++ Ausbildung und Studium Die Bü~her der Reihe .Ausbildung lind Stuti!um" bieren PT"dxisoricntiene Ein fti h run~en fÜr d ie Aus-und Weiterbildung ~ol\ie Bausteine tür ein erfolgreiches !Je rufsqualifizierendes Studium. Unter anderem si nd erschienen: Studien--und Forschungsführer t:nformatlk an Fachhochschulen I'on Rainer Bischoff (H rsg.) Turbo Pascal Wegweiser fllr Ausbildung und Studium von Ekkehard Kaier De'lphl Essentials I'on Ekkehard Kaier Programmieren mit Fortran 90 von Ilans· Peler Bäumer Wlrtsehaftsmathematlk mit dem Computer I'on Ha ns Benker Oa.tenbank-Englneerlng I'on Alt'red Moos und Gerhard Dalles Vlsual Basic Essentials von I:kkeham Kaier Excel fÜr Betriebswirte von Robrn Ilorvat und Kambiz Koochaki Grundkurs WIrtschaftsinformatik I'on Die!mar !!'bts und Wilhelm Mülder Praktische Sylitemprogrammlerung I'on lIelmut Weber Ingenieurmathematik mit Computeralgebra-5ystemen \'on 11 .. n 5 8enker E.xcel rur Techniker und Ingenieure I'on Ilans-Jürgen 11 olland und Uwe BernhHdt Relationales und obJ,ektrelatlonales SOL 1'00 Wolf-Michael KöM ler KostensteIlenrechnung mit SAP" R/3e I'on Franl Klenger und Ellen Fal k Kalms Theorie und Praxis relatlonaler Datenbanken von Rf'mi Steinrr OBERON \ on 8, M~ rincek, J. L. Marals und E. Zeller Studienführer Wlrtlichaftslnformatlk von Pcter Menens, Pet er Chamoni, Dieter Ehrl'nherg, loachim Griese, Lutz J. HelnTich und Karl Kurbel (I!r~g.l Einführung In UNIX VM Wl;fllrr Br~cht Grundkufll JAVA \'On Dietmar Abts ObjektorientIerte Programmierung In JAVA von Otto Rauh PL/I f·ür Workstations von Ebcrhard Sturm Effektiv Programmieren In C und C++ I'on Dietmar Herrman n Vieweg Dietmar Herrmann Effektiv Progral11mieren in C und C++ Eine aktuelle Einführung mit Beispielen aus Mathematik, Naturwissenschaft und Technik 4., aktualisierte und erweiterte Auflage ~ vleweg 1. Auflage 1989 2., überarbeitete Auflage 1990 (Nachdruck 1991) 3., vollständig überarbeitete und erweiterte Auflage 1996 4., aktualisierte und erweiterte Auflage 1999 Alle Rechte vorbehalten © Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, Braunschweig/Wiesbaden, 1999 Der Verlag Vieweg ist ein Unternehmen der Bertelsmann Fachinformation GmbH. 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. http://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: U1rike Weigel, www.CorporateDesignGroup.de Gedruckt auf säurefreiem Papier ISBN 978-3-528-34655-3 ISBN 978-3-322-92867-2 (eBook) DOI 10.1007/978-3-322-92867-2 Vorwort C hat sich schon seit vielen Jahren als die wichtigste profes sionelle 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 Sprachelernente in systematischer Weise abhandelt. Der Leser kann sich vielmehr an über 150 C- Programmen beispielorientiert in die Sprache einarbeiten. Die Neuerungen der ANSI C-Norm, die fast alle in C++ ihren Niederschlag ge funden haben, werden ausführlich referiert. Die Darstellung setzt voraus, daß 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 Einführung der Programmiersprache C++ noch wesentlich gewachsen. B. STROUSTRUP wählte bewußt C als Basis für sei ne objektorientierte Spracherweiterung. Eine vertiefte Kennt nis von C ist sicher ein idealer Einstieg in C++. Das Buch bietet in den Kapiteln 18 bis 20 einen elementaren Einstieg in die objektorientierte Programmierweise. v Vonvort Da auch James Gosling die C/C++-Syntax für seine Program miersprache JAVA gewählt hat, ist die C-Syntax zur univer sellen Ausdrucksweise geworden und hat die Pascal-Syntax längst verdrängt. Obwohl die Philosophie von JAVA eine ganze andere als die von C ist, kann man mit C-Kenntnissen JAVA-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, Zeichen ketten- 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, daß in C++ fast alle Operatoren durch Überla den weitere Bedeutungen erhalten können. Kapitel 10 beginnt mit der Rekursion als spezielle Pro gram miertechnik. Diese Techniken werden dann im Kapitel 15 fortgesetzt durch eine Diskussion weiterer Techniken wie VI Teile-und-Herrsche-, Backtracking- und Branch & Bound Methoden. In Kapitel 11 erfolgt die Behandlung der höheren Datentypen wie Aufzählungstypen, Verbunde, Strukturen und Bitfelder, Diese werden ergänzt durch die selbstdefinierten, 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 Ausgabe behandelt Kapitel 14. MS-DOS-spezifisch ist Kapitel 16, das einige Beispiele zur Systemprogrammierung zeigt. Den Abschluß 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 Ast ronomie. Sie zeigen, in welcher Vielfalt die Klassen - als selbstdefinierte Datentypen - in den Naturwissenschaften Anwendung finden. Den Abschluß 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. <vectot> 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/-dietmar VII Vorwort Die im Buch enthaltene Programme entsprechen weitgehend dem ANSI C++-Standard und sollten daher von allen gängi gen 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 Bitmap Grafiken ins Vektorformat umwandelte und auch die Microsoft Version der Grafikprogramme schrieb. Anzing, Juli 1999 Dietmar Herrmann (dietmar [email protected]) VIII Inhaltsverzeichnis 1 iiberblick............................................................................................ 1 1.1 Die Geschichte von C ............................................................... 1 1.2 C als Programmiersprache ........................................................ 2 1.3 C als universelle Syntax ............................................................ 5 1.4 Die Bibliotheksfunktionen ........................................................ 5 1.5 Aufbau eines C-Programms ...................................................... 6 1.6 Ein C-Programm ........................................................................ 7 2 Syntax .................................................................................................. 9 2.1 Zeichen ...................................................................................... 9 2.2 Bezeichner ............................................................................... 10 2.3 Schlüsselwörter ........................................................................ 12 2.4 Operatoren.............................................................................. 13 2.5 Konstanten ............................................................................... 15 2.6 Zeichenketten .......................................................................... 17 2.7 Kommentare ............................................................................ 17 2.8 Trennzeichen ...... ..................................................................... 18 2.9 Token..... ............ ................................ ............ ..... ..................... 18 2.10 Ausdrücke ................................................................................ 19 2.11 Anweisungen ........................................................................... 21 3 Einfache Datentypen ...................................................................... 23 3.1 Der Typ int .............................................................................. 23 3.2 Der Typ unsigned int .............................................................. 26 3.3 Der Typ char ........................................................................... 26 3.4 Der Typ unsigned char ........................................................... 28 3.5 Der Typ short int ..................................................................... 29 3.6 Der Typ float ........................................................................... 30 3.7 Der Typ long int ...................................................................... 33 3.8 Der Typ double ....................................................................... 35 3.9 Der Typ long double .............................................................. 41 3.10 Arithmetik ... . ... . . . . ... . . ... .......... . . . . . . . . . . . ... ... . ...... .. . . . . . . . . . . . . . . . . . . . . . . . .. 44 3.11 Der Cast-Operator ................................................................... 46 3.12 Die Eingabe mit scanfO .......................................................... 47 3.13 Übungen .................................................................................. 49 4 Kontrollstrukturen ......................................................................... 51 4.1 Die FOR-Schleife ..................................................................... 51 IX Inhaltsverzeichnis 4.2 Die WHILE-Schleife ................................................................. 54 4.3 Die DO-Schleife ...................................................................... 56 4.4 Die IF-Anweisung .................................................................... 59 4.5 Die SWITCH-Anweisung ......................................................... 60 4.6 Die BREAK-Anweisung ........................................................... 65 4.7 Die CONTINUE-Anweisung .................................................... 66 4.8 I?ie GOTO-Anweisung ............................................................ 66 4.9 Ubungen .................................................................................. 67 5 Reihungen und Zeichenketten ...................................................... 69 5.1 Reihungen............................................................................... 69 5.2 Zeichenketten .......................................................................... 71 5.3 Mehrdimensionale Reihungen ................................................ 72 5.4 Sortieren und Suchen in Listen ............................................... 73 5.5 Tabellen ................................................................................... 79 5.6 Mengen .................................................................................... 81 5.7 Umrechnung ins Binärsystem ................................................. 85 5.8 Polynome ................................................................................... 86 5.9 Matrizen ................................................................................... 88 5.10 Übungen .................................................................................. 90 6 Pointer .............................................................................................. 91 6.1 Was sind Pointer? .................................................................... 91 6.2 Pointer und Reihungen ........................................................... 96 6.3 Pointer-Arithmetik ............................ :. ..................................... 97 6.4 Pointer und Zeichenketten ................................................... 100 6.5 Pointer auf Pointer ................................................................ 106 6.6 Die Speicherverwaltung ........................................................ 108 6.7 Pointer auf Funktionen ......................................................... 113 6.8 Übungen ............................... ........................ ................... ...... 118 7 Funktionen ..................................................................................... 121 7.1 Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . ..... .. ........ ........ ... . . . . . . . . . . . . . . . . . .. ... . 121 7.2 Funktions-Prototypen ............................................................ 124 7.3 Mathematische Standardfunktionen ...................................... 126 7.4 Prozeduren ............................................................................ 129 7.5 Call by Reference .................................................................. 130 7.6 Stringfunktionen .................................................................... 134 7.7 Zeichenfunktionen ................................................................ 138 7.8 Übungen................................................................................ 140 8 Speicherklassen ............................................................................. 143 8.1 Die Speicherklasse auto(matic) ............................................. 143 8.2 Die Speicherklasse register ................................................... 145 x
Description: