C++ Programming


Deitel® Ser How To Program Series

C How to Program, 6/E

C++ How to Program, 7/E

Java How to Program, 8/E, Early Objects Version

Java How to Program, 8/E, Late Objects Version

Internet & World Wide Web How to Program, 4/E

Visual Basic® 2008 How to Program

Visual C#® 2008 How to Program, 3/E

Visual C++® 2008 How to Program, 2/E

Small Java™ How to Program, 6/E

Small C++ How to Program, 5/E

Simply Series Simply C++: An Application-Driven

Tutorial Approach

Simply Java™ Programming: An Application-Driven Tutorial Approach

Simply C#: An Application-Driven Tutorial Approach

Simply Visual Basic® 2008, 3/E: An Application-Driven Tutorial Approach

CourseSmart Web Books www.deitel.com/books/CourseSmart.html

C++ How to Program, 5/E, 6/E & 7/E

Java How to Program, 6/E, 7/E & 8/E

Simply C++: An Application-Driven Tutorial Approach

Simply Visual Basic 2008: An Application-Driven Tutorial Approach, 3/E

Small C++ How to Program, 5/E

Small Java How to Program, 6/E

Visual Basic® 2008 How to Program

Visual C#® 2008 How to Program, 3/E

ies Page

Deitel® Developer Series AJAX, Rich Internet Applications and

Web Development for Programmers

C++ for Programmers

C# 2008 for Programmers, 3/E

iPhone for Programmers: An App-Driven Approach

Java for Programmers

Javascript for Programmers

LiveLessons Video Learning Products www.deitel.com/books/LiveLessons/

Java Fundamentals Parts 1 and 2

C# Fundamentals Parts 1 and 2

C++ Fundamentals Parts 1 and 2

JavaScript Fundamentals Parts 1 and 2

To receive updates on Deitel publications, Resource Centers, training courses, partner offers and more, please register for the free Deitel® Buzz Online e-mail newsletter at: www.deitel.com/newsletter/subscribe.html

follow us on Twitter®


and Facebook®


To communicate with the authors, send e-mail to: [email protected]

For information on government and corporate Dive-Into® Series on-site seminars offered by Deitel & Associates, Inc. worldwide, visit: www.deitel.com/training/

or write to [email protected]

For continuing updates on Prentice Hall/Deitel publications visit: www.deitel.com www.pearsonhighered.com/deitel

Check out our Resource Centers for valuable web resources that will help you master Java, other important programming languages, software and Internet- and web-related topics: www.deitel.com/ResourceCenters.html

Library of Congress Cataloging-in-Publication Data On file

Vice President and Editorial Director, ECS: Marcia J. Horton Editor-in-Chief, Computer Science: Michael Hirsch Associate Editor: Carole Snyder Supervisor/Editorial Assistant: Dolores Mars Director of Team-Based Project Management: Vince O’Brien Senior Managing Editor: Scott Disanno Managing Editor: Robert Engelhardt A/V Production Editor: Greg Dulles Art Director: Kristine Carney Cover Design: Abbey S. Deitel, Harvey M. Deitel, Francesco Santalucia, Kristine Carney Interior Design: Harvey M. Deitel, Kristine Carney Manufacturing Manager: Alexis Heydt-Long Manufacturing Buyer: Lisa McDowell Director of Marketing: Margaret Waples Marketing Manager: Erin Davis

© 2010 by Pearson Education, Inc. Upper Saddle River, New Jersey 07458

The authors and publisher of this book have used their best efforts in preparing this book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The authors and pub- lisher make no warranty of any kind, expressed or implied, with regard to these programs or to the documentation contained in this book. The authors and publisher shall not be liable in any event for incidental or consequential dam- ages in connection with, or arising out of, the furnishing, performance, or use of these programs.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks and registered trademarks. Where those designations appear in this book, and Prentice Hall and the authors were aware of a trademark claim, the designations have been printed in initial caps or all caps. All product names mentioned remain trademarks or registered trademarks of their respective owners.

All rights reserved. No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher.

Printed in the United States of America

10 9 8 7 6 5 4 3 2 1

ISBN-10: 0-13-612356-2

ISBN-13: 978-0-13-612356-9

