< previous page page_vii next page >

Page vii
Preface
C and C++ are seeing explosive growth, not only in industry but also in academia. Many colleges and universities are adopting these languages in the CS1 and CS2 courses. Multitudes of C and C++ books are on the market, but most are written for experienced programmers and concentrate almost exclusively on language features. In contrast, Programming and Problem Solving with C++ is geared specifically to the first course in computer science fundamentals, with content and organization guided by the ACM recommended curriculum for CS1 (October 1984) and the following knowledge units from the ACM/IEEE Computing Curricula 1991 recommendations for a C101 course: AL1-AL4, AL6, NU1, PL3-PL5, and SE1-SE5.
The Pascal version of this book has been widely accepted as a model for textbooks for the ACM-recommended curriculum for CS1 and the first section of the AP exam in computer science. Programming and Problem Solving with C++ continues to reflect our view of the future direction of computer science educationmore rigor, more theory, greater use of abstraction, and the earlier application of software engineering principles.
Our experience has shown that topics once considered too advanced can be taught in the first course. For example, we address metalanguages explicitly as the formal means of specifying programming language syntax. We introduce Big-O notation early and use it to compare algorithms in later chapters. We present finite state machines as one model for designing certain algorithms. We discuss modular design in terms of abstract steps, concrete steps, functional equivalence, and functional cohesion. Preconditions and postconditions are used in the context of the algorithm walk-through, in the development of testing strategies, and as interface documentation for user-written functions. Loop invariants are used in program code examples to document the semantics of loops. The discussion of function interface design includes encapsulation, control abstraction, and communication complexity. Data abstraction and abstract data types are explained in conjunction with the C++ class mechanism, forming a natural lead-in to object-oriented programming.
In this book, we continue our commitment to presenting the material in a way that is precise yet accessible to the student. The chapters contain many exercises and examples that have been compiled and tested thoroughly. Every chapter concludes with one or more complete case studies. These

 
< previous page page_vii next page >