K&R C Chapter 4 Exercise Solutions — Functions and Program Structure

Chapter 4: Functions and Program Structure is where K&R builds a non-trivial program: a reverse Polish notation (RPN) calculator. The exercises extend it — adding modulo, unary minus, variables, and last-printed-value recall. Other exercises cover recursive printd, recursive itoa, and the C preprocessor. Exercise 4-12 (recursive itoa) and 4-13 (recursive reverse) are elegance tests.

These are worked solutions to all 14 exercises. Each solution compiles cleanly with gcc -ansi -Wall.

Book: The C Programming Language, 2nd Ed — Kernighan & Ritchie  |  All chapters index


Exercises

  1. Exercise 4-1. Write the function strindex(s,t) that returns the position of the rightmost occurrence of t in s, or -1 if there is none.

    Solution to Exercise 4-1

  2. Exercise 4-2. Extend atof to handle scientific notation of the form 123.45e-6 where a floating-point number may be followed by e or E and an optionally signed exponent.

    Solution to Exercise 4-2

  3. Exercise 4-3. Given the basic framework, it’s straightforward to extend the calculator. Add the modulus (%) operator and provisions for negative numbers.

    Solution to Exercise 4-3

  4. Exercise 4-4. Add commands to print the top element of the stack without popping it, to duplicate it, and to swap the top two elements. Add a command to clear the stack.

    Solution to Exercise 4-4

  5. Exercise 4-5. Add access to library functions like sin, cos, exp, and pow. See <math.h> in Appendix B, Section 4.

    Solution to Exercise 4-5

  6. Exercise 4-6. Add commands for handling variables. (It’s easy to provide twenty-six variables with single-letter names.) Add a variable for the most recently printed value.

    Solution to Exercise 4-6

  7. Exercise 4-7. Write a routine ungets(s) that pushes the entire string s back onto the input. Should ungets know about buf and bufp, or should it just use ungetch?

    Solution to Exercise 4-7

  8. Exercise 4-8. Suppose that there will never be more than one character of pushback. Modify getch and ungetch accordingly.

    Solution to Exercise 4-8

  9. Exercise 4-9. Our getch and ungetch do not handle a pushed-back EOF correctly. Decide what their properties should be if an EOF is pushed back, then implement your decision.

    Solution to Exercise 4-9

  10. Exercise 4-10. An alternate organization uses getline to read an entire input line; this makes getch and ungetch unnecessary. Revise the calculator to use this approach.

    Solution to Exercise 4-10

  11. Exercise 4-11. Modify getop so that it doesn’t need to use ungetch. Hint: use an internal static variable.

    Solution to Exercise 4-11

  12. Exercise 4-12. Adapt the ideas of printd for writing a recursive version of itoa; that is, convert an integer into a string by calling a recursive routine.

    Solution to Exercise 4-12

  13. Exercise 4-13. Write a recursive version of the function reverse(s), which reverses the string s in place.

    Solution to Exercise 4-13

  14. Exercise 4-14. Define a macro swap(t,x,y) that interchanges two arguments of type t. (Block structure will help.)

    Solution to Exercise 4-14

See also: K&R C — All Chapters Index | Complete C Programs List

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>