Pearson Education Ltd., London Pearson Education Australia Pty. Ltd., Sydney Pearson Education Singapore, Pte. Ltd. Pearson Education North Asia Ltd., Hong Kong Pearson Education Canada, Inc., Toronto Pearson Educación de Mexico, S.A. de C.V. Pearson Education–Japan, Tokyo Pearson Education Malaysia, Pte. Ltd. Pearson Education, Inc., Upper Saddle River, New Jersey

Upper Saddle River, New Jersey 07458

P. J. Deitel Deitel & Associates, Inc.

H. M. Deitel Deitel & Associates, Inc.

Trademarks DEITEL, the double-thumbs-up bug and DIVE INTO are registered trademarks of Deitel and Associates, Inc.

Microsoft, Visual C++, Internet Explorer and the Windows logo are either registered trademarks or trade- marks of Microsoft Corporation in the United States and/or other countries.

In Memory of Clifford Stephens:

Your friendship, bright smile and infectious laugh will be truly missed.

Paul and Harvey Deitel

Deitel Resource Centers Our Resource Centers focus on the vast amounts of free content available online. Find resources, downloads, tutorials, documentation, books, e-books, journals, articles, blogs, RSS feeds and more on many of today’s hottest programming and technology topics. For the most up-to-date list of our Resource Centers, visit:


Let us know what other Resource Centers you’d like to see! Also, please register for the free Deitel®

Buzz Online e-mail newsletter at:


Computer Science Functional Programming Regular Expressions

Programming ASP.NET 3.5 Adobe Flex Ajax Apex ASP.NET Ajax ASP.NET C C++ C++ Boost Libraries C++ Game Programming C# Code Search Engines and

Code Sites Computer Game

Programming CSS 2.1 Dojo Facebook Developer Plat-

form Flash 9 Functional Programming Java Java Certification and

Assessment Testing Java Design Patterns Java EE 5 Java SE 6 Java SE 7 (Dolphin)

Resource Center JavaFX JavaScript JSON Microsoft LINQ Microsoft Popfly .NET .NET 3.0 .NET 3.5 OpenGL Perl PHP Programming Projects Python Regular Expressions Ruby Ruby on Rails Silverlight

UML Visual Basic Visual C++ Visual Studio Team Sys-

tem Web 3D Technologies Web Services Windows Presentation

Foundation XHTML XML

Apple iPhone Objective-C Cocoa

Games and Game Programming

Computer Game Pro- gramming

Computer Games Mobile Gaming Sudoku

Internet Business Affiliate Programs Competitive Analysis Facebook Social Ads Google AdSense Google Analytics Google Services Internet Advertising Internet Business

Initiative Internet Public Relations Link Building Location-Based Services Online Lead Generation Podcasting Search Engine Optimiza-

tion Selling Digital Content Sitemaps Web Analytics Website Monetization YouTube and AdSense

Java Java Java Certification and

Assessment Testing

Java Design Patterns Java EE 5 Java SE 6 Java SE 7 (Dolphin)

Resource Center JavaFX

Microsoft ASP.NET ASP.NET 3.5 ASP.NET Ajax C# DotNetNuke (DNN) Internet Explorer 7 (IE7) Microsoft LINQ .NET .NET 3.0 .NET 3.5 SharePoint Silverlight Visual Basic Visual C++ Visual Studio Team

System Windows Presentation

Foundation Windows Vista Microsoft Popfly

Open Source & LAMP Stack

Apache DotNetNuke (DNN) Eclipse Firefox Linux MySQL Open Source Perl PHP Python Ruby

Software Apache DotNetNuke (DNN) Eclipse Firefox Internet Explorer 7 (IE7) Linux MySQL

Open Source Search Engines SharePoint Skype Web Servers Wikis Windows Vista

Web 2.0 Alert Services Attention Economy Blogging Building Web

Communities Community Generated

Content Facebook Developer

Platform Facebook Social Ads Google Base Google Video Google Web Toolkit

(GWT) Internet Video Joost Location-Based Services Mashups Microformats Recommender Systems RSS Social Graph Social Media Social Networking Software as a Service

(SaaS) Virtual Worlds Web 2.0 Web 3.0 Widgets

Dive Into® Web 2.0 eBook

Web 2 eBook

Other Topics Computer Games Computing Jobs Gadgets and Gizmos Ring Tones Sudoku

Appendices E through I are PDF documents posted online at the book’s Companion Website (located at www.pearsonhighered.com/deitel).

Preface xxi

1 Introduction to Computers, the Internet and the Web 1

