David R. Brooks
C Programming: The Essentials for Engineers and Scientists. Springer, NY, 1999
ISBN 0-387-98632-4

This text offers an introduction to procedural programming using the C language. It is directed at engineering and science students who have not previously had a formal programming course. It stresses generally applicable problem solving skills and includes an algorithm development language, dozens of complete C programs, and exercises that address the kinds of computational problems students will find in science and engineering courses. Because of its intended audience and purpose, the text presents a subset of the C language. Thus it is neither intended as nor suitable as a C language reference manual.

Here are links to code and data files used in the book.

This book is still available in 2007. Here are verbatim reviews from Amazon:

This is possibly the best book I've ever seen for engineers and scientists trying to learn how to program in C. However, supplementary material that aids in learning examples found in this book no longer exist. I wrote the author an email asking why his website for his c-code examples no longer exist, and I was informed that the book is "too old!" Without the supplementary material I need, I'm sure I will have a difficult time learning chapter 3 when it requires c-code created in chapter 6.
(The links given above solve this reviewer's problem.)

The easiest way to learn C programming., September 9, 1999
Most C-programming books are very thick and the authors spend a lot of pages in explaining historical and detailed aspects of the C-language. As a chemist I often get frustrated when reading these type of books since it takes about 250 pages before they e.g. explain how to read or write to a file. When you finish the books you are not at a level of solving real problems in C. C programming: The Essentials for Engineers and Scientists by David R. Brooks goes, as the title says, directly to the essentials for a scientist. The book is based on a five-step problem solving procedure throughout the book. This way of structural-thinking, which is often neglected in other books, helps the reader to get a good programming habit in any programming language. Since the book is very problem oriented, the author is able to cover more advanced programming topics than other C-books. The book is designed for undergraduate studies without any knowledge in programming, but may be used by anyone interested in learning C. Many programming examples and exercises are taken from the field of chemistry and physics and thus, the book is perfect as a introduction course in C for chemists and physicists.

It is very good book for beginners that need to make a C program not very complicated but quickly to solve a problem.

Having been a programmer for over a decade I recently came across David Brooks' book while working on code to calculate integrals based on the Trapezoidal Rule and Simpson's Rule.
Apart from finding what I needed in "C Programming: The Essentials for Engineers and Scientists ..." I also found the text to be an overall treasure of programming specifics. Unlike the bibles of programing out there, this one tackles a lot of hands-on real-life programming problems with specifics on design and integration of mathematical equations into code. I rank this book on par with my copy of "Numerical Recipes in C" for its utility.
Looking back over my programming career I wish I had read this book first. It covers numerous examples of coding quirks that I had to learn the hard way, and it covers them from the perspective of a scientist who absolutely must get it right. Many of the intro texts are written by scientists who are so far along in their skill set, they overlook the mundane quirks that tend to trip up beginners. David Brooks explains it from scratch - just as a newbie will encounter it. Nothing about the c programming environment is overlooked.