HOW TO PROGRAM EIGHTH EDITION GLOBAL EDITION with an introduction to C++ This page intentionally left blank HOW TO PROGRAM EIGHTH EDITION GLOBAL EDITION with an introduction to C++ Paul Deitel Deitel & Associates, Inc. Harvey Deitel Deitel & Associates, Inc. Global Edition contributions by Piyali Sengupta Boston Columbus Hoboken Indianapolis New York San Francisco Amsterdam Cape Town Dubai London Madrid Milan Munich Paris Montreal ˜ Paulo Sydney Hong Kong Seoul Singapore Taipei Tokyo Toronto Delhi Mexico City Sao Vice President and Editorial Director, ECS: Marcia J. Horton Executive Editor: Tracy Johnson (Dunkelberger) Editorial Assistant: Kelsey Loanes Assistant Acquisitions Editor, Global Editions: Aditee Agarwal Program Manager: Carole Snyder Project Manager: Robert Engelhardt Project Editor, Global Editions: K.
Neelakantan Media Team Lead: Steve Wright R&P Manager: Rachel Youdelman R&P Senior Project Manager: William Opaluch Senior Operations Specialist: Maura Zaldivar-Garcia Senior Manufacturing Controller, Global Editions: Kay Holman Inventory Manager: Bruce Boundy Marketing Manager: Demetrius Hall Product Marketing Manager: Bram Van Kempen Media Production Manager, Global Editions: Vikram Kumar Marketing Assistant: Jon Bryant Cover Designer: Chuti Prasertsith / Michael Rutkowski / Marta Samsel Cover Art: © Igoror / Shutterstock Pearson Education Limited Edinburgh Gate Harlow Essex CM20 2JE England and Associated Companies throughout the world Visit us on the World Wide Web at: www.com © Pearson Education Limited 2016 The rights of Paul Deitel and Harvey Deitel to be identified as the authors of this work have been asserted by them in accordance with the Copyright, Designs and Patents Act 1988. Authorized adaptation from the United States edition, entitled C How to Program: with an introduction to C++,8st edition, ISBN 978-0-13-397689-2, by Paul Deitel and Harvey Deitel published by Pearson Education © 2016. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without either the prior written permission of the publisher or a license permitting restricted copying in the United Kingdom issued by the Copyright Licensing Agency Ltd, Saffron House, 6–10 Kirby Street, London EC1N 8TS.
All trademarks used herein are the property of their respective owners. The use of any trademark in this text does not vest in the author or publisher any trademark ownership rights in such trademarks, nor does the use of such trademarks imply any affiliation with or endorsement of this book by such owners. British Library Cataloguing-in-Publication Data A catalogue record for this book is available from the British Library 10 9 8 7 6 5 4 3 2 1 ISBN 10: 1-292-11097-X ISBN 13: 978-1-292-11097-4 Typeset by GEX Publishing Services Printed in Malaysia In memory of Dennis Ritchie, creator of the C programming language and co-creator of the UNIX operating system. Paul and Harvey Deitel Trademarks DEITEL, the double-thumbs-up bug and DIVE INTO are registered trademarks of Deitel and Associates, Inc.
Apple, Xcode, Swift, Objective-C, iOS and OS X are trademarks or registered trademarks of Apple, Inc. Java is a registered trademark of Oracle and/or its affiliates. Microsoft and/or its respective suppliers make no representations about the suitability of the information contained in the documents and related graphics published as part of the services for any purpose. All such documents and related graphics are provided “as is” without warranty of any kind.
Microsoft and/ or its respective suppliers hereby disclaim all warranties and conditions with regard to this information, including all warranties and conditions of merchantability, whether express, implied or statutory, fitness for a particular purpose, title and non-infringement. In no event shall Microsoft and/or its respective sup- pliers be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of information available from the services. The documents and related graphics contained herein could include technical inaccuracies or typograph- ical errors. Changes are periodically added to the information herein.
Microsoft and/or its respective sup- pliers may make improvements and/or changes in the product(s) and/or the program(s) described herein at any time. Partial screen shots may be viewed in full within the software version specified. Other names may be trademarks of their respective owners. Contents Appendices F, G and H are PDF documents posted online at the book’s Companion Website (located at www.
Preface 23 1 Introduction to Computers, the Internet and the Web 33 1.2 Hardware and Software 35 1.4 Machine Languages, Assembly Languages and High-Level Languages 40 1.5 The C Programming Language 41 1.7 C++ and Other C-Based Languages 43 1.1 The Automobile as an Object 45 1.2 Methods and Classes 45 1.5 Messages and Method Calls 46 1.6 Attributes and Instance Variables 46 1.7 Encapsulation and Information Hiding 46 1.9 Typical C Program-Development Environment 47 1.1 Phase 1: Creating a Program 48 1.2 Phases 2 and 3: Preprocessing and Compiling a C Program 48 1.6 Problems That May Occur at Execution Time 49 1.7 Standard Input, Standard Output and Standard Error Streams 49 1.10 Test-Driving a C Application in Windows, Linux and Mac OS X 49 1.1 Running a C Application from the Windows Command Prompt 50 1.2 Running a C Application Using GNU C with Linux 53 8 Contents 1.3 Running a C Application Using the Teminal on Mac OS X 56 1.1 Windows—A Proprietary Operating System 59 1.2 Linux—An Open-Source Operating System 59 1.3 Apple’s Mac OS X; Apple’s iOS for iPhone®, iPad® and iPod Touch® Devices 60 1.12 The Internet and World Wide Web 61 1.1 The Internet: A Network of Networks 61 1.2 The World Wide Web: Making the Internet User-Friendly 61 1.5 The Internet of Things 64 1.13 Some Key Software Terminology 64 1.14 Keeping Up-to-Date with Information Technologies 66 2 Introduction to C Programming 71 2.2 A Simple C Program: Printing a Line of Text 72 2.3 Another Simple C Program: Adding Two Integers 76 2.6 Decision Making: Equality and Relational Operators 85 2.7 Secure C Programming 89 3 Structured Program Development in C 101 3.5 The if Selection Statement 105 3.6 The if…else Selection Statement 106 3.7 The while Iteration Statement 110 3.8 Formulating Algorithms Case Study 1: Counter-Controlled Iteration 111 3.9 Formulating Algorithms with Top-Down, Stepwise Refinement Case Study 2: Sentinel-Controlled Iteration 114 3.10 Formulating Algorithms with Top-Down, Stepwise Refinement Case Study 3: Nested Control Statements 120 3.12 Increment and Decrement Operators 125 3.13 Secure C Programming 127 4 C Program Control 145 4.3 Counter-Controlled Iteration 147 4.4 for Iteration Statement 148 4.5 for Statement: Notes and Observations 151 4.6 Examples Using the for Statement 152 4.7 switch Multiple-Selection Statement 155 4.8 do…while Iteration Statement 161 4.9 break and continue Statements 162 4.11 Confusing Equality (==) and Assignment (=) Operators 167 4.12 Structured Programming Summary 169 4.13 Secure C Programming 174 5 C Functions 189 5.2 Modularizing Programs in C 190 5.3 Math Library Functions 191 5.6 Function Prototypes: A Deeper Look 198 5.7 Function Call Stack and Stack Frames 200 5.9 Passing Arguments By Value and By Reference 205 5.10 Random Number Generation 206 5.11 Example: A Game of Chance; Introducing enum 210 5.15 Example Using Recursion: Fibonacci Series 222 5.17 Secure C Programming 227 6 C Arrays 246 6.1 Defining an Array and Using a Loop to Set the Array’s Element Values 249 6.2 Initializing an Array in a Definition with an Initializer List 250 6.3 Specifying an Array’s Size with a Symbolic Constant and Initializing Array Elements with Calculations 252 10 Contents 6.4 Summing the Elements of an Array 253 6.5 Using Arrays to Summarize Survey Results 254 6.6 Graphing Array Element Values with Histograms 256 6.7 Rolling a Die 60,000,000 Times and Summarizing the Results in an Array 257 6.5 Using Character Arrays to Store and Manipulate Strings 257 6.1 Initializing a Character Array with a String 258 6.2 Initializing a Character Array with an Intializer List of Characters 258 6.3 Accessing the Characters in a String 258 6.4 Inputting into a Character Array 258 6.5 Outputting a Character Array That Represents a String 259 6.6 Demonstrating Character Arrays 259 6.6 Static Local Arrays and Automatic Local Arrays 260 6.7 Passing Arrays to Functions 262 6.9 Case Study: Computing Mean, Median and Mode Using Arrays 268 6.1 Searching an Array with Linear Search 273 6.2 Searching an Array with Binary Search 274 6.1 Illustrating a Double-Subcripted Array 278 6.2 Initializing a Double-Subcripted Array 279 6.3 Setting the Elements in One Row 281 6.4 Totaling the Elements in a Two-Dimensional Array 281 6.5 Two-Dimensonal Array Manipulations 282 6.12 Variable-Length Arrays 285 6.13 Secure C Programming 288 7 C Pointers 306 7.2 Pointer Variable Definitions and Initialization 308 7.4 Passing Arguments to Functions by Reference 311 7.5 Using the const Qualifier with Pointers 315 7.1 Converting a String to Uppercase Using a Non-Constant Pointer to Non-Constant Data 316 7.2 Printing a String One Character at a Time Using a Non-Constant Pointer to Constant Data 317 7.3 Attempting to Modify a Constant Pointer to Non-Constant Data 319 7.4 Attempting to Modify a Constant Pointer to Constant Data 320 7.6 Bubble Sort Using Pass-by-Reference 321 7.8 Pointer Expressions and Pointer Arithmetic 327 7.1 Allowed Operators for Pointer Arithmetic 327 7.2 Aiming a Pointer at an Array 327 Contents 11 7.3 Adding an Integer to a Pointer 328 7.4 Subtracting an Integer from a Pointer 328 7.5 Incrementing and Decrementing a Pointer 328 7.6 Subtracting One Pointer from Another 329 7.7 Assigning Pointers to One Another 329 7.8 Pointer to void 329 7.9 Relationship between Pointers and Arrays 330 7.1 Pointer/Offset Notation 330 7.2 Pointer/Index Notation 331 7.3 Cannot Modify an Array Name with Pointer Arithmetic 331 7.4 Demonstrating Pointer Indexing and Offsets 331 7.5 String Copying with Arrays and Pointers 332 7.10 Arrays of Pointers 334 7.11 Case Study: Card Shuffling and Dealing Simulation 335 7.12 Pointers to Functions 340 7.1 Sorting in Ascending or Descending Order 340 7.2 Using Function Pointers to Create a Menu-Driven System 343 7.13 Secure C Programming 345 8 C Characters and Strings 365 8.2 Fundamentals of Strings and Characters 366 8.3 Character-Handling Library 368 8.1 Functions isdigit, isalpha, isalnum and isxdigit 368 8.2 Functions islower, isupper, tolower and toupper 371 8.3 Functions isspace, iscntrl, ispunct, isprint and isgraph 372 8.4 String-Conversion Functions 374 8.5 Standard Input/Output Library Functions 376 8.1 Functions fgets and putchar 377 8.6 String-Manipulation Functions of the String-Handling Library 381 8.1 Functions strcpy and strncpy 382 8.2 Functions strcat and strncat 382 8.7 Comparison Functions of the String-Handling Library 383 8.8 Search Functions of the String-Handling Library 385 8.4 Function strrchr 388 12 Contents 8.9 Memory Functions of the String-Handling Library 391 8.10 Other Functions of the String-Handling Library 395 8.11 Secure C Programming 397 9 C Formatted Input/Output 409 9.3 Formatting Output with printf 410 9.5 Printing Floating-Point Numbers 412 9.1 Conversion Specifiers e, E and f 413 9.2 Conversion Specifiers g and G 413 9.3 Demonstrating Floating-Point Conversion Specifiers 414 9.6 Printing Strings and Characters 414 9.7 Other Conversion Specifiers 415 9.8 Printing with Field Widths and Precision 416 9.1 Specifying Field Widths for Printing Integers 416 9.2 Specifying Precisions for Integers, Floating-Point Numbers and Strings 417 9.3 Combining Field Widths and Precisions 418 9.9 Using Flags in the printf Format Control String 419 9.1 Right and Left Justification 419 9.2 Printing Positive and Negative Numbers with and without the + Flag 420 9.3 Using the Space Flag 420 9.4 Using the # Flag 421 9.5 Using the 0 Flag 421 9.10 Printing Literals and Escape Sequences 422 9.11 Reading Formatted Input with scanf 422 9.2 scanf Conversion Specifiers 423 9.3 Reading Integers with scanf 424 9.4 Reading Floating-Point Numbers with scanf 425 9.5 Reading Characters and Strings with scanf 425 9.6 Using Scan Sets with scanf 426 Contents 13 9.7 Using Field Widths with scanf 427 9.8 Skipping Characters in an Input Stream 428 9.12 Secure C Programming 429 10 C Structures, Unions, Bit Manipulation and Enumerations 436 10.