1.1 Introduction 2 1.2 Computers: Hardware and Software 3 1.3 Computer Organization 4 1.4 Personal, Distributed and Client/Server Computing 5 1.5 The Internet and the World Wide Web 5 1.6 Machine Languages, Assembly Languages and High-Level Languages 6 1.7 History of C 7 1.8 C Standard Library 8 1.9 C++ 9 1.10 Java 9 1.11 Fortran, COBOL, Pascal and Ada 10 1.12 BASIC, Visual Basic, Visual C++, C# and .NET 10 1.13 Key Software Trend: Object Technology 11 1.14 Typical C Program Development Environment 12 1.15 Hardware Trends 14 1.16 Notes About C and This Book 15 1.17 Web Resources 16

2 Introduction to C Programming 23 2.1 Introduction 24 2.2 A Simple C Program: Printing a Line of Text 24 2.3 Another Simple C Program: Adding Two Integers 28 2.4 Memory Concepts 33 2.5 Arithmetic in C 34 2.6 Decision Making: Equality and Relational Operators 38

3 Structured Program Development in C 54 3.1 Introduction 55 3.2 Algorithms 55


x Contents

3.3 Pseudocode 55 3.4 Control Structures 56 3.5 The if Selection Statement 58 3.6 The if…else Selection Statement 59 3.7 The while Repetition Statement 63 3.8 Formulating Algorithms Case Study 1: Counter-Controlled Repetition 64 3.9 Formulating Algorithms with Top-Down, Stepwise Refinement

Case Study 2: Sentinel-Controlled Repetition 66 3.10 Formulating Algorithms with Top-Down, Stepwise Refinement

Case Study 3: Nested Control Structures 73 3.11 Assignment Operators 77 3.12 Increment and Decrement Operators 78

4 C Program Control 97 4.1 Introduction 98 4.2 Repetition Essentials 98 4.3 Counter-Controlled Repetition 99 4.4 for Repetition Statement 100 4.5 for Statement: Notes and Observations 103 4.6 Examples Using the for Statement 103 4.7 switch Multiple-Selection Statement 107 4.8 do…while Repetition Statement 113 4.9 break and continue Statements 114 4.10 Logical Operators 116 4.11 Confusing Equality (==) and Assignment (=) Operators 119 4.12 Structured Programming Summary 121

5 C Functions 140 5.1 Introduction 141 5.2 Program Modules in C 141 5.3 Math Library Functions 142 5.4 Functions 144 5.5 Function Definitions 144 5.6 Function Prototypes 148 5.7 Function Call Stack and Activation Records 151 5.8 Headers 151 5.9 Calling Functions By Value and By Reference 152 5.10 Random Number Generation 153 5.11 Example: A Game of Chance 158 5.12 Storage Classes 161 5.13 Scope Rules 164 5.14 Recursion 167 5.15 Example Using Recursion: Fibonacci Series 170 5.16 Recursion vs. Iteration 174

Contents xi

6 C Arrays 195 6.1 Introduction 196 6.2 Arrays 196 6.3 Defining Arrays 198 6.4 Array Examples 198 6.5 Passing Arrays to Functions 212 6.6 Sorting Arrays 216 6.7 Case Study: Computing Mean, Median and Mode Using Arrays 218 6.8 Searching Arrays 223 6.9 Multiple-Subscripted Arrays 229

7 C Pointers 253 7.1 Introduction 254 7.2 Pointer Variable Definitions and Initialization 254 7.3 Pointer Operators 255 7.4 Passing Arguments to Functions by Reference 257 7.5 Using the const Qualifier with Pointers 261 7.6 Bubble Sort Using Call-by-Reference 267 7.7 sizeof Operator 270 7.8 Pointer Expressions and Pointer Arithmetic 273 7.9 Relationship between Pointers and Arrays 275 7.10 Arrays of Pointers 280 7.11 Case Study: Card Shuffling and Dealing Simulation 280 7.12 Pointers to Functions 285

8 C Characters and Strings 309 8.1 Introduction 310 8.2 Fundamentals of Strings and Characters 310 8.3 Character-Handling Library 312 8.4 String-Conversion Functions 317 8.5 Standard Input/Output Library Functions 322 8.6 String-Manipulation Functions of the String-Handling Library 326 8.7 Comparison Functions of the String-Handling Library 329 8.8 Search Functions of the String-Handling Library 331 8.9 Memory Functions of the String-Handling Library 337 8.10 Other Functions of the String-Handling Library 341

