| |
| |
| |
Writing an ANSI C Program | |
| |
| |
Getting Ready to Program | |
| |
| |
A First Program | |
| |
| |
Variables, Expressions, and Assignments | |
| |
| |
Initialization | |
| |
| |
The Use of #define and #include | |
| |
| |
The Use of printf() and scanf() | |
| |
| |
The Use of printf() | |
| |
| |
The Use of scanf() | |
| |
| |
The while Statement | |
| |
| |
Problem Solving: Computing Sums | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Writing and Running a C Program | |
| |
| |
Interrupting a Program | |
| |
| |
Typing an End-of-File Signal | |
| |
| |
Redirection of the Input and the Output | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Lexical Elements, Operators, and the C System | |
| |
| |
Characters and Lexical Elements | |
| |
| |
Comments | |
| |
| |
Keywords | |
| |
| |
Identifiers | |
| |
| |
Constants | |
| |
| |
String Constants | |
| |
| |
Operators and Punctuators | |
| |
| |
Precedence and Associativity of Operators | |
| |
| |
Increment and Decrement Operators | |
| |
| |
Assignment Operators | |
| |
| |
An Example: Computing Powers of 2 | |
| |
| |
The C System | |
| |
| |
The Preprocessor | |
| |
| |
The Standard Library | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Flow of Control | |
| |
| |
Relational, Equality, and Logical Operators | |
| |
| |
Relational Operators and Expressions | |
| |
| |
Equality Operators and Expressions | |
| |
| |
Logical Operators and Expressions | |
| |
| |
Short-Circuit Evaluation | |
| |
| |
The Compound Statement | |
| |
| |
The Empty Statement | |
| |
| |
The if and if-else Statements | |
| |
| |
The while Statement | |
| |
| |
Problem Solving: Finding Maximum Values | |
| |
| |
The for Statement | |
| |
| |
Problem Solving: Combinatorics | |
| |
| |
Problem Solving: Boolean Variables | |
| |
| |
The Comma Operator | |
| |
| |
The do Statement | |
| |
| |
The goto Statement | |
| |
| |
The break and continue Statements | |
| |
| |
The switch Statement | |
| |
| |
Nested Flow of Control | |
| |
| |
The Conditional Operator | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Functions and Structured Programming | |
| |
| |
Function Invocation | |
| |
| |
Function Definition | |
| |
| |
The return Statement | |
| |
| |
Function Prototypes | |
| |
| |
Top-Down Design | |
| |
| |
Program Correctness: The assert() Macro | |
| |
| |
Function Declarations from the Compiler's Viewpoint | |
| |
| |
Limitations | |
| |
| |
Problem Solving: Random Numbers | |
| |
| |
An Alternate Style for Function Definition Order | |
| |
| |
Developing a Large Program | |
| |
| |
What Constitutes a Large Program? | |
| |
| |
A Simulation: The Game of Heads or Tails | |
| |
| |
Invocation and Call-by-Value | |
| |
| |
Recursion | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Function Prototypes in C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Character Processing | |
| |
| |
The Data Type char | |
| |
| |
The Use of getchar() and putchar() | |
| |
| |
An Example: Capitalize | |
| |
| |
The Macros in ctype.h | |
| |
| |
Problem Solving: Repeating Characters | |
| |
| |
Problem Solving: Counting Words | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
The Fundamental Data Types | |
| |
| |
Declarations and Expressions | |
| |
| |
The Fundamental Data Types | |
| |
| |
Characters and the Data Type char | |
| |
| |
The Data Type int | |
| |
| |
The Integral Types short, long, and unsigned | |
| |
| |
The Floating Types | |
| |
| |
The sizeof Operator | |
| |
| |
Mathematical Functions | |
| |
| |
Conversions and Casts | |
| |
| |
The Integral Promotions | |
| |
| |
The Usual Arithmetic Conversions | |
| |
| |
Casts | |
| |
| |
Problem Solving: Computing Interest | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Enumeration Types and typedef | |
| |
| |
Enumeration Types | |
| |
| |
The Use of typedef | |
| |
| |
An Example: The Game of Paper, Rock, Scissors | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Functions, Pointers, and Storage Classes | |
| |
| |
Pointer Declaration and Assignment | |
| |
| |
Addressing and Dereferencing | |
| |
| |
Pointers to void | |
| |
| |
Call-by-Reference | |
| |
| |
Scope Rules | |
| |
| |
Storage Classes | |
| |
| |
The Storage Class auto | |
| |
| |
The Storage Class extern | |
| |
| |
The Storage Class register | |
| |
| |
The Storage Class static | |
| |
| |
Static External Variables | |
| |
| |
Default Initialization | |
| |
| |
An Example: Processing Characters | |
| |
| |
Function Declarations and Definitions | |
| |
| |
The Type Qualifiers const and volatile | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Arrays and Pointers | |
| |
| |
One-Dimensional Arrays | |
| |
| |
Initialization | |
| |
| |
Subscripting | |
| |
| |
An Example: Counting Each Letter Separately | |
| |
| |
The Relationship Between Arrays and Pointers | |
| |
| |
Pointer Arithmetic and Element Size | |
| |
| |
Passing Arrays to Functions | |
| |
| |
A Sorting Algorithm: Bubble Sort | |
| |
| |
Two-Dimensional Arrays | |
| |
| |
Multidimensional Arrays | |
| |
| |
Dynamic Memory Allocation | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Strings and Pointers | |
| |
| |
The End-of-String Sentinel \0 | |
| |
| |
Initialization of Strings | |
| |
| |
An Example: Have a Nice Day | |
| |
| |
Using Pointers to Process a String | |
| |
| |
Problem Solving: Counting Words | |
| |
| |
Passing Arguments to main() | |
| |
| |
String Handling Functions in the Standard Library | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Recursion | |
| |
| |
Recursive Problem Solving | |
| |
| |
An Example: Drawing Patterns on the Screen | |
| |
| |
String Handling Using Recursion | |
| |
| |
The Divide-and-Conquer Methodology | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Structures and ADTs | |
| |
| |
Declaring Structures | |
| |
| |
Accessing a Member | |
| |
| |
Operator Precedence and Associativity: A Final Look | |
| |
| |
Structures, Functions, and Assignment | |
| |
| |
Problem Solving: Student Records | |
| |
| |
Initialization of Structures | |
| |
| |
The Use of typedef | |
| |
| |
Self-Referential Structures | |
| |
| |
Linear Linked Lists | |
| |
| |
Dynamic Storage Allocation | |
| |
| |
List Operations | |
| |
| |
Counting and Lookup | |
| |
| |
Insertion and Deletion | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Classes | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Input/Output and Files | |
| |
| |
The Output Function printf() | |
| |
| |
The Input Function scanf() | |
| |
| |
Directives in the Control String | |
| |
| |
Ordinary Characters | |
| |
| |
White Space Characters | |
| |
| |
Conversion Specifications | |
| |
| |
Floating Numbers in the Input Stream | |
| |
| |
Using the Scan Set | |
| |
| |
The Return Value | |
| |
| |
A scanf() Example | |
| |
| |
The functions sprintf() and sscanf() | |
| |
| |
The functions fprintf() and fscanf() | |
| |
| |
Accessing Files | |
| |
| |
An Example: Double-Spacing a File | |
| |
| |
Using Temporary Files and Graceful Functions | |
| |
| |
Accessing a File Randomly | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
The Function sscanf() Is Different | |
| |
| |
System Considerations | |
| |
| |
Moving to C++ | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
Software Tools | |
| |
| |
Executing Commands From Within a C Program | |
| |
| |
Environment Variables | |
| |
| |
The C Compiler | |
| |
| |
Creating a Library | |
| |
| |
Using the Profiler | |
| |
| |
How to Time C Code | |
| |
| |
The Use of dbx | |
| |
| |
The Use of make | |
| |
| |
The Use of touch | |
| |
| |
Other Useful Tools | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
From C to C++ | |
| |
| |
Object-Oriented Programming | |
| |
| |
Why Switch to C++? | |
| |
| |
Classes and Abstract Data Types | |
| |
| |
Overloading | |
| |
| |
Constructors and Destructors | |
| |
| |
Inheritance | |
| |
| |
Polymorphism | |
| |
| |
Templates | |
| |
| |
C++ Exceptions | |
| |
| |
Benefits Of Object-Oriented Programming | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
From C To C++ | |
| |
| |
Output | |
| |
| |
Input | |
| |
| |
Classes and Abstract Data Types | |
| |
| |
Overloading | |
| |
| |
Constructors and Destructors | |
| |
| |
Object-oriented Programming and Inheritance | |
| |
| |
Style | |
| |
| |
Common Programming Errors | |
| |
| |
System Considerations | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
The Standard Library | |
| |
| |
| |
Diagnostics: assert.h | |
| |
| |
| |
Character Handling: ype.h | |
| |
| |
Testing a Character | |
| |
| |
Mapping a Character | |
| |
| |
| |
Errors: errno.h | |
| |
| |
| |
Floating Limits: float.h | |
| |
| |
| |
Integral Limits: limits.h | |
| |
| |
| |
Localization: local.h | |
| |
| |
| |
Mathematics: math.h | |
| |
| |
| |
Nonlocal Jumps: setjmp.h | |
| |
| |
| |
Signal Handling: signal.h | |
| |
| |
| |
Variable Arguments: stdard.h | |
| |
| |
| |
Common Definition: stddef.h | |
| |
| |
| |
Input/Output: stdio.h | |
| |
| |
Opening, Closing, and Conditioning a File | |
| |
| |
Accessing the File Position Indicator | |
| |
| |
Error Handling | |
| |
| |
Character Input/Output | |
| |
| |
Formatted Input/Output | |
| |
| |
Direct Input/Output | |
| |
| |
Removing or Renaming a File | |
| |
| |
| |
General Utilities: stdlib.h | |
| |
| |
Dynamic Allocation of Memory | |
| |
| |
Searching and Sorting | |
| |
| |
Pseudo Random Number Generator | |
| |
| |
Communicating With the Environment | |
| |
| |
Integer Arithmetic | |
| |
| |
String Conversion | |
| |
| |
Multibyte Character Functions | |
| |
| |
Multibyte String Functions | |
| |
| |
Leaving the Program | |
| |
| |
| |
Memory and String Handling: string.h | |
| |
| |
Memory Handling Functions | |
| |
| |
String Handling Functions | |
| |
| |
| |
Date and Time: time.h | |
| |
| |
Accessing the Clock | |
| |
| |
Accessing the Time | |
| |
| |
| |
Miscellaneous | |
| |
| |
Using File Descriptors | |
| |
| |
Creating a Concurrent Process | |
| |
| |
Overlaying a Process | |
| |
| |
Interprocess Communication | |
| |
| |
Suspending Program Execution | |
| |
| |
| |
The Preprocessor | |
| |
| |
| |
The Use of #include | |
| |
| |
| |
The Use of #define | |
| |
| |
Syntactic Sugar | |
| |
| |
| |
Macros With Arguments | |
| |
| |
| |
The Use of #undef | |
| |
| |
| |
Conditional Compilation | |
| |
| |
| |
Predefined Macros | |
| |
| |
| |
The Operators # and ## | |
| |
| |
| |
The assert() Macro | |
| |
| |
| |
The Use of #error and #pragma | |
| |
| |
| |
Line Numbers | |
| |
| |
| |
Corresponding Functions | |
| |
| |
| |
Bitwise Operators | |
| |
| |
| |
Bitwise Operators and Expressions | |
| |
| |
Bitwise Complement | |
| |
| |
Two's Complement | |
| |
| |
Bitwise Binary Logical Operators | |
| |
| |
Left- and Right-Shift Operators | |
| |
| |
| |
Masks | |
| |
| |
| |
Printing an int Bitwise | |
| |
| |
| |
Packing and Unpacking | |
| |
| |
| |
Common Programming Errors | |
| |
| |
| |
System Considerations | |
| |
| |
Summary | |
| |
| |
Exercises | |
| |
| |
| |
ANSI C Compared To Traditional C | |
| |
| |
| |
Types | |
| |
| |
| |
Constants | |
| |
| |
| |
Declarations | |
| |
| |
| |
Initializations | |
| |
| |
| |
Expressions | |
| |
| |
| |
Functions | |
| |
| |
| |
Conversions | |
| |
| |
| |
Array Pointers | |
| |
| |
| |
Structures and Unions | |
| |
| |
| |
Preprocessor | |
| |
| |
| |
Header Files | |
| |
| |
| |
Miscellaneous | |
| |
| |
| |
ASCII Character Codes | |
| |
| |
| |
Operator Precedence and Associativity | |