Free books on C and C Plus Plus

  • Practical C++ Programming, Second Edition
    C++ is a powerful, highly flexible, and adaptable programming language that allows software engineers to organize and process information quickly and effectively. But this high-level language is relatively difficult to master, even if you already know the C programming language. The 2nd edition of Practical C++ Programming is a complete introduction to the C++ language for programmers who are learning C++. Reflecting the latest changes to the C++ standard, this 2nd edition takes a useful down-to-earth approach, placing a strong emphasis on how to design clean, elegant code.
  • Beginners Guide to C
    This book provides information on Programming with C. It has all the information from the basics that will help a beginner to start working with C programming language. As you all are aware that C is the basic programming language that will enhance and build your capability before learning and working with other programming languages. In addition the book gives you simple examples that will help you to work with the programming language. 
  • Beginning Programming with C++ For Dummies-
    C++ is an object-oriented programming language commonly adopted by would-be programmers. This book explores the basic development concepts and techniques of C++ and explains the "how" and "why" of C++ programming from the ground up.
  • Mastering C++ -
    Full text of “Mastering C++” by K. R. Venugopal is available on Google Books. Every aspect is prominently illustrated with figures and examples which are well tested, illustrative amd impressive in the manner the solutions are designed.
  • Fundamentals of Programming C++ -
    This book teaches the basics of C++ programming in an easy-to-follow style, without assuming previous experience in any other language. A variety of examples such as game programming, club membership organization, grade tracking and grade point average calculation, make learning C++ both fun and practical. Each chapter contains at least one complete, fully functional example program, with several smaller examples provided throughout the book.
  • Data Structures and Algorithm Analysis -
    We study data structures so that we can learn to write more efficient programs.
    But why must programs be efficient when new computers are faster every year?
    The reason is that our ambitions grow with our capabilities. Instead of rendering
    efficiency needs obsolete, the modern revolution in computing power and storage
    capability merely raises the efficiency stakes as we attempt more complex tasks
  • An Introduction to the Imperative Part of C++ -

    These lecture notes are designed for an introductory course on programming, using the imperative core of C++, and given to MSc (Computing Science) students at Imperial College London at the very beginning of their course. The students attend an intensive series of lectures and laboratory sessions over two weeks, carrying out lab work using the GNU g++ compiler on PCs running a flavor of UNIX. Since the course is intended for graduates from disciplines other than Computer Science, very little previous programming experience is assumed.

  • Beginning C: From Novice to Professional - Welcome to Beginning C: From Novice to Professional, Fourth Edition. With this book you canbecome a competent C programmer. In many ways, C is an ideal language with which to learnprogramming. C is a very compact language, so there isn’t a lot of syntax to learn before you can write real applications. In spite of its conciseness and ease, it’s also an extremely powerful language that’s still widely used by professionals. The power of C is such that it is used for programming at all levels,from device drivers and operating system components to large-scale applications.
  • Advanced C and C++ Compiling -
  • The ultimate goal of all the art related to building executables is to establish as much control as possible over the process of program execution. In order to truly understand the purpose and meaning of certain parts of the executable structure, it is of the utmost importance to gain the full understanding of what happens during the execution of a program, as the interplay between the
    operating system kernel and the information embedded inside
    the executable play the most significant roles. This is particularly true in the initial phases of execution, when it is too early for runtime impacts (such as user settings, various runtime events, etc.) which normally happen.
  • ANSI C Simply (currently not available)- Essentials of C, assumes no previous knowledge. The text has been revised to the current ANSI C standard. Beginner readers are advised to start on a subset of the complete language: this approach is taken here and, where appropriate, a 'Big Picture' section takes the reader to more advanced topics.
  • C++ GUI Programming with Qt 3 - Straight from Trolltech, this book covers all you need to build industrial-strength applications with Qt 3.2.x and C++--applications that run natively on Windows, Linux/Unix, Mac OS X, and embedded Linux with no source code changes! The book teaches solid Qt programming practices; it is not a rehash of the documentation. You'll find start-to-finish coverage packed with examples, plus a CD with the Qt 3.2 toolset and Borland C++ compilers--including a non-commercial Qt 3.2 for Windows available nowhere else! Direct Link to PDF download. Read my review of this book on Slashdot
  • C++ Reference Guide - extensive guide on using Standard Template Library. You might have to register with InformIT to get full access.
  • ZooLib Cookbook - ZooLib is a cross-platform application framework. What it allows you to do is to write a single set of C++ sources and compile for different operating systems and microprocessors to produce native executable applications with very little need for platform-specific client code. This is of great benefit to a developer, as it allows you to support your application on a variety of platforms without a lot of extra work developing parallel codebases. It also allows you to spend the bulk of your time developing on whatever platform you enjoy the most while delivering for the platforms your users need, even if they're not the same.
  • C++ in Action - My work at Microsoft gave me the unique experience of working on large software projects and applying and developing state of the art design and programming methodologies. Of course, there are plenty of books on the market that talk about design, programming paradigms, languages, etc. Unfortunately most of them are either written in a dry academic style and are quite obsolete, or they are hastily put together to catch the latest vogue. There is a glut of books teaching programming in C, C++ and, more recently, in Java. They teach the language, all right, but rarely do they teach programming.
  • Optimizing C++ - Optimizing C++ provides working programmers and those who intend to be working programmers with a practical, real-world approach to program optimization. Many of the optimization techniques presented are derived from my reading of academic journals that are, sadly, little known in the programming community. Optimizing C++ book also draws on my nearly 30 years of experience as a programmer in diverse fields of application, during which I have become increasingly concerned about the amount of effort spent in reinventing optimization techniques rather than applying those already developed.
  • Who's Afraid of C++? - Whether you are using this book on your own or in school, there are many good reasons to learn how to program. You may have a problem that hasn't been solved by commercial software; you may want a better understanding of how commercial programs function so you can figure out how to get around their shortcomings and peculiarities; or perhaps you're just curious about how computers perform their seemingly magical feats. Whatever the initial reason, I hope you come to appreciate the great creative possibilities opened up by this most ubiquitous of modern inventions.
  • Teach Yourself C++ in 21 Days - Computer languages have undergone dramatic evolution since the first electronic computers were built to assist in telemetry calculations during World War II. Early on, programmers worked with the most primitive computer instructions: machine language. These instructions were represented by long strings of ones and zeroes. Soon, assemblers were invented to map machine instructions to human-readable and -manageable mnemonics, such as ADD and MOV. In time, higher-level languages evolved, such as BASIC and COBOL. These languages let people work with something approximating words and sentences, such as Let I = 100. These instructions were translated back into machine language by interpreters and compilers. An interpreter translates a program as it reads it, turning the program instructions, or code, directly into actions. A compiler translates the code into an intermediary form. This step is called compiling, and produces an object file. The compiler then invokes a linker, which turns the object file into an executable program. Because interpreters read the code as it is written and execute the code on the spot, interpreters are easy for the programmer to work with. Compilers, however, introduce the extra steps of compiling and linking the code, which is inconvenient. Compilers produce a program that is very fast each time it is run. However, the time-consuming task of translating the source code into machine language has already been accomplished. Another advantage of many compiled languages like C++ is that you can distribute the executable program to people who don't have the compiler. With an interpretive language, you must have the language to run the program.
  • Programming in C: UNIX System Calls and Subroutines using C - In order to use Solaris and most other Unix Systems you will need to be familiar with the Common Desktop Environment (CDE). Before embarking on learning C with briefly introduce the main features of the CDE. Most major Unix vendors now provide the CDE as standard. Consequently, most users of the X Window system will now be exposed to the CDE. Indeed, continuing trends in the development of Motif and CDE will probably lead to a convergence of these technologies in the near future. This section highlights the key features of the CDE from a Users perspective.
  • Numerical Recipes in C (and in Fortran 77 and Fortran 90) - The new and greatly expanded second edition of the highly popular Numerical Recipes in C features over 100 new routines and upgraded versions of the original routines. The book remains the most practical, comprehensive handbook of scientific computing available today.
  • How to Think Like a Computer Scientist (C++) - The goal of this book is to teach you to think like a computer scientist. I like the way computer scientists think because they combine some of the best features of Mathematics, Engineering, and Natural Science. Like mathematicians, computer scientists use formal languages to denote ideas (specifically computations). Like engineers, they design things, assembling components into systems and evaluating tradeoffs among alternatives. Like scientists, they observe the behavior of complex systems, form hypotheses, and test predictions. The single most important skill for a computer scientist is problem-solving. By that I mean the ability to formulate problems, think creatively about solutions, and express a solution clearly and accurately. As it turns out, the process of learning to program is an excellent opportunity to practice problem-solving skills. That's why this chapter is called "The way of the program." Of course, the other goal of this book is to prepare you for the Computer Science AP Exam. We may not take the most direct approach to that goal, though. For example, there are not many exercises in this book that are similar to the AP questions. On the other hand, if you understand the concepts in this book, along with the details of programming in C++, you will have all the tools you need to do well on the exam. See also Python and Java versions.
  • Writing Bug-Free C Code - This book describes an alternate class methodology that provides complete data hiding and fault-tolerant run-time type checking of objects in C programs. With it, you will produce code that contains fewer bugs. The class methodology helps to prevent bugs by making it easier to write C code. It does this by eliminating data structures (class declarations) from include files, which makes a project easier to understand (because there is not as much global information), which makes it easier to write C code, which helps to eliminate bugs. This class methodology, which uses private class declarations, is different from C++, which uses public class declarations. The class methodology helps detect bugs by providing for both compile-time and run-time type checking of pointers (handles) to class objects. This run-time type checking catches a lot of bugs for you since invalid object handles (the cause of a lot of bugs) are automatically detected and reported. We have all, at some point in our programming careers, spent several hours or days tracking down a particularly obscure bug in our code. Have you ever stepped back and wondered how following a different programming methodology might have prevented such a bug from occurring or have automatically detected it? Or have you tracked down the same type of bug several times?
  • The C Book - This is not a tutorial introduction to programming. The book is designed for programmers who already have some experience of using a modern high-level procedural programming language. As we explain later, C isn't really appropriate for complete beginners—though many have managed to use it—so the book will assume that its readers have already done battle with the notions of statements, variables, conditional execution, arrays, procedures (or subroutines) and so on. Instead of wasting your time by ploughing through tedious descriptions of how to add two numbers together and explaining that the symbol for multiplication is *, the book concentrates on the things that are special to C. In particular, it's the way that C is used which is emphasized.
  • Data Structures and Algorithms with Object-Oriented Design Patterns in C++ - This book was motivated by my experience in teaching the course E&CE 250: Algorithms and Data Structures in the Computer Engineering program at the University of Waterloo. I have observed that the advent of object-oriented methods and the emergence of object-oriented design patterns has lead to a profound change in the pedagogy of data structures and algorithms. The successful application of these techniques gives rise to a kind of cognitive unification: Ideas that are disparate and apparently unrelated seem to come together when the appropriate design patterns and abstractions are used.
  • C++ FAQ Lite - frequently asked questions
  • Thinking in C++, 2nd Edition - 2 volumes of Bruce Eckel's book, one of the easiest to read and most definitive titles for C++
  • A Beginner’s C++ When it comes to introducing the budding programmer to a new language or object-oriented methods, C++ is a great place to start. Its structure and syntax have dictated countless sister languages and it still remains the building block for most native applications in use on desktops, mobile devices, and game consoles. “A Beginner’s C++” walks the reader through the very basics, through the essentials of computer hardware through the way C++ addresses fundamental programming concepts. It is structured to be the equivalent of a two-semester long computer science course and meets its objective well.
  • C# School First Edition C# is a powerful language with the efficiency and power of object oriented concepts. This free book download is a good start for beginners. Book has 14 lessons plus 2 special chapters explaining the language through diagrams, flowcharts and program window snapshots. The book discusses C# and .NET in 3 progressive levels – beginners with fundamentals of C#, .NET and Object Oriented concepts; and then in depth into Object Oriented Concepts. The third stage has some real time project details already performed by one of its author.