9 C Formatted Input/Output 356 9.1 Introduction 357 9.2 Streams 357 9.3 Formatting Output with printf 357 9.4 Printing Integers 358 9.5 Printing Floating-Point Numbers 359

xii Contents

9.6 Printing Strings and Characters 361 9.7 Other Conversion Specifiers 362 9.8 Printing with Field Widths and Precision 363 9.9 Using Flags in the printf Format Control String 366 9.10 Printing Literals and Escape Sequences 368 9.11 Reading Formatted Input with scanf 369

10 C Structures, Unions, Bit Manipulations and Enumerations 382

10.1 Introduction 383 10.2 Structure Definitions 383 10.3 Initializing Structures 386 10.4 Accessing Structure Members 386 10.5 Using Structures with Functions 388 10.6 typedef 388 10.7 Example: High-Performance Card Shuffling and Dealing Simulation 389 10.8 Unions 391 10.9 Bitwise Operators 394 10.10 Bit Fields 403 10.11 Enumeration Constants 406

11 C File Processing 417 11.1 Introduction 418 11.2 Data Hierarchy 418 11.3 Files and Streams 420 11.4 Creating a Sequential-Access File 421 11.5 Reading Data from a Sequential-Access File 426 11.6 Random-Access Files 430 11.7 Creating a Random-Access File 431 11.8 Writing Data Randomly to a Random-Access File 433 11.9 Reading Data from a Random-Access File 436 11.10 Case Study: Transaction-Processing Program 437

12 C Data Structures 454 12.1 Introduction 455 12.2 Self-Referential Structures 456 12.3 Dynamic Memory Allocation 456 12.4 Linked Lists 458 12.5 Stacks 466 12.6 Queues 472 12.7 Trees 478

13 C Preprocessor 495 13.1 Introduction 496

Contents xiii

13.2 #include Preprocessor Directive 496 13.3 #define Preprocessor Directive: Symbolic Constants 496 13.4 #define Preprocessor Directive: Macros 497 13.5 Conditional Compilation 499 13.6 #error and #pragma Preprocessor Directives 500 13.7 # and ## Operators 500 13.8 Line Numbers 501 13.9 Predefined Symbolic Constants 501 13.10 Assertions 502

14 Other C Topics 507 14.1 Introduction 508 14.2 Redirecting I/O 508 14.3 Variable-Length Argument Lists 509 14.4 Using Command-Line Arguments 511 14.5 Notes on Compiling Multiple-Source-File Programs 512 14.6 Program Termination with exit and atexit 514 14.7 volatile Type Qualifier 515 14.8 Suffixes for Integer and Floating-Point Constants 516 14.9 More on Files 516 14.10 Signal Handling 518 14.11 Dynamic Memory Allocation: Functions calloc and realloc 520 14.12 Unconditional Branching with goto 521

15 C++ as a Better C; Introducing Object Technology 528

15.1 Introduction 529 15.2 C++ 529 15.3 A Simple Program: Adding Two Integers 530 15.4 C++ Standard Library 532 15.5 Header Files 533 15.6 Inline Functions 535 15.7 References and Reference Parameters 537 15.8 Empty Parameter Lists 542 15.9 Default Arguments 542 15.10 Unary Scope Resolution Operator 544 15.11 Function Overloading 545 15.12 Function Templates 548 15.13 Introduction to Object Technology and the UML 551 15.14 Wrap-Up 554

16 Introduction to Classes and Objects 560 16.1 Introduction 561 16.2 Classes, Objects, Member Functions and Data Members 561

xiv Contents

16.3 Defining a Class with a Member Function 562 16.4 Defining a Member Function with a Parameter 566 16.5 Data Members, set Functions and get Functions 569 16.6 Initializing Objects with Constructors 576 16.7 Placing a Class in a Separate File for Reusability 579 16.8 Separating Interface from Implementation 583 16.9 Validating Data with set Functions 589 16.10 Wrap-Up 594

17 Classes: A Deeper Look, Part 1 601 17.1 Introduction 602 17.2 Time Class Case Study 603 17.3 Class Scope and Accessing Class Members 609 17.4 Separating Interface from Implementation 611 17.5 Access Functions and Utility Functions 612 17.6 Time Class Case Study: Constructors with Default Arguments 615 17.7 Destructors 620 17.8 When Constructors and Destructors are Called 621 17.9 Time Class Case Study: A Subtle Trap—Returning a Reference to a

