Teach Your Students How to Program Well
Intermediate C Programming provides a stepping-stone for intermediate-level students to go from writing short programs to writing real programs well. It shows students how to identify and eliminate bugs, write clean code, share code with others, and use standard Linux-based tools, such as ddd and valgrind.
The text covers numerous concepts and tools that will help your students write better programs. It enhances their programming skills by explaining programming concepts and comparing common mistakes with correct programs. It also discusses how to use debuggers and the strategies for debugging as well as studies the connection between programming and discrete mathematics.
Table of Contents
COMPUTER STORAGE MEMORY AND FILE: Program Execution. Stack Memory. Prevent, Detect, and Remove Bugs. Pointer. Writing and Testing Programs. Strings. Programming Problems and Debugging. Heap Memory. Programming Problems. Reading and Writing Files. Programming Problems. RECURSION: Recursion. Recursive C Functions. Integer Partition. Programming Problems. STRUCTURE: Programmer-Defined Data Types. Programming Problems. Linked Lists. Programming Problems. Binary Search Trees. Parallel Programming Using Threads. APPLICATIONS: Finding the Exit of a Maze. Image Processing. Huffman Compression. Appendices. Index.
Yung-Hsiang Lu is an associate professor in the School of Electrical and Computer Engineering at Purdue University. He is an ACM Distinguished Scientist and ACM Distinguished Speaker. He received a Ph.D. from the Department of Electrical Engineering at Stanford University.
"Two features are notable. First, a crucial element of the book, elaborated early and in great detail, is the description of the program calling stack. This is an excellent pedagogical approach: a thorough understanding of how the calling stack is built and used goes a long way in ensuring that the programmer has a firm grasp of the design process, and it also plays a crucial role in tracing the location of errors. And second, many topics are accompanied by discussions of potential pitfalls and remedial strategies. …quite beneficial to novice programmers, the intended audience. It could also be used for professional development in class or by the independent reader."
—Edgar R. Chavez, in Computing Reviews
"… an excellent entryway into practical software development practices that will enable my beginning and even advanced students to be more productive in their day-to-day work by avoiding typical mistakes and by writing cleaner code … I wished I had this book some 20 years ago … the hands-on examples … are eye opening. I recommend this book to anyone who needs to write software beyond the tinkering level."
—From the Foreword by Gerhard Klimeck, Reilly Director of the Center for Predictive Materials and Devices and the Network for Computational Nanotechnology and Professor of Electrical and Computer Engineering, Purdue University; Fellow of the IOP, APS, and IEEE
"Intermediate C Programming bridges that critical gap between beginner and expert with clear examples in key areas. This book covers important concepts we use every day in industry when developing and debugging code."
—Harald Smit, Software Manager
"Higher order cognition occurs when one can analyze disparate parts of problems and issues or perform complicated operations. But advanced, critical thinking requires an assessment of how negative consequences can be avoided. In computer programming education, the leap between beginner-level recognition of syntax and artful, efficient language authoring occurs only when a student can regularly identify and predict likely errors in authored code. Intermediate C Programming provides essential lessons and practice in error analysis. By prioritizing debugging into each lesson, the author compels learners to consider the consequences of coding choices, one block at a time."
—David B. Nelson, Ph.D., Associate Director, Center for Instructional Excellence, Purdue University
"This well-written book provides the necessary tools and practical skills to turn students into seasoned programmers. It not only teaches students how to write good programs, but, more uniquely, also teaches them how to avoid writing bad programs. The inclusion of Linux operations and Versioning control as well as the coverage of applications and IDE build students’ confidence in taking control over large-scale software developments. At the end of this learning journey, students will possess the skills for helping others to debug their programs, an important step for building a new generation of programmers who are able to help one another in software development."
—Siau Cheng Khoo, Ph.D., National University of Singapore
"This book is unique in that it covers the C programming language from a bottom-up perspective, which is rare in programming books. Instead of starting with the high-level concepts, which easily get dry and uninspiring for students, the book begins with practical problems and progressively introduces the C concepts necessary to solve those problems. This means that students immediately understand how the language works from a very practical and pragmatic perspective."
—Niklas Elmqvist, Ph.D., Associate Professor and Program Director, Master of Science in Human–Computer Interaction, University of Maryland