Table of Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . xi How to Use This Study Guide . . . . . . . . . . . . . . . . . xi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . xi 1 Introducing C . . . . . . . . . . . . . . . . . . . . . 1 1.1 Chapter Summary . . . . . . . . . . . . . . . . . . 1 1.2 C and Other Languages . . . . . . . . . . . . . . . 1 1.2.1 C and Pascal . . . . . . . . . . . . . . . 1 1.2.2 C and Fortran . . . . . . . . . . . . . . . 2 1.2.3 C and BASIC . . . . . . . . . . . . . . . . 2 1.3 Exercises . . . . . . . . . . . . . . . . . . . . . 4 2 C Fundamentals . . . . . . . . . . . . . . . . . . . . . 7 2.1 Chapter Summary . . . . . . . . . . . . . . . . . . 7 2.2 Solved Exercises . . . . . . . . . . . . . . . . . 9 2.2.1 Solved Exercise 1: Calculating Net Pay . . . 9 2.3 Programming Exercises . . . . . . . . . . . . . . . 12 3 Formatted Input/Output . . . . . . . . . . . . . . . . . 15 3.1 Chapter Summary . . . . . . . . . . . . . . . . . . 15 3.1.1 The printf function . . . . . . . . . . . . 15 3.1.2 The scanf function . . . . . . . . . . . . . 15 3.2 Solved Exercises . . . . . . . . . . . . . . . . . 16 3.2.1 Solved Exercise 1: Calculating Travel Time . 16 3.3 Programming Exercises . . . . . . . . . . . . . . . 20 4 Expressions . . . . . . . . . . . . . . . . . . . . . . 23 4.1 Chapter Summary . . . . . . . . . . . . . . . . . . 23 4.2 Questions and Answers . . . . . . . . . . . . . . . 25 4.3 Programming Exercises . . . . . . . . . . . . . . . 26 5 Selection Statements . . . . . . . . . . . . . . . . . . 29 5.1 Chapter Summary . . . . . . . . . . . . . . . . . . 29 5.1.1 Logical Expressions . . . . . . . . . . . . 29 5.1.2 The if Statement . . . . . . . . . . . . . . 29 5.1.3 The switch Statement . . . . . . . . . . . . 31 5.2 Solved Exercises . . . . . . . . . . . . . . . . . 31 5.2.1 Solved Exercise 1: A Grading Program . . . . 31 5.3 Programming Exercises . . . . . . . . . . . . . . . 37 6 Loops . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.1 Chapter Summary . . . . . . . . . . . . . . . . . . 41 6.1.1 The while Statement . . . . . . . . . . . . 41 6.1.2 The do Statement . . . . . . . . . . . . . . 41 6.1.3 The for Statement . . . . . . . . . . . . . 42 6.1.4 Exiting from a Loop . . . . . . . . . . . . 42 6.1.5 The Null Statement . . . . . . . . . . . . . 43 6.2 Solved Exercises . . . . . . . . . . . . . . . . . 43 6.2.1. Solved Exercise 1: Loan Amortization . . . . 43 6.2.2 Solved Exercise 2: The Chess Knight's Moves 46 6.3 Programming Exercises . . . . . . . . . . . . . . . 51 7 Basic Types . . . . . . . . . . . . . . . . . . . . . . 55 7.1 Chapter Summary . . . . . . . . . . . . . . . . . . 55 7.1.1 Integer Types . . . . . . . . . . . . . . . . 55 7.1.2 Floating Types . . . . . . . . . . . . . . . 56 7.1.3 Character Types . . . . . . . . . . . . . . . 56 7.1.4 The sizeof Operator . . . . . . . . . . . . . 56 7.1.5 Type Conversion . . . . . . . . . . . . . . . 57 7.1.6 Type Definitions . . . . . . . . . . . . . . 57 7.2 Solved Exercises . . . . . . . . . . . . . . . . . 58 7.2.1 Solved Exercise 1: A Word Analysis and Counting Program . . . . . . . . . . . . . . 58 7.3 Programming Exercises . . . . . . . . . . . . . . . 63 8 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.1 Chapter Summary . . . . . . . . . . . . . . . . . . 67 8.1.1 One-Dimensional Arrays . . . . . . . . . . . 67 8.1.2 Multidimensional Arrays . . . . . . . . . . . 68 8.2 Solved Exercises . . . . . . . . . . . . . . . . . 69 8.2.1 Solved Exercise 1: Very Large Numbers . . . . 69 8.2.2 Solved Exercise 2: Sorting . . . . . . . . . 73 8.3 Programming Exercises . . . . . . . . . . . . . . . 75 9 Functions . . . . . . . . . . . . . . . . . . . . . . . 81 9.1 Chapter Summary . . . . . . . . . . . . . . . . . . 81 9.1.1 Defining and Calling Functions . . . . . . . 81 9.1.2 Function Declarations . . . . . . . . . . . . 83 9.1.3 Arguments . . . . . . . . . . . . . . . . . . 83 9.1.4 The return Statement . . . . . . . . . . . . 84 9.1.5 Program Termination . . . . . . . . . . . . . 84 9.1.6 Recursive Functions . . . . . . . . . . . . . 84 9.2 Solved Exercises . . . . . . . . . . . . . . . . . 85 9.2.1 Solved Exercise 1: Plotting the Sine Function 85 9.2.2 Solved Exercise 2: Recursive Sorting . . . . 89 9.3 Programming Exercises . . . . . . . . . . . . . . . 91 10 Program Organization . . . . . . . . . . . . . . . . . . 95 10.1 Chapter Summary . . . . . . . . . . . . . . . . . . 95 10.1.1 Local Variables . . . . . . . . . . . . . . 95 10.1.2 External Variables . . . . . . . . . . . . . 95 10.1.3 Blocks and Scope . . . . . . . . . . . . . . 95 10.1.4 Organizing a C Program . . . . . . . . . . . 95 10.2 Solved Exercises . . . . . . . . . . . . . . . . . 96 10.2.1 Solved Exercise 1: Sets of Numbers . . . . . 96 10.3 Programming Exercises . . . . . . . . . . . . . . . 98 11 Pointers . . . . . . . . . . . . . . . . . . . . . . . . 103 11.1 Chapter Summary . . . . . . . . . . . . . . . . . . 103 11.2 Solved Exercises . . . . . . . . . . . . . . . . . 105 11.2.1 Solved Exercise 1: Complex Numbers . . . . . 105 11.3 Programming Exercises . . . . . . . . . . . . . . . 107 12 Pointers and Arrays . . . . . . . . . . . . . . . . . . 111 12.1 Chapter Summary . . . . . . . . . . . . . . . . . . 111 12.2 Solved Exercises . . . . . . . . . . . . . . . . . 113 12.2.1 Solved Exercise 1: Matrix Multiplication . . 113 12.3 Programming Exercises . . . . . . . . . . . . . . . 117 13 Strings . . . . . . . . . . . . . . . . . . . . . . . . 119 13.1 Chapter Summary . . . . . . . . . . . . . . . . . . 119 13.1.1 String Basics . . . . . . . . . . . . . . . 119 13.1.2 String Operations . . . . . . . . . . . . . 120 13.1.3 Arrays of Strings . . . . . . . . . . . . . 120 13.2 Solved Exercises . . . . . . . . . . . . . . . . . 121 13.2.1 Solved Exercise 1: Indenting a C Program . . 121 13.3 Programming Exercises . . . . . . . . . . . . . . . 124 14 The Preprocessor . . . . . . . . . . . . . . . . . . . . 127 14.1 Chapter Summary . . . . . . . . . . . . . . . . . . 127 14.1.1 Macro Definition . . . . . . . . . . . . . . 127 14.1.2 Conditional Compilation . . . . . . . . . . 129 14.2 Solved Exercises . . . . . . . . . . . . . . . . . 130 14.2.1 Solved Exercise 1: Macros versus Functions . 130 14.2.2 Solved Exercise 2: Stacks of Different Types 132 14.3 Programming Exercises . . . . . . . . . . . . . . . 134 15 Writing Large Programs . . . . . . . . . . . . . . . . . 137 15.1 Chapter Summary . . . . . . . . . . . . . . . . . . 137 15.1.1 Header Files . . . . . . . . . . . . . . . . 137 15.1.2 Building a Multiple-File Program . . . . . . 139 15.2 Solved Exercises . . . . . . . . . . . . . . . . . 140 15.2.1 Solved Exercise 1: Sets of Numbers . . . . . 140 15.3 Programming Exercises . . . . . . . . . . . . . . . 146 16 Structures, Unions, and Enumerations . . . . . . . . . . 151 16.1 Chapter Summary . . . . . . . . . . . . . . . . . . 151 16.1.1 Structures . . . . . . . . . . . . . . . . . 151 16.1.2 Unions and Enumerations . . . . . . . . . . 153 16.2 Solved Exercises . . . . . . . . . . . . . . . . . 155 16.2.1 Solved Exercise 1: A Bank Simulation . . . . 155 16.3 Programming Exercises . . . . . . . . . . . . . . . 161 17 Advanced Uses of Pointers . . . . . . . . . . . . . . . 165 17.1 Chapter Summary . . . . . . . . . . . . . . . . . . 165 17.1.1 Dynamic Storage . . . . . . . . . . . . . . 165 17.1.2 Linked Lists . . . . . . . . . . . . . . . . 167 17.1.3 Pointers to Functions . . . . . . . . . . . 168 17.2 Solved Exercises . . . . . . . . . . . . . . . . . 169 17.2.1 Solved Exercise 1: Sets (Revisited). . . . . 169 17.2.2 Solved Exercise 2: Numeric Integration . . . 174 17.3 Programming Exercises . . . . . . . . . . . . . . . 176 18 Declarations . . . . . . . . . . . . . . . . . . . . . . 179 18.1 Chapter Summary . . . . . . . . . . . . . . . . . . 179 18.1.1 Storage Classes and Type Qualifiers. . . . . 179 18.1.2 Declarators and Initializers . . . . . . . . 180 18.2 Solved Exercises . . . . . . . . . . . . . . . . . 181 18.2.1 Solved Exercise 1: Arrays of Pointers to Functions . . . . . . . . . . . . . . . . 181 18.3 Programming Exercises . . . . . . . . . . . . . . . 183 19 Program Design . . . . . . . . . . . . . . . . . . . . . 185 19.1 Chapter Summary . . . . . . . . . . . . . . . . . . 185 19.1.1 Modules, Information Hiding, and Abstract Data Types . . . . . . . . . . . . . . . . . 185 19.1.2 C++ . . . . . . . . . . . . . . . . . . . . 187 19.2 Solved Exercises . . . . . . . . . . . . . . . . . 190 19.2.1 Solved Exercise 1: A Stack Program in C and in C++ . . . . . . . . . . . . . . . . . 190 19.2.2 Solved Exercise 2: The ADT Car . . . . . . . 191 19.3 Programming Exercises . . . . . . . . . . . . . . . 194 20 Low-Level Programming . . . . . . . . . . . . . . . . . 197 20.1 Chapter Summary . . . . . . . . . . . . . . . . . . 197 20.1.1 Bitwise Operators . . . . . . . . . . . . 197 20.1.2 Bit-Fields in Structures . . . . . . . . . 197 20.2 Solved Exercises . . . . . . . . . . . . . . . . . 189 20.2.1 Solved Exercise 1: Hamming Codes . . . . . 189 20.3 Programming Exercises . . . . . . . . . . . . . . . 202 21 The Standard Library . . . . . . . . . . . . . . . . . . 205 21.1 Chapter Summary . . . . . . . . . . . . . . . . . . 205 21.2 Solved Exercises . . . . . . . . . . . . . . . . . 206 21.2.1 Solved Exercise 1: Holes in a Structure. . . 206 21.3 Programming Exercises . . . . . . . . . . . . . . . 206 22 Input/Output . . . . . . . . . . . . . . . . . . . . . . 209 22.1 Chapter Summary . . . . . . . . . . . . . . . . . . 209 22.1.1 Streams . . . . . . . . . . . . . . . . . . 209 22.1.2 Formatted I/O . . . . . . . . . . . . . . . 210 22.1.3 Character, Line, Block, and String I/O . . . 211 22.2 Solved Exercises . . . . . . . . . . . . . . . . . 212 22.2.1 Solved Exercise 1: A Bank Simulation (Revisited). . . . . . . . . . . . . . . . . 212 22.2.2 Solved Exercise 2: A Parts Database Program. 214 22.3 Programming Exercises . . . . . . . . . . . . . . . 217 23 Library Support for Numbers and Character Data . . . . . 219 23.1 Chapter Summary . . . . . . . . . . . . . . . . . . 219 23.2 Solved Exercises . . . . . . . . . . . . . . . . . 221 23.2.1 Solved Exercise 1: A Text Formatter (Revisited) . . . . . . . . . . . . . . . . 221 23.2.2 Solved Exercise 2: A Tokenizer Program . . . 222 23.3 Programming Exercises . . . . . . . . . . . . . . . 223 24 Error Handling . . . . . . . . . . . . . . . . . . . . . 225 24.1 Chapter Summary . . . . . . . . . . . . . . . . . . 225 24.2 Solved Exercises . . . . . . . . . . . . . . . . . 226 24.2.1 Solved Exercise 1: Efficient String Search . 226 24.2.2 Solved Exercise 2: An Interruptible File Printer . . . . . . . . . . . . . . . . . . 230 24.3 Programming Exercises . . . . . . . . . . . . . . . 231 25 International Features . . . . . . . . . . . . . . . . . 233 25.1 Chapter Summary . . . . . . . . . . . . . . . . . . 233 25.2 Solved Exercises . . . . . . . . . . . . . . . . . 235 25.2.1 Solved Exercise 1: Printing Locale Information . . . . . . . . . . . . . . . . 235 25.3 Programming Exercises . . . . . . . . . . . . . . . 236 26 Miscellaneous Library Functions . . . . . . . . . . . . 237 26.1 Chapter Summary . . . . . . . . . . . . . . . . . . 237 26.1.1 Variable Argument Lists . . . . . . . . . . 237 26.1.2 General Utilities . . . . . . . . . . . . . 237 26.1.3 The <time.h> header . . . . . . . . . . . . 238 26.2 Solved Exercises . . . . . . . . . . . . . . . . . 239 26.2.1 Solved Exercise 1: Sorting Random Numbers . 239 26.3 Programming Exercises . . . . . . . . . . . . . . . 242