private Data Member 624 17.10 Default Memberwise Assignment 627 17.11 Wrap-Up 629

18 Classes: A Deeper Look, Part 2 635 18.1 Introduction 636 18.2 const (Constant) Objects and const Member Functions 636 18.3 Composition: Objects as Members of Classes 645 18.4 friend Functions and friend Classes 651 18.5 Using the this Pointer 654 18.6 static Class Members 659 18.7 Data Abstraction and Information Hiding 664 18.8 Wrap-Up 666

19 Operator Overloading 672 19.1 Introduction 673 19.2 Fundamentals of Operator Overloading 674 19.3 Restrictions on Operator Overloading 675 19.4 Operator Functions as Class Members vs. Global Function 676 19.5 Overloading Stream Insertion and Stream Extraction Operators 678 19.6 Overloading Unary Operators 681 19.7 Overloading Binary Operators 682 19.8 Dynamic Memory Management 682 19.9 Case Study: Array Class 684 19.10 Converting between Types 696

Contents xv

19.11 Building a String Class 697 19.12 Overloading ++ and -- 698 19.13 Case Study: A Date Class 700 19.14 Standard Library Class string 704 19.15 explicit Constructors 708 19.16 Proxy Classes 711 19.17 Wrap-Up 715

20 Object-Oriented Programming: Inheritance 727 20.1 Introduction 728 20.2 Base Classes and Derived Classes 729 20.3 protected Members 732 20.4 Relationship between Base Classes and Derived Classes 732

20.4.1 Creating and Using a CommissionEmployee Class 733 20.4.2 Creating a BasePlusCommissionEmployee Class Without

Using Inheritance 738 20.4.3 Creating a CommissionEmployee–BasePlusCommissionEmployee

Inheritance Hierarchy 743 20.4.4 CommissionEmployee–BasePlusCommissionEmployee

Inheritance Hierarchy Using protected Data 748 20.4.5 CommissionEmployee–BasePlusCommissionEmployee

Inheritance Hierarchy Using private Data 755 20.5 Constructors and Destructors in Derived Classes 762 20.6 public, protected and private Inheritance 770 20.7 Software Engineering with Inheritance 771 20.8 Wrap-Up 772

21 Object-Oriented Programming: Polymorphism 778 21.1 Introduction 779 21.2 Polymorphism Examples 780 21.3 Relationships Among Objects in an Inheritance Hierarchy 781

21.3.1 Invoking Base-Class Functions from Derived-Class Objects 782 21.3.2 Aiming Derived-Class Pointers at Base-Class Objects 789 21.3.3 Derived-Class Member-Function Calls via Base-Class Pointers 790 21.3.4 Virtual Functions 792 21.3.5 Summary of the Allowed Assignments Between Base-Class

and Derived-Class Objects and Pointers 798 21.4 Type Fields and switch Statements 799 21.5 Abstract Classes and Pure virtual Functions 799 21.6 Case Study: Payroll System Using Polymorphism 801

21.6.1 Creating Abstract Base Class Employee 803 21.6.2 Creating Concrete Derived Class SalariedEmployee 806 21.6.3 Creating Concrete Derived Class HourlyEmployee 808 21.6.4 Creating Concrete Derived Class CommissionEmployee 811

xvi Contents

21.6.5 Creating Indirect Concrete Derived Class BasePlusCommissionEmployee 813

21.6.6 Demonstrating Polymorphic Processing 814 21.7 (Optional) Polymorphism, Virtual Functions and Dynamic Binding

“Under the Hood” 818 21.8 Case Study: Payroll System Using Polymorphism and Runtime Type

Information with Downcasting, dynamic_cast, typeid and type_info 822 21.9 Virtual Destructors 826 21.10 Wrap-Up 826

22 Templates 832 22.1 Introduction 833 22.2 Function Templates 833 22.3 Overloading Function Templates 837 22.4 Class Templates 837 22.5 Nontype Parameters and Default Types for Class Templates 844 22.6 Notes on Templates and Inheritance 845 22.7 Notes on Templates and Friends 845 22.8 Notes on Templates and static Members 846 22.9 Wrap-Up 846

23 Stream Input/Output 851 23.1 Introduction 852 23.2 Streams 853

23.2.1 Classic Streams vs. Standard Streams 853 23.2.2 iostream Library Header Files 854 23.2.3 Stream Input/Output Classes and Objects 854

23.3 Stream Output 857 23.3.1 Output of char * Variables 857 23.3.2 Character Output Using Member Function put 857

23.4 Stream Input 858 23.4.1 get and getline Member Functions 858 23.4.2 istream Member Functions peek, putback and ignore 861 23.4.3 Type-Safe I/O 861

23.5 Unformatted I/O Using read, write and gcount 861 23.6 Introduction to Stream Manipulators 862

23.6.1 Integral Stream Base: dec, oct, hex and setbase 863 23.6.2 Floating-Point Precision (precision, setprecision) 864 23.6.3 Field Width (width, setw) 865 23.6.4 User-Defined Output Stream Manipulators 866

23.7 Stream Format States and Stream Manipulators 868 23.7.1 Trailing Zeros and Decimal Points (showpoint) 868 23.7.2 Justification (left, right and internal) 869 23.7.3 Padding (fill, setfill) 871 23.7.4 Integral Stream Base (dec, oct, hex, showbase) 872

Contents xvii

23.7.5 Floating-Point Numbers; Scientific and Fixed Notation (scientific, fixed) 873

23.7.6 Uppercase/Lowercase Control (uppercase) 874 23.7.7 Specifying Boolean Format (boolalpha) 874 23.7.8 Setting and Resetting the Format State via Member

Function flags 875 23.8 Stream Error States 877 23.9 Tying an Output Stream to an Input Stream 879 23.10 Wrap-Up 879

24 Exception Handling 889 24.1 Introduction 890 24.2 Exception-Handling Overview 891 24.3 Example: Handling an Attempt to Divide by Zero 891 24.4 When to Use Exception Handling 897 24.5 Rethrowing an Exception 898 24.6 Exception Specifications 900 24.7 Processing Unexpected Exceptions 901 24.8 Stack Unwinding 901 24.9 Constructors, Destructors and Exception Handling 903 24.10 Exceptions and Inheritance 904 24.11 Processing new Failures 904 24.12 Class auto_ptr and Dynamic Memory Allocation 907 24.13 Standard Library Exception Hierarchy 909 24.14 Other Error-Handling Techniques 911 24.15 Wrap-Up 912

A Operator Precedence Charts 919

B ASCII Character Set 923

C Number Systems 924 C.1 Introduction 925 C.2 Abbreviating Binary Numbers as Octal and Hexadecimal Numbers 928 C.3 Converting Octal and Hexadecimal Numbers to Binary Numbers 929 C.4 Converting from Binary, Octal or Hexadecimal to Decimal 929 C.5 Converting from Decimal to Binary, Octal or Hexadecimal 930 C.6 Negative Binary Numbers: Two’s Complement Notation 932

D Game Programming: Solving Sudoku 937 D.1 Introduction 937 D.2 Deitel Sudoku Resource Center 938 D.3 Solution Strategies 938

xviii Contents

D.4 Programming Sudoku Puzzle Solvers 942 D.5 Generating New Sudoku Puzzles 943 D.6 Conclusion 945

Appendices on the Web 946 Appendices E through I are PDF documents posted online at the book’s Companion Website (located at www.pearsonhighered.com/deitel).

E Game Programming with the Allegro C Library I E.1 Introduction II E.2 Installing Allegro II E.3 A Simple Allegro Program III E.4 Simple Graphics: Importing Bitmaps and Blitting IV E.5 Animation with Double Buffering IX E.6 Importing and Playing Sounds XVI E.7 Keyboard Input XX E.8 Fonts and Displaying Text XXV E.9 Implementing the Game of Pong XXXI E.10 Timers in Allegro XXXVII E.11 The Grabber and Allegro Datafiles XLII E.12 Other Allegro Capabilities LI E.13 Allegro Resource Center LII

F Sorting: A Deeper Look LVIII F.1 Introduction LIX F.2 Big O Notation LIX F.3 Selection Sort LX F.4 Insertion Sort LXIV F.5 Merge Sort LXVII

G Introduction to C99 LXXVIII G.1 Introduction LXXIX G.2 Support for C99 LXXIX G.3 New C99 Headers LXXX G.4 // Comments LXXX G.5 Mixing Declarations and Executable Code LXXXI G.6 Declaring a Variable in a for Statement Header LXXXII G.7 Designated Initializers and Compound Literals LXXXIV G.8 Type bool LXXXVII G.9 Implicit int in Function Declarations LXXXVIII G.10 Complex Numbers LXXXIX G.11 Variable-Length Arrays XC

Contents xix

G.12 The snprintf Function: Helping Avoid Hacker Attacks XCIII G.13 Additions to the Preprocessor XCV G.14 Other C99 Features XCVI G.15 Web Resources XCIX

H Using the Visual Studio Debugger CIV H.1 Introduction CV H.2 Breakpoints and the Continue Command CV H.3 Locals and Watch Windows CIX H.4 Controlling Execution Using the Step Into, Step Over, Step Out

and Continue Commands CXII H.5 Autos Window CXIV H.6 Wrap-Up CXVI

I Using the GNU Debugger CXVIII I.1 Introduction CXIX I.2 Breakpoints and the run, stop, continue and print Commands CXIX I.3 print and set Commands CXXIV I.4 Controlling Execution Using the step, finish and next Commands CXXVI I.5 watch Command CXXVIII I.6 Wrap-Up CXXX

Index 947

This page intentionally left blank

Welcome to the C programming language—and to C++, too! This book presents leading- edge computing technologies for students, instructors and software development profes- sionals.

At the heart of the book is the Deitel signature “live-code approach.” Concepts are presented in the context of complete working programs, rather than in code snippets. Each code example is immediately followed by one or more sample executions. All the source code is available at www.deitel.com/books/chtp6/.

We believe that this book and its support materials will give you an informative, inter- esting, challenging and entertaining introduction to C.

As you read the book, if you have questions, send an e-mail to [email protected]; we’ll respond promptly. For updates on this book and its supporting C and C++ software, and for the latest news on all Deitel publications and services, visit www.deitel.com.

New and Updated Features Here are the updates we’ve made for C How to Program, 6/e:

• “Making a Difference” Exercises Set. We encourage you to use computers and the Internet to research and solve problems that really matter. These new exercises are meant to increase awareness of important issues the world is facing. We hope you’ll approach them with your own values, politics and beliefs.

• Tested All Code on Windows and Linux. We’ve tested every program (the exam- ples and the exercises) using both Visual C++ 2008 and GNU GCC 4.3. The code examples and exercise code solutions were also tested using Visual Studio 2010 Beta.

• New Design. The book has a new interior design that graphically serves to orga- nize, clarify and highlight the information, and enhances the book’s pedagogy.

• Improved Terminology Sections. We’ve added page numbers for the defining oc- currences of all terms in the terminology lists for easy reference.

• Updated Coverage of C++ and Object-Oriented Programming. We updated Chapters 15–24 on object-oriented programming in C++ with material from our just published C++ How to Program, 7/e.

• Titled Programming Exercises. We’ve titled all the programming exercises. This helps instructors tune assignments for their classes.

• New Web Appendices. Chapters 15–17 from the previous edition are now search- able PDF Appendices E–G, available on the Companion Website (see the access card at the front of the book).


xxii Preface

• New Debugger Appendices. We also added new debugging appendices for Visual C++® 2008 and GNU gdb.

• Order of Evaluation. We added cautions about order of evaluation issues.

• We replaced all uses of gets (from <stdio.h>) with fgets, because gets is now deprecated.

• Additional Exercises. We added more function pointer exercises. We also added the Fibonacci exercise project that improves the Fibonacci recursion example (tail recursion).

• Secure C Programming Resource Center. We’ve posted a new Secure C Program- ming Resource Center at www.deitel.com/SecureC/. We’ve also added notes about secure C programming to the introductions in Chapter 7, Pointers, and Chapter 8, Strings.

• Game Programming with Allegro. We updated the chapter on game program- ming with the Allegro C library. In particular, we added instructions on installing the Allegro libraries for use with Visual C++® 2008 and GNU GCC 4.3.

• Coverage of the C99 Standard. We updated and enhanced the detailed appendix on C99, which was reviewed by John Benito, Convener of ISO WG14—the Working Group responsible for the C Programming Language Standard. Each C99 concept is now keyed to the section where it can be taught earlier in the book. C99 is not incorporated throughout the book because Microsoft does not yet support it and a large percentage of C courses use Microsoft's Visual C++®

compiler. For additional information, check out the C99 Standard section in our C Resource center at www.deitel.com/C/. You'll find features of C99, articles from experts, the differences between Standard C and …