0% found this document useful (0 votes)
27 views

C Programming Data Structures 4th Edition E. Balagurusamy - Read the ebook online or download it to own the full content

The document provides information about various programming eBooks available for download at ebookgate.com, including titles by E. Balagurusamy and D.S. Malik. It highlights the instant access to digital formats such as PDF, ePub, and MOBI. Additionally, it includes details about the author's background and the structure of the C Programming and Data Structures textbook.

Uploaded by

arogespacva
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

C Programming Data Structures 4th Edition E. Balagurusamy - Read the ebook online or download it to own the full content

The document provides information about various programming eBooks available for download at ebookgate.com, including titles by E. Balagurusamy and D.S. Malik. It highlights the instant access to digital formats such as PDF, ePub, and MOBI. Additionally, it includes details about the author's background and the structure of the C Programming and Data Structures textbook.

Uploaded by

arogespacva
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 77

Instant Ebook Access, One Click Away – Begin at ebookgate.

com

C Programming Data Structures 4th Edition E.


Balagurusamy

https://ebookgate.com/product/c-programming-data-
structures-4th-edition-e-balagurusamy/

OR CLICK BUTTON

DOWLOAD EBOOK

Get Instant Ebook Downloads – Browse at https://ebookgate.com


Click here to visit ebookgate.com and download ebook now
Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

Programming in ANSI C 6th Edition E. Balagurusamy

https://ebookgate.com/product/programming-in-ansi-c-6th-edition-e-
balagurusamy/

ebookgate.com

Computer Programming 1st Edition E. Balagurusamy

https://ebookgate.com/product/computer-programming-1st-edition-e-
balagurusamy/

ebookgate.com

C Programming Program design including data structures


5ed. Edition Malik D.S.

https://ebookgate.com/product/c-programming-program-design-including-
data-structures-5ed-edition-malik-d-s/

ebookgate.com

Data Structures and Algorithms in C 4th Edition Adam


Drozdek

https://ebookgate.com/product/data-structures-and-algorithms-in-c-4th-
edition-adam-drozdek/

ebookgate.com
C Programming Program Design Including Data Structures 7th
Edition D. S. Malik

https://ebookgate.com/product/c-programming-program-design-including-
data-structures-7th-edition-d-s-malik/

ebookgate.com

C Programming Program Design Including Data Structures 6th


Edition D. S. Malik

https://ebookgate.com/product/c-programming-program-design-including-
data-structures-6th-edition-d-s-malik/

ebookgate.com

Data Structures and Other Objects Using C 4th Edition


Michael Main

https://ebookgate.com/product/data-structures-and-other-objects-
using-c-4th-edition-michael-main/

ebookgate.com

Data Structures Using C 2nd Edition D. S. Malik

https://ebookgate.com/product/data-structures-using-c-2nd-edition-d-s-
malik/

ebookgate.com

Data Structures Other Objects using Java 4th Edition


Michael Mann

https://ebookgate.com/product/data-structures-other-objects-using-
java-4th-edition-michael-mann/

ebookgate.com
As per the
Revised
Syllabus Effective
August 2007

C Programming
and
Data Structures
Fourth Edition
About the Author
E Balagurusamy, former Vice Chancellor, Anna University, Chennai, is currently Member, Union
Public Service Commission, New Delhi. He is a teacher, trainer, and consultant in the fields of Informa-
tion Technology and Management. He holds an ME (Hons) in Electrical Engineering and Ph.D in
Systems Engineering from the Indian Institute of Technology, Roorkee. His areas of interest include
Object-Oriented Software Engineering, Electronic Business, Technology Management, Business
Process Re-engineering, and Total Quality Management.
A prolific writer, he has authored a large number of research papers and several books. His best
selling books, among others include:
· Programming in C#, 2/e
· Programming in Java, 3/e
· Object-Oriented Programming with C++, 4/e
· Programming in BASIC, 3/e
· Programming in ANSI C, 4/e
· Numerical Methods
· Reliability Engineering
A recipient of numerous honours and awards, he has been listed in the Directory of Who’s Who of
Intellectuals and in the Directory of Distinguished Leaders in Education.
As per the
Revised
Syllabus Effective
August 2007

C Programming
and
Data Structures
Fourth Edition

E Balagurusamy
Member, UPSC
New Delhi

Tata McGraw-Hill Publishing Company Limited


NEW DELHI
McGraw-Hill Offices
New Delhi New York St Louis San Francisco Auckland Bogotá Caracas
Kuala Lumpur Lisbon London Madrid Mexico City Milan Montreal
San Juan Santiago Singapore Sydney Tokyo Toronto
Published by the Tata McGraw-Hill Publishing Company Limited,
7 West Patel Nagar, New Delhi 110 008.

Copyright © 2009, by Tata McGraw-Hill Publishing Company Limited.


No part of this publication may be reproduced or distributed in any form or by any means, electronic, mechanical,
photocopying, recording, or otherwise or stored in a database or retrieval system without the prior written permis-
sion of the publishers. The program listings (if any) may be entered, stored and executed in a computer system, but
they may not be reproduced for publication.
This edition can be exported from India only by the publishers,
Tata McGraw-Hill Publishing Company Limited.
ISBN-13: 978-0-07-0084759
ISBN-10: 0-07-0084750
Managing Director—Ajay Shukla
General Manager: Publishing—SEM & Tech Ed: Vibha Mahajan
Sponsoring Editor—Shalini Jha
Senior Copy Editor—Dipika Dey
Junior Manager—Production, Anjali Razdan
Marketing General Manager—Higher Education & Sales: Michael J. Cruz
Product Manager—SEM & Tech Ed: Biju Ganesan
Controller—Production: Rajender P. Ghansela
Asst. General Manager— Production: B. L. Dogra

Information contained in this work has been obtained by Tata McGraw-Hill, from sources believed to be
reliable. However, neither Tata McGraw-Hill nor its authors guarantee the accuracy or completeness of any
information published herein, and neither Tata McGraw-Hill nor its authors shall be responsible for any
errors, omissions, or damages arising out of use of this information. This work is published with the under-
standing that Tata McGraw-Hill and its authors are supplying information but are not attempting to render
engineering or other professional services. If such services are required, the assistance of an appropriate
professional should be sought.

Typeset at Script Makers, 19, A1-B, DDA Market, Paschim Vihar, New Delhi 110 063, and printed at Shakti
Packers, 5C/9, New Rohtak Road, Karol Bagh, New Delhi-110 005
Cover: SDR Printers
DALZCRBFRAALX
Contents

Foreword xi
Preface xiii
Road Map to the Syllabus xv
The C99 Standard xvii

UNIT I
1. Algorithms 1.3–1.15
1.1 Introduction ......................................................................................................................... 1.3
1.1.1 Algorithm/pseudocode .......................................................................................... 1.3
1.1.2 Flow Chart............................................................................................................ 1.4
1.2 Three Basic Operations ....................................................................................................... 1.5
1.2.1 Sequence .............................................................................................................. 1.5
1.2.2 Selection ............................................................................................................... 1.6
1.2.3 Iteration .............................................................................................................. 1.13
Review Questions and Exercises ..................................................................................... 1.14
2. Overview of C 2.1–2.12
2.1 Introduction ......................................................................................................................... 2.1
2.2 Importance of C .................................................................................................................. 2.1
2.3 Sample C Programs ............................................................................................................. 2.2
2.4 Program Development Steps ............................................................................................... 2.5
2.5 Structure of a C Program .................................................................................................... 2.9
Review Questions and Exercises ..................................................................................... 2.11
3. Constants, Variables, and Data Types 3.1–3.26
3.1 Introduction ........................................................................................................................ .3.1
3.2 Character Set ....................................................................................................................... 3.1
3.3 C Tokens ............................................................................................................................. 3.1
3.4 Keywords and Identifiers .................................................................................................... 3.2
3.5 Constants ............................................................................................................................. 3.3
3.6 Variables ............................................................................................................................. 3.7
3.7 Basic Data Types and Sizes ................................................................................................ 3.8
3.8 Declaration of Variables ................................................................................................... 3.11
3.9 Assigning Values to Variables .......................................................................................... 3.14
3.10 Defining Symbolic Constants ........................................................................................... 3.21
Review Questions and Exercises ................................................................................... 3.24
vi Contents
4. Operators and Expressions 4.1–4.22
4.1 Introduction ......................................................................................................................... 4.1
4.2 Arithmetic Operators .......................................................................................................... 4.1
4.3 Relational Operators ........................................................................................................... 4.4
4.4 Logical Operators ............................................................................................................... 4.5
4.5 Assignment Operators ......................................................................................................... 4.5
4.6 Increment and Decrement Operators .................................................................................. 4.7
4.7 Conditional Operator .......................................................................................................... 4.8
4.8 Bitwise Operators ............................................................................................................... 4.8
4.9 Special Operators ................................................................................................................ 4.9
4.10 Arithmetic Expressions ..................................................................................................... 4.11
4.11 Evaluation of Expressions ................................................................................................ 4.11
4.12 Precedence of Arithmetic Operators ................................................................................. 4.12
4.13 Some Computational Problems ......................................................................................... 4.14
4.14 Type Conversions in Expressions ..................................................................................... 4.15
4.15 Operator Precedence and Associativity ............................................................................ 4.18
Case Studies ..................................................................................................................... 4.19
Review Questions and Exercises ..................................................................................... 4.20
5. Managing Input and Output Operations 5.1–5.25
5.1 Introduction ......................................................................................................................... 5.1
5.1.1 Input/Output Statements and Header Files ........................................................... 5.1
5.2 Reading a Character ............................................................................................................ 5.2
5.3 Writing a Character ............................................................................................................ 5.4
5.4 Formatted Input ................................................................................................................... 5.5
5.5 Formatted Output .............................................................................................................. 5.14
Case Studies ..................................................................................................................... 5.21
Review Questions and Exercises ..................................................................................... 5.24
6. Decision Making and Branching 6.1–6.29
6.1 Introduction ......................................................................................................................... 6.1
6.2 Decision Making with If Statement .................................................................................... 6.1
6.3 Simple If Statement ............................................................................................................. 6.2
6.4 The If K Else Statement ..................................................................................................... 6.5
6.5 Nesting of If ... Else Statements .......................................................................................... 6.7
6.6 The Else If Ladder ............................................................................................................ 6.11
6.7 The Switch and Break Statements .................................................................................... 6.13
6.8 The ? : Operator ................................................................................................................ 6.17
6.9 The Goto Statement .......................................................................................................... 6.20
6.9.1 Label .................................................................................................................. 6.20
Case Studies ..................................................................................................................... 6.22
Review Questions and Exercises ..................................................................................... 6.26
7. Decision Making and Looping 7.1–7.30
7.1 Introduction ......................................................................................................................... 7.1
7.2 The While Statement ........................................................................................................... 7.3
7.3 The Do Statement ................................................................................................................ 7.4
Contents vii
7.4 The For Statement ............................................................................................................... 7.6
7.5 Jumps in Loops ................................................................................................................. 7.14
7.6 Structured Programming ................................................................................................... 7.20
Case Studies ..................................................................................................................... 7.21
Review Questions and Exercises ..................................................................................... 7.27

UNIT II

8. Arrays 8.3–8.31
8.1 Introduction ......................................................................................................................... 8.3
8.2 One-Dimensional Arrays .................................................................................................... 8.3
8.3 Two-Dimensional Arrays.................................................................................................... 8.8
8.4 Initializing Two-Dimensional Arrays ............................................................................... 8.13
8.5 Multidimensional Arrays .................................................................................................. 8.15
Case Studies ..................................................................................................................... 8.17
Review Questions and Exercises ..................................................................................... 8.28
9. Handling of Character Strings 9.1–9.23
9.1 Introduction ......................................................................................................................... 9.1
9.2 Declaring and Initializing String Variables ........................................................................ 9.2
9.3 Reading Strings from Terminal ........................................................................................... 9.2
9.4 Writing Strings to Screen .................................................................................................... 9.5
9.5 Arithmetic Operations on Characters ................................................................................. 9.8
9.6 Putting Strings Together ................................................................................................... 9.10
9.7 Comparison of Two Strings .............................................................................................. 9.12
9.8 String-Handling Functions ................................................................................................ 9.13
9.9 Table of Strings ................................................................................................................. 9.15
Case Studies ..................................................................................................................... 9.18
Review Questions and Exercises ..................................................................................... 9.22
10. User-Defined Functions 10.1–10.50
10.1 Introduction ....................................................................................................................... 10.1
10.1.1 Standard Library Functions ................................................................................ 10.1
10.2 Need for User-Defined Functions ..................................................................................... 10.4
10.3 A Multi-Function Program ................................................................................................ 10.5
10.4 The Form of C Functions .................................................................................................. 10.7
10.5 Return Values and their Types .......................................................................................... 10.8
10.6 Calling a Function ............................................................................................................. 10.9
10.7 Category of Functions ..................................................................................................... 10.10
10.8 No Arguments and no Return Values ............................................................................. 10.10
10.9 Arguments but no Return Values .................................................................................... 10.12
10.10 Arguments with Return Values ....................................................................................... 10.14
10.11 Handling of Non-Integer Functions ................................................................................ 10.18
10.12 Nesting of Functions ....................................................................................................... 10.21
10.13 Recursion ........................................................................................................................ 10.22
10.14 Functions with Arrays ..................................................................................................... 10.23
10.15 The Scope and Lifetime of Variables in Functions—Storage Classes ............................ 10.26
viii Contents
10.16 ANSI C Functions ........................................................................................................... 10.36
10.17 The Preprocessor ............................................................................................................. 10.39
10.18 ANSI Additions .............................................................................................................. 10.42
Case Study ...................................................................................................................... 10.45
Review Questions and Exercises ................................................................................. 10.49

UNIT III

11. Pointers 11.3–11.32


11.1 Introduction ....................................................................................................................... 11.3
11.2 Understanding Pointers ..................................................................................................... 11.3
11.3 Accessing the Address of a Variable ................................................................................ 11.5
11.4 Declaring and Initializing Pointers ................................................................................... 11.6
11.5 Accessing a Variable Through its Pointer ........................................................................ 11.7
11.6 Pointer Expressions .......................................................................................................... 11.9
11.7 Pointer Increments and Scale Factor—Address Arithmetic ............................................ 11.11
11.8 Pointers and Arrays......................................................................................................... 11.12
11.9 Pointers and Character Strings ........................................................................................ 11.15
11.10 Pointers and Functions .................................................................................................... 11.17
11.11 Pointers and Structures ................................................................................................... 11.23
Case Studies ................................................................................................................... 11.25
Review Questions and Exercises ................................................................................... 11.31

UNIT IV

12. Structures and Unions 12.3–12.25


12.1 Introduction ....................................................................................................................... 12.3
12.2 Structure Definition—Declaring Structures ..................................................................... 12.3
12.3 Giving Values to Members ............................................................................................... 12.5
12.4 Structure Initialization ...................................................................................................... 12.6
12.5 Comparison of Structure Variables ................................................................................... 12.8
12.6 Arrays of Structures .......................................................................................................... 12.8
12.7 Arrays within Structures ................................................................................................. 12.11
12.8 Structures within Structures—Nested Structures ............................................................ 12.12
12.9 Structures and Functions ................................................................................................. 12.15
12.10 Unions ............................................................................................................................. 12.17
12.11 Size of Structures ............................................................................................................ 12.19
12.12 Bit Fields ......................................................................................................................... 12.19
Case Study ...................................................................................................................... 12.21
Review Questions and Exercises ................................................................................. 12.24

UNIT V

13. File Management in C 13.3–13.22


13.1 Introduction ....................................................................................................................... 13.3
13.2 Defining and Opening a File ............................................................................................. 13.7
Contents ix
13.3 Closing a File .................................................................................................................... 13.8
13.4 Input/Output Operations on Files ...................................................................................... 13.9
13.5 Error Handling During I/O Operations ........................................................................... 13.12
13.6 Random Access to Files .................................................................................................. 13.14
13.7 Command Line Arguments ............................................................................................. 13.17
Case Study ...................................................................................................................... 13.19
Review Questions and Exercises ................................................................................... 13.21

UNIT VI

14. Data Structures 14.3–14.21


14.1 Introduction to Data Structures ......................................................................................... 14.3
14.2 Stacks ................................................................................................................................ 14.3
14.3 Queues .............................................................................................................................. 14.6
14.4 Circular Queues .............................................................................................................. 14.10
14.5 Applications of Stacks .................................................................................................... 14.11
Review Questions and Exercises ................................................................................... 14.21

UNIT VII

15. Dynamic Memory Allocation and Linked Lists 15.3–15.47


15.1 Introduction ....................................................................................................................... 15.3
15.2 Dynamic Memory Allocation ............................................................................................ 15.3
15.3 Linked Lists ...................................................................................................................... 15.9
15.3.1 Self-Referential Structure .................................................................................. 15.9
15.3.2 Singly Linked List ............................................................................................ 15.10
15.4 Advantages of Linked Lists ............................................................................................ 15.12
15.5 Types of Linked Lists...................................................................................................... 15.12
15.6 Pointers Revisited ........................................................................................................... 15.14
15.7 Basic List Operations...................................................................................................... 15.15
15.8 Application of Linked Lists ............................................................................................ 15.24
15.9 Circular Linked Lists ...................................................................................................... 15.25
15.10 Doubly Linked Lists ....................................................................................................... 15.25
15.11 Doubly Linked List Operations ...................................................................................... 15.26
15.12 Doubly Linked Circular Lists ......................................................................................... 15.35
15.13 Stacks and Queues using Linked List ............................................................................. 15.36
Case Studies ................................................................................................................... 15.40
Review Questions and Exercises ................................................................................... 15.46
16. Binary Trees and Graphs 16.1–16.25
16.1 Binary Trees—Representation and Terminology .............................................................. 16.1
16.2 Binary Tree Traversal ....................................................................................................... 16.2
16.3 Graphs ............................................................................................................................... 16.8
16.4 Graph Representation in C ................................................................................................ 16.9
16.5 Graph Traversal .............................................................................................................. 16.13
Review Questions and Exercises ................................................................................. 16.24
x Contents

UNIT VIII

17. Sorting and Searching Techniques 17.3–17.25


17.1 Introduction ....................................................................................................................... 17.3
17.2 Sorting ............................................................................................................................... 17.3
17.2.1 Sorting Efficiency .............................................................................................. 17.4
17.2.2 Exchange Sorting—Bubble Sort ........................................................................ 17.5
17.2.3 Exchange Sorting—Quick Sort .......................................................................... 17.7
17.2.4 Selection Sort ................................................................................................... 17.11
17.2.5 Merge Sort........................................................................................................ 17.13
17.2.6 Simple Insertion sort ........................................................................................ 17.15
17.2.7 Shell Sort .......................................................................................................... 17.17
17.3 Searching ........................................................................................................................ 17.18
17.3.1 Linear Search ................................................................................................... 17.18
17.3.2 Binary Search ................................................................................................... 17.20
17.3.3 Indexed Sequential Search ............................................................................... 17.23
Review Questions ........................................................................................................... 17.24
Appendix A
ASCII Values of Characters .......................................................................................A.1
Appendix B
Multiple Choice Questions .............................................................................. B.1–B.9
Appendix C
Solved Question Papers – C Programming and Data Structures
(May/June 2008) ............................................................................................... C.1–C.76
Bibliography .......................................................................................................................B.1
Chapter
1
Foreword

It gives me great pleasure to introduce C Programming and Data Structures by Dr E Balagurusamy,


publication of which heralds the completion of a book that caters completely and effectively to the
students of JNTU.
The need for a good textbook for this subject can be easily understood. Numerous books are available
to the students for the subject, but almost none of them have the right combination of simplicity, rigour,
pedagogy and syllabus compatibility. These books usually do not address one or more of the specific
problems faced by students of this subject in JNTU. There has always been a need for a good book
relevant to the requirements of the students and dealing with all aspects of the course. I am sure that the
present book will be able to fill this void.
The book has been organized and executed with lot of care and dedication. The author has been an
outstanding teacher and a pioneer of IT education in India. A conscious attempt has been made to
simplify concepts to facilitate better understanding of the subject.
Dr Balagurusamy deserves our praise and thanks for accomplishing this trying task. McGraw-Hill
Education, a prestigious publishing house, also deserves a pat on the back for doing an excellent job.

DR K. RAJAGOPAL
Vice-Chancellor
Jawaharlal Nehru Technological University
Hyderabad
Chapter
1
Preface

C is a general-purpose structured programming language that is powerful, efficient and compact. C


combines the features of high-level language with the elements of the assembler and is thus close to both
man and machine. The growth of C during the last few years has been phenomenal. It has emerged as the
language of choice for most applications due to speed, portability and compactness of code. It has now
been implemented on virtually every sort of computer, from micro to mainframe.
For many years, the de facto standard for implementing the language has been the original C Refer-
ence Manual by Kernighan and Ritchie published in 1978. During these years of growth and popularity,
C has undergone many changes. Numerous different features and facilities have been developed and
marketed. This has resulted in minor problems in terms of portability of programs. Consequently, the
American National Standard Institute (ANSI) constituted a committee to look into the language features
and produce a more comprehensive and unambiguous definition of C. The result is ANSI C. Most com-
pilers have already adopted ANSI standards.
This book incorporates all the features of ANSI C that are essential for a C programmer. The ANSI
standards are explained in detail in appropriate places. For the convenience of readers, these places
have been noted in the text by a special mention. A major highlight of this revised edition is the
inclusion of updated information on compiler C99 standard, with relevant theory and programs.
Another important addition in this edition is Appendix C containing 2008 solved question papers (4 sets).
The concept of ‘learning by example’ has been stressed throughout the book. Every important feature of
the language is treated in depth followed by a complete program example to illustrate its use. Case studies
at the end of the chapters not only describe the common ways in which C features are put together but
also show real-life applications. Wherever necessary, pictorial descriptions of concepts are included to
facilitate better understanding.
This book contains more than 100 examples and programs. All the programs have been tested using
compilers compatible to both UNIX and MS-DOS operating systems and, wherever appropriate, the
nature of output has been discussed. These programs also demonstrate the general principles of a good
programming style. 200 multiple choice questions are given to help the students test their conceptual
understanding of the subject.
The book also offers detailed discussions on Data Structures, Standard Library Functions,
Bit Fields, Linked Lists, Doubly Linked Lists, Queues, Stacks and Graphs with sample codes and
algorithms. Chapter 17 provides comprehensive information on Sorting and Searching techniques. Both
these topics are explained with sample codes. The various pros and cons of each of these techniques are
also covered.
xiv Preface
This edition comes with a CD which provides
More than 600 objective/review/debugging questions (8 units)
100 Programming exercises
Model question paper
2006 and 2007 solved question paper
Computer programs for lab
The objective of the supplementry CD is to make the students learn the programming language and
enable them to write their own programs using C and data structures.
The author is grateful to Mr A Rama Rao, Layola Institute of Technology & Management, Guntur
and Mr P Chenna Reddy, JNTU College of Engineering, Pulivendula for their useful comments and
suggestions.

E BALAGURUSAMY
Chapter
1
Road Map to the Syllabus
(Effective from August 2007)

Jawaharlal Nehru Technological University Hyderabad


I Year B.Tech T P C
4 0 6
C Programming and Data Structures
Objectives
· To make the student learn a programming language.
· To teach the student to write programs in C to solve the problems.
· To introduce the student to simple linear and non-liner data structures such as lists, stacks,
queues, trees and graphs.
Syllabus
Unit I
Algorithm / pseudo code, flowchart, program development steps, structure of C program, a simple C
program, identifiers, basic data types and sizes, constants, variables, arithmetic, relational and logical
operators, increment and decrement operators, conditional operator, bit-wise operators, assignment
operators, expressions, type conversions, conditional expressions, precedence and order of evaluation.
Input-output statements, statements and blocks, if and switch statements, loops- while, do-while and
for statements, break, continue, goto and labels, programming examples.

CHAPTER 1 – ALGORITHMS
CHAPTER 2 – OVERVIEW OF C
CHAPTER 3 – CONSTANTS, VARIABLES, AND DATA TYPES
Go To CHAPTER 4 – OPERATORS AND EXPRESSIONS
CHAPTER 5 – MANAGING INPUT AND OUTPUT OPERATIONS
CHAPTER 6 – DECISION MAKING AND BRANCHING
CHAPTER 7 – DECISION MAKING AND LOOPING

Unit II
Designing structured programs, functions, basics, parameter passing, storage classes- extern, auto,
register, static, scope rules, block structure, user-defined functions, standard library functions, recursive
functions, header files, C preprocessor, C program examples.

CHAPTER 7 – DECISION MAKING AND LOOPING


Go To
CHAPTER 10 – USER-DEFINED FUNCTIONS
xvi Road Map to the Syllabus
Unit III
Arrays- concepts, declaration, definition, accessing elements, storing elements, arrays and functions,
two-dimensional and multi-dimensional arrays, applications of arrays. pointers- concepts, initialization
of pointer variables, pointers and function arguments, address arithmetic, character pointers and
functions, pointers to pointers, pointers and multidimensional arrays, dynamic memory managements
functions, command line arguments, C program examples.

CHAPTER 8 – ARRAYS
Go To CHAPTER 9 – HANDLING OF CHARACTER
STRINGS
CHAPTER 11 – POINTERS
Unit IV
Derived types- structures- declaration, definition and initialization of structures, accessing structures,
nested structures, arrays of structures, structures and functions, pointers to structures, self-referential
structures, unions, typedef, bitfields, C program examples.

CHAPTER 12 – STRUCTURES AND UNIONS


Go To CHAPTER 15 – DYNAMIC MEMORY ALLOCATION
AND LINKED LISTS
Unit V
Input and output – concept of a file, text files and binary files, streams, standard I/o, formatted I/o, file
I/o operations, error handling, C program examples.

Go To CHAPTER 13 – FILE MANAGEMENT IN C


Unit VI
Searching – linear and binary search methods, sorting – bubble sort, selection sort, insertion sort, quick
sort, merge sort.

CHAPTER 17 – SORTING AND SEARCHING


Go To
TECHNIQUES

Unit VII
Introduction to data structures, singly linked lists, doubly linked lists, circular list, representing stacks
and queues in C using arrays and linked lists, infix to post fix conversion, postfix expression evaluation.
CHAPTER 14 – DATA STRUCTURES
Go To CHAPTER 15 – DYNAMIC MEMORY ALLOCATION
AND LINKED LISTS
Unit VIII
Trees- binary trees, terminology, representation, traversals, graphs—terminology, representation, graph
traversals (dfs and bfs)

Go To CHAPTER 16 – BINARY TREES AND GRAPHS


The C99 Standard

Computer languages are not static; they evolve, reacting to changes in methodologies, applications gen-
erally accepted practices, and hardware. C is no exception. In the case of C, two evolutionary paths were
set in motion. The first is the continuing development of the C language. The second is C++, for which
C provided the starting point. While most of the focus of the past several years has been on C++, the
refinement of C has continued unabated.
For example, reacting to the internationalization of the computing environment, the original C89
standard was amended in 1995 to include various wide-character and multibyte functions. Once the
1995 amendment was complete, work began on updating the language, in general. The end result is, of
course, C99. In the course of creating the 1999 standard, each element of the C language was thoroughly
reexamined, usage patterns were analyzed, and future demands were anticipated. As expected, C's rela-
tionship to C++ provided a backdrop for the entire process. The resulting C99 standard is a testimonial
to the strengths of the original. Very few of the key elements of C were altered. For the most part, the
changes consist of a small number of carefully selected additions to the language and the inclusion of
several new library functions. Thus C is still C!
Here we will examine those features added by C99, and the few differences between C99 and C89.

C99

Perhaps the greatest cause for concern that accompanies the release of a new language standard is the
issue of compatibility with its predecessor. Does the new specification render old programs obsolete?
Have important constructs been altered? Do I have to change the way that I write code? The answers to
these types of questions often determine the degree to which the new standard is accepted and, in the
longer term, the viability of the language itself. Fortunately, the creation of C99 was a controlled, even-
handed process that reflects the fact that several experienced pilots were at the controls. Put simply: If
you liked C the way it was, you will like the version of C defined by C99. What many programmers
think of as the world's most elegant programming language, still is! In this chapter we will examine the
changes and additions made to C by the 1999 standard. Many of these changes were mentioned in
passing in Part One. Here they are examined in closer detail. Keep in mind, however, that as of this
writing, there are no widely used compilers that support many of C99’s new features. Thus, you may
need to wait a while before you can ‘test drive’ such exciting new constructs as variable-length arrays,
restricted pointers, and the long long data type.
xviii The C99 Standard
C89 vs. C99: AN OVERVIEW

There are three general categories of changes between C89 and C99:
· Features added to C89
· Features removed from C89
· Features that have been changed or enhanced
Many of the differences between C89 and C99 are quite small, and clarify nuances of the C language.
This book will concentrate on the larger changes that affect the way programs are written.

Features Added

Perhaps the most important features added by C99 are the new keywords:
· inline
· restrict
_Bool
_Complex
_Imaginary
Other major additions include
· Variable-length arrays
· Support for complex arithmetic
· The long long int data type
· The //comment
· The ability to intersperse code and data
· Additions to the preprocessor
· Variable declarations inside the for statement
· Compound literals
· Flexible array structure members
· Designated initializers
· Changes to the printf( ) and scanf( ) family of functions
· The _ _func_ _ predefined identifier
· New libraries and headers
Most of the features added by C99 are innovations created by the standardization committee, of
which many were based on language extensions offered by a variety of C implementations. In a few
cases, however, features were borrowed from C++. The inline keyword and // style comments are exam-
ples. It is important to understand that C99 does not add C++-style classes, inheritance, or member
functions. The consensus of the committee was to keep C as C.

Features Removed

The single most important feature removed by C99 is the ‘'implicit int’ rule. In C89, in many cases when
no explicit type specifier is present, the type int is assumed. This is not allowed by C99. Also removed
is implicit function declaration. In C89, if a function was not declared before it is used, an implicit
declaration is assumed. This is not supported by C99. Both of these changes may require existing code
to be rewritten if compatibility with C99 is desired.
The C99 Standard xix
Features Changed

C99 incorporates several changes to existing features. For the most part, these changes expand features
or clarify their meaning. In a few cases, the changes restrict or narrow the applicability of a feature.
Many such changes are small, but a few are quite important, including:
· Increased translation limits
· Extended integer types
· Expanded integer type promotion rules
· Tightening of the return statement
As it affects existing programs, the change to return has the most significant effect because it might
require that code be rewritten slightly.
Throughout the remainder of this chapter, we will examine the major differences between C89 and
C99.

RESTRICT-QUALIFIED POINTERS

One of the most important innovations in C99 is the restrict type qualifier. This qualifier applies only to
pointers. A pointer qualified by restrict is initially the only means by which the object it points to can be
accessed. Access to the object by another pointer can occur only if the second pointer is based on the
first. Thus, access to the object is restricted to expressions based on the restrict-qualified pointer.
Pointers qualified by restrict are primarily used as function parameters, or to point to memory allocated
via malloc( ). The restrict qualifier does not change the semantics of a program. By qualifying a
pointer with restrict, the compiler is better able to optimize certain types of routines by making the
assumption that the restrict-qualified pointer is the sole means of access to the object. For example, if
a function specifies two restrict-qualified pointer parameters, the compiler can assume that the pointers
point to different (that is, non-overlapping) objects. For example, consider what has become the classic
example of restrict: the memcpy( ) function.
In C89, it is prototyped as shown here:
void *memcpy(void *str1, const void *str2, size_t size);
The description for memcpy( ) states that if the objects pointed to by str1 and str2 overlap, the
behaviour is undefined. Thus, memcpy( ) is guaranteed to work for only non-overlapping objects. In
C99, restrict can be used to explicitly state in memcpy( )’s prototype what C89 must explain with
words.
Here is the C99 prototype for memcpy( ):
void *memcpy
(void * restrict str1, const void * restrict str2, size_t size);
By qualifying str1 and str2 with restrict, the prototype explicitly asserts that they point to non-overlap-
ping objects. Because of the potential benefits that result from using restrict, C99 has added it to the
prototypes for many of the library functions originally defined by C89.

Inline

C99 adds the keyword inline, which applies to functions. By preceding a function declaration with
inline, you are telling the compiler to optimize calls to the function. Typically, this means that the
xx The C99 Standard
function’s code will be expanded in line, rather than called. However, inline is only a request to the
compiler, and can be ignored. Specifically, C99 states that using inline ‘suggests that calls to the func-
tion be as fast as possible.’ The inline specifier is also supported by C++, and the C99 syntax for inline
is compatible with C++.
To create an in-line function, precede its definition with the inline keyword. For example, in the
following program, calls to the function max( ) are optimized:
#include <stdio.h>
inline int max(int a, int b)
{
return a > b ? a : b;
}
int main(void)
{
int x=5, y=10;
printf("Max of %d and %d is: %d\n", x, y, max(x, y));
return 0;
}
For a typical implementation of inline, the preceding program is equivalent to this one:
#include <stdio.h>
int main(void)
{
int x=5, y=10;
printf("Max of %d and %d is: %d\n", x, y, (x>y ? x : y));
return 0;
}
The reason that inline functions are important is that they help you create more efficient code while
maintaining a structured, function-based approach. As you probably know, each time a function is
called, a significant amount of overhead is generated by the calling and return mechanism. Typically,
arguments are pushed onto the stack and various registers are saved when a function is called, and then
restored when the function returns. The trouble is that these instructions take time.
However, when a function is expanded in line, none of those operations occur. Although expanding
function calls in line can produce faster run times, it can also result in larger code size because of
duplicated code. For this reason, it is best to inline only very small functions. Further, it is also a good
idea to inline only those functions that will have significant impact on the performance of your program.
Remember: Although inline typically causes a function’s code to be expanded in line, the com-
piler can ignore this request or use some other means to optimize calls to the function.

NEW BUILT-IN DATA TYPES

C99 adds several new built-in data types. Each is examined here.
The C99 Standard xxi
_Bool

C99 adds the _Bool data type, which is capable of storing the values 1 and 0 (true and false). _Bool is
an integer type. As many readers know, C++ defines the keyword bool, which is different from _Bool.
Thus, C99 and C++ are incompatible on this point. Also, C++ defines the built-in Boolean constants
true and false, but C99 does not. However, C99 adds the header <stdbool.h>, which defines the macros
bool, true, and false. Thus, code that is compatible with C/C++ can be easily created.
The reason that _Bool rather than bool is specified as a keyword is that many existing C programs
have already defined their own custom versions of bool. By defining the Boolean type as _Bool, C99
avoids breaking this preexisting code. However, for new programs, it is best to include <stdbool.h> and
then use the bool macro.

_Complex and _Imaginary

C99 adds support for complex arithmetic, which includes the keywords _Complex and _Imaginary,
additional headers, and several new library functions. However, no implementation is required to imple-
ment imaginary types, and freestanding implementations (those without operating systems) do not have
to support complex types. Complex arithmetic was added to C99 to provide better support for numerical
programming.
The following complex types are defined:
· float _Complex
· float _Imaginary
· double _Complex
· double _Imaginary
· long double _Complex
· long double _Imaginary
The reason that _Complex and _Imaginary, rather than complex and imaginary, are specified as
keywords, is that many existing C programs have already defined their own custom complex data types
using the names complex and imaginary. By defining the keywords _Complex and _Imaginary, C99
avoids breaking this preexisting code.
The header <complex.h> defines (among other things) the macros complex and imaginary, which
expand to Complex and _Imaginary. Thus, for new programs, it is best to include <complex.h> and
then use the complex and imaginary macros.

The long long Integer Types

C99 adds the long long int and unsigned long long int data types. A long long int has a range of at
least–(263–1) to 263–1. An unsigned long long int has a minimal range of 0 to 264–1. The long long
types allow 64-bit integers to be supported as a built-in type.

Array Enhancements

C99 has added two important features to arrays: variable length and the ability to include type qualifiers
in their declarations.
xxii The C99 Standard
Variable-Length Arrays

In C89, array dimensions must be declared using integer constant expressions, and the size of an array is
fixed at compile time. C99 changes this for certain circumstances. In C99, you can declare an array
whose dimensions are specified by any valid integer expression, including those whose value is known
only at run time. This is called a variable-length array (VLA). However, only local arrays (that is,
those with block scope or prototype scope) can be of variable length.
Here is an example of a variable-length array:
void f(int dim1, int dim2)
{
int matrix[dim1] [dim2]; /* a variable-length, 2-D array */
/* . . . */
}
Here, the size of matrix is determined by the values passed to f( ) in dim1 and dim2. Thus, each call to
f( ) can result in matrix being created with different dimensions.
It is important to understand that variable-length arrays do not change their dimensions during their
lifetime. (That is, they are not dynamic arrays.) Rather, a variable-length array can be created with a
different size each time its declaration is encountered.
You can specify a variable-length array of an unspecified size by using * as the size.
The inclusion of variable-length arrays causes a small change in the sizeof operator. In general, sizeof is
a compile-time operator. That is, it is normally translated into an integer constant whose value is equal
to the size of the type or object when a program is compiled. However, when it is applied to a variable-
length array, sizeof is evaluated at run time. This change is necessary because the size of a variable-
length array cannot be known until run time.
One of the major reasons for the addition of variable-length arrays to C99 is to support numeric
processing. Of course, it is a feature that has widespread applicability. But remember, variable-length
arrays are not supported by C89 (or by C++).

Use of Type Qualifiers in an Array Declaration

In C99 you can use the keyword static inside the brackets of an array declaration when that declaration
is for a function parameter. It tells the compiler that the array pointed to by the parameter will always
contain at least the specified number of elements. Here is an example:
int f(char str [static 80])
{
// here, str is always a pointer to an 80-element array
// . . .
}
In this example, str is guaranteed to point to the start of an array of chars that contains at least 80
elements.
You can also use the keywords restrict, volatile, and const inside the brackets, but only for function
parameters. Using restrict specifies that the pointer is the sole initial means of access to the object.
The C99 Standard xxiii
Using const states that the same array is always pointed to (that is, the pointer always points to the same
object). The use of volatile is allowed, but meaningless.

Single-Line Comments

C99 adds the single-line comment to C. This type of comment begins with // and runs to the end of
the line.
For example:
// This is a comment
int i; // this is another comment
Single-line comments are also supported by C++. They are convenient when only brief, single-line
remarks are needed. Many programmers use C’s traditional multiline comments for longer descriptions,
reserving single-line comments for “play-by-play” explanations.
Interspersed Code and Declarations In C89, within a block, all declarations must precede the first
code statement. This rule does not apply for C99.
For example:
#include <stdio.h>
int main(void)
{
int i;
i = 10;
int j; // wrong for C89; OK for C99 and C++
j = i;
printf(“%d %d”, i, j);
return 0;
}
Here, the statement i = 10; comes between the declaration of i and the declaration of j. This is not
allowed by C89. It is allowed by C99 (and by C++). The ability to intersperse declarations and code is
widely used in C++.
Adding this feature to C makes it easier to write code that will be used in both environments.

PREPROCESSOR CHANGES

C99 makes a number of small changes to the preprocessor.

Variable Argument Lists

Perhaps the most important change to the preprocessor is the ability to create macros that take a variable
number of arguments. This is indicated by an ellipsis (. . .) in the definition of the macro. The built-in
preprocessing identifier _ _VA_ARGS_ _ determines where the arguments will be substituted.
xxiv The C99 Standard
For example, given this definition
#define MyMax(. . .) max(__VA_ARGS__)
this statement
MyMax(a, b);
is transformed into
max(a, b);

There can be other arguments prior to the variable ones. For example, given
#define compare(compfunc, . . .) compfunc(__VA_ARGS__)
this statement
compare(strcmp, “one”, “two”);
is transformed into
strcmp(“one”, “two”);
As the example shows, _ _VA_ARGS_ _ is replaced by all of the remaining arguments.

The _Pragma Operator

C99 includes another way to specify a pragma in a program: the _Pragma operator. It has the following
general form:
_Pragma (“directive”)
Here, directive is the pragma being invoked. The addition of the _Pragma operator allows pragmas to
participate in macro replacement.

Built-in Pragmas

C99 defines the following built-in pragmas:


Pragma Meaning
STDC FP_CONTRACT ON/OFF/DEFAULT When on, floating-point expressions are
treated as indivisible units that are handled
by hardware-based methods. The default
state is implementation defined.
STDC FENV_ACCESS ON/OFF/DEFAULT Tells the compiler that the floating-point en-
vironment might be accessed. The default
state is implementation defined.
STDC CX_LIMITED_RANGE ON/OFF/DEFAULT When on, tells the compiler that certain for-
mulas involving complex values are safe. The
default state is off.
You should refer to your compiler’s documentation for details concerning these pragmas.
The C99 Standard xxv
Additional Built-in Macros

C99 adds the following macros to those already supported by C89:

_ _STDC_HOSTED_ _ 1 if an operating system is present.

_ _STDC_VERSION_ _ 199901L or greater. Represents version of C.

_ _STDC_IEC_559_ _ 1 if IEC 60559 floating-point arithmetic is supported.

_ _STDC_IEC_599_COMPLEX_ _ 1 if IEC 60559 complex arithmetic is supported.

_ _STDC_ISO_10646_ _ A value of the form yyyymmL that states the year and
month of the ISO/IEC 10646 specification supported by the
compiler.

Declaring Variables within a for Loop

C99 enhances the for loop by allowing one or more variables to be declared within the initialization
portion of the loop. A variable declared in this way has its scope limited to the block of code controlled
by that statement. That is, a variable declared within a for loop will be local to that loop. This feature
has been included in C because often the variable that controls a for loop is needed only by that loop. By
localizing this variable to the loop, unwanted side effects can be avoided.
Here is an example that declares a variable within the initialization portion of a for loop:
#include <stdio.h>
int main(void)
{
// declare i within for
for(int i=0; i < 10; i++)
printf(“%d ”, i);
return 0;
}
Here, i is declared within the for loop, rather than prior to it.
As mentioned, a variable declared within a for is local to that loop. Consider the following program.
Notice that the variable i is declared twice: at the start of main( ) and inside the for loop.
#include <stdio.h>
int main(void)
{
int i = -99;
// declare i within for
for(int i=0; i < 10; i++)
printf(“%d”, i);
printf(“\n”);
xxvi The C99 Standard
printf(“Value of i is: %d”, i); // displays-99
return 0;
}
This program displays the following:
0123456789
Value of i is: -99
As the output shows, once the for loop ends, the scope of the i declared within that loop ends. Thus, the
final printf( ) statement displays –99, the value of the i declared at the start of main( ).
The ability to declare a loop-control variable inside the for has been available in C++ for quite some
time, and is widely used. It is expected that most C programmers will do the same.

Compound Literals

C99 allows you to define compound literals, which are array, structure, or union expressions designat-
ing objects of the given type. A compound literal is created by specifying a parenthesized type name,
which is then followed by an initialization list, which must be enclosed between curly braces. When the
type name is an array, its size must not be specified. The object created is unnamed.
Here is an example of a compound literal:
double *fp = (double[]) {1.0, 2.0, 3.0};
This creates a pointer to double, called fp, which points to the first of a three-element array of double
values.
A compound literal created at file scope exists throughout the lifetime of the program. A compound
literal created within a block is a local object that is destroyed when the block is left.

Flexible Array Structure Members

C99 allows you to specify an unsized array as the last member of a structure. (The structure must have
at least one other member prior to the flexible array member.) This is referred to as a flexible array
member. It allows a structure to contain an array of variable size. The size of such a structure returned
by sizeof does not include memory for the flexible array.
Typically, memory to hold a structure containing a flexible array member is allocated dynamically,
using malloc( ). Extra memory must be allocated beyond the size of the structure to accommodate the
desired size of the flexible array.
For example, given
struct mystruct {
int a;
int b;
float fa[]; // flexible array
};
the following statement allocates room for a 10-element array:
The C99 Standard xxvii
struct mystruct *p;
p = (struct mystruct *) malloc(sizeof(struct mystruct) + 10 *
sizeof(float));
Since sizeof(struct mystruct) yields a value that does not include any memory for fa, room for the 10-
element array of floats is added by the expression
10 * sizeof(float)
when malloc( ) is called.

Designated Initializers

A new feature of C99 that will be especially helpful to those programmers working with sparse arrays is
designated initializers. Designators take two forms: one for arrays and one for structures and unions.
For arrays, the following form is used,
[index] = val
where index specifies the element being initialized to the value val. For example:
int a[10] = { [0] = 100, [3] = 200 };
Here, only elements 0 and 3 are initialized.
For structure or union members, the form used is:
. member-name
Using a designator with a structure allows an easy means of initializing only selected members of a
structure.
For example:
struct mystruct {
int a;
int b;
int c;
} ob = { .c = 30, .a = 10 };
Here, b is uninitialized.
Using designators also allows you to initialize a structure without knowing the order of its members.
This is useful for predefined structures, such as div_t, or for structures defined by some third party.

Additions to the printf( ) and scanf( ) Family of Functions

C99 adds to the printf( ) and scanf( ) family of functions the ability to handle the long long int and
unsigned long long int data types. The format modifier for long long is ll.
For example, the following fragment shows how to output a long long int and an unsigned long long
int:
long long int val;
unsigned long long int u_val;
printf(“%lld %llu”, val, val2);
xxviii The C99 Standard
The II can be applied to the d, i, o, u, and x format specifiers for both printf( ) and scanf( ).
C99 adds the hh modifier, which is used to specify a char argument when using the d, i, o, u, or x
format specifiers. Both the ll and hh specifiers can also be applied to the n specifier.
The format specifiers a and A, which were added to printf( ), cause a floating-point value to be
output in a hexadecimal format. The format of the value is
[-]0xh.hhhhp+d
When A is used, the x and the p are uppercase. The format specifiers a and A were also added to
scanf( ), and read a floating-point value.
In a call to printf( ), C99 allows the 1 modifier to be added to the %f specifier (as in %lf), but it has
no effect. In C89, %lf is undefined for printf( ).

NEW LIBRARIES IN C99

C99 adds several new libraries and headers. They are shown here:
Header Purpose
<complex.h> Supports complex arithmetic.
<fenv.h> Gives access to the floating-point status flags and other
aspects of the floating-point environment.
<inttypes.h> Defines a standard, portable set of integer type names.
Also supports functions that handle greatest-width inte-
gers.
<iso646.h> Added in 1995 by Amendment 1. Defines macros that
correspond to various operators, such as && and ^.
<stdbool.h> Supports Boolean data types. Defines the macros bool,
true, and false, which help with C++ compatibility.
<stdint.h> Defines a standard, portable set of integer type names.
This header is included by <inttypes.h>.
<tgmath.h> Defines type-generic floating-point macros.
<wchar.h> Added in 1995 by Amendment 1. Supports multibyte and
widecharacter functions.
<wctype.h> Added in 1995 by Amendment 1. Supports multibyte and
widecharacter classification functions.

The _ _func_ _ Predefined Identifier

C99 defines _ _func_ _, which specifies the name (as a string literal) of the function in which
_ _func_ _ occurs.
For example:
void StrUpper(char *str)
The C99 Standard xxix
{
static int i = 0;
i++;
printf(“%s has been called %d time(s).\n”, __func__, i);
while(*str) {
*str = toupper(*str);
str++;
}
}
When called the first time, StrUpper( ) will display this output:
StrUpper has been called 1 time(s).

INCREASED TRANSLATION LIMITS

The term ‘translation limits’ refers to the minimum number of various elements that a C compiler must
be able to handle. These include such things as the length of identifiers, levels of nesting, number of case
statements, and number of members allowed in a structure or union. C99 has increased several of these
limits beyond the already generous ones specified by C89.
Here are some examples:
Limit C89 C99
Nesting levels of blocks 15 127
Nesting levels of conditional inclusion 8 63
Significant characters in an internal identifier 31 63
Significant characters in an external identifier 6 31
Members of a structure or union 127 1023
Arguments in a function call 31 127

Implicit int No Longer Supported

Several years ago, C++ dropped the implicit int rule, and with the advent of C99, C follows suit. In C89,
the implicit int rule states that in the absence of an explicit type specifier, the type int is assumed. The
most common use of the implicit int rule was in the return type of functions. In the past, C programmers
often omitted the int when declaring functions that returned an int value.
For example, in the early days of C, main( ) was often written like this:
main ()
{
/* . . . */
}
xxx The C99 Standard
In this approach, the return type was simply allowed to default to int. In C99 (and in C++) this default no
longer occurs, and the int must be explicitly specified, as it is for all of the programs in
this book.
Here is another example. In the past a function such as
int isEven(int val)
{
return !(val%2);
}
would often have been written like this:
/* use integer default */
isEven (int val)
{
return !(val%2);
}
In the first instance, the return type of int is explicitly specified. In the second, it is assumed by default.
The implicit int rule does not apply only to function return values (although that was its most
common use).
For example, for C89 and earlier, the isEven( ) function could also be written like this:
isEven(const val)
{
return ! (val%2);
}
Here, the parameter val also defaults to int—in this case, const int. Again, this default to int is not
supported by C99.
Note Technically, a C99-compatible compiler can accept code containing implied ints after re-
porting a warning error. This allows old code to be compiled. However, there is no requirement
that a C99-compatible compiler accept such code.

Implicit Function Declarations Have Been Removed

In C89, if a function is called without a prior explicit declaration, then an implicit declaration of that
function is created. This implicit declaration has the following form:
extern int name( );
Implicit function declarations are no longer supported by C99.
Note Technically, a C99-compatible compiler can accept code containing implied function dec-
larations after reporting a warning error. This allows old code to be compiled. However, there is
no requirement that a C99-compatible compiler accept such code.
The C99 Standard xxxi
Restrictions on return

In C89, a function that has a non-void return type (that is, a function that supposedly returns a value)
could use a return statement that did not include a value. Although this creates undefined behaviour, it
was not technically illegal. In C99, a non-void function must use a return statement that returns a
value. That is, in C99, if a function is specified as returning a value, any return statement within it must
have a value associated with it. Thus, the following function is technically valid for C89, but invalid for
C99:
int f(void)
{
/* . . . */
return ; // in C99, this statement must return a value
}

Extended Integer Types

C99 defines several extended integer types in <stdint.h>. Extended types include exact-width, mini-
mum-width, maximum-width, and fastest integer types.
Here is a sampling:

Extended Type Meaning

int16_t An integer consisting of exactly 16 bits


int_least16_t An integer consisting of at least 16 bits
int_fast32_t Fastest integer type that has at least 32 bits
intmax_t Largest integer type
uintmax_t Largest unsigned integer type
The extended types make it easier for you to write portable code.
For loop changes In a for-loop, the first expression may be a declaration, with a scope encompassing
only the loop.
for (decl; pred; inc)
stmt;
is equivalent to:
{
decl;
for (; pred; inc)
stmt;
}
Type specifiers or data types Type specifiers: new combinations added for:
· _Bool
· float _Complex, double _Complex, long double _Complex
· signed and unsigned long long int.
xxxii The C99 Standard
New type long long (signed and unsigned), at least 64 bits wide.
Note: It seems that these type specifiers may occur in any order, e.g, _Complex double long
or signed long int long would be legal.
The implementation of the complex types is defined by the standard to use cartesian coordinates (real
and imaginary part), i.e. forbids an implementation using polar coordinates (distance from [0,0] and an
angle). Furthermore, the same paragraph also specifies that a complex type has the same alignment
requirements as an array of two elements of the corresponding floating types, the first must be the real
part and the second the imaginary part.
Objects of the new boolean type _Bool may have one of the two values zero or one.

Format Modifiers for Printf( ) Added by C99

C99 adds several format modifiers to printf( ): hh, ll, j, z, and t. The hh modifier can be applied to d, i,
o, u, x, X, or n. It specifies that the corresponding argument is a signed or unsigned char value or, in
the case of n, a pointer to a signed char variable. The ll modifier also can be applied to d, i, o, u, x, X,
or n. It specifies that the corresponding argument is a signed or unsigned long long int value or, in the
case of n, a pointer to a long long int. C99 also allows the l to be applied to the floating-point specifiers
a, A, e, E, f, F, g, and G, but it has no effect. The j format modifier, which applies to d, i, o, u, x, X, or
n, specifies that the matching argument is of type intmax_t or uintmax_t. These types are declared in
<stdint.h> and specify greatest-width integers. The z format modifier, which applies to d, i, o, u, x, X,
or n, specifies that the matching argument is of type size_t. This type is declared in <stddef.h> and
specifies the result of sizeof.
The t format modifier, which applies to d, i, o, u, x, X, or n, specifies that the matching argument is of
type ptrdiff_t. This type is declared in <stddef.h> and specifies the difference between two pointers.

Sample code

#include <stdio.h>
int main(void)
{
/* This prints ''this is a test" left justified
in 20 character field.
*/
printf(“%-20s”, “this is a test”);
/* This prints a float with 3 decimal places in a 10
character field. The output will be " 12.235".
*/
printf(“%10.3f”, 12.234657);
return 0;
}

Changes to the Integer Promotion Rules

C99 enhances the integer promotion rules. In C89, a value of type char, short int , or an int bit-field can
be used in place of an int or unsigned int in an expression. If the promoted value can be held in an int,
the promotion is made to int; otherwise, the original value is promoted to unsigned int.
The C99 Standard xxxiii
In C99, each of the integer types is assigned a rank. For example, the rank of long long int is greater
than int, which is greater than char, and so on. In an expression, any integer type that has a rank less
than int or unsigned int can be used in place of an int or unsigned int.

THE PRINTF( ) FORMAT SPECIFIERS

Code Format
%a Hexadecimal output in the form 0xh.hhhhp+d (C99 only).
%A Hexadecimal output in the form 0Xh.hhhhP+d (C99 only).
%c Character.
%d Signed decimal integers.
%i Signed decimal integers.
%e Scientific notation (lowercase e).
%E Scientific notation (uppercase E).
%f Decimal floating point.
%F Decimal floating point (C99 only; produces uppercase INF, INFINITY,
or NAN when applied to infinity or a value that is not a number. The %f
specifier produces lowercase equivalents.)
%g Uses %e or %f, whichever is shorter.
%G Uses %E or %F, whichever is shorter.
%o Unsigned octal.
%s String of characters.
%u Unsigned decimal integers.
%x Unsigned hexadecimal (lowercase letters).
%X Unsigned hexadecimal (uppercase letters).
%p Displays a pointer.
%n The associated argument must be a pointer to an integer. This specifier
causes the number of characters written (up to the point at which the
%n is encountered) to be stored in that integer.
%% Prints a percent sign.

RESTRICT-QUALIFIED POINTERS

The C99 standard has added a new type qualifier that applies only to pointers: restrict. A pointer
qualified by restrict is initially the only means by which the object it points to is accessed. Access to the
object by another pointer can occur only if the second pointer is based on the first. Thus, access to the
object is restricted to expressions based on the restrict-qualified pointer. Pointers qualified by restrict
are primarily used as function parameters or to point to memory allocated via malloc( ). By qualifying
a pointer with restrict, the compiler is better able to optimize certain types of routines. For example, if
a function specifies two restrict-qualified pointer parameters, then the compiler can assume that the
pointers point to different (that is, non-overlapping) objects. The restrict qualifier does not change the
semantics of a program.
xxxiv The C99 Standard

1. /* Write a program to test the given string is palindrome or not. implement the program
by using _Bool datatype */
#include<stdio.h>
#include<string.h>
enum _Bool{false,true}; // _Bool DataType which is capable of
storing the vales 0 and 1
enum _Bool IsPalindrome(char string[]) // _Bool datatype
{
int left,right,len=strlen(string);
enum _Bool matched=true; // _Bool datatype
if(len==0)
return 0;
left=0;
right=len-1;
/* Compare the first and last letter,second & second last & so
on */
while(left<right&&matched)
{
if(string[left]!=string[right])
matched=false;
else
{
left++;
right--;
}
}
return matched;
}

int main()
{
char string[40];
clrscr();
printf("****Program to test if the given string is a
palindrome****\n");
printf("Enter a string:");
scanf("%s",string);
if(IsPalindrome(string))
printf("The given string %s is a palindrome\n",string);
else
printf("The given string %s is not a palindrome\n",string);
getch();
return 0;
}
The C99 Standard xxxv

2. /* In C89, within a block, all declarations must precede the first code statement. This rule
does not apply for C99 */
#include<stdio.h>
int main(void)
{
int i;
i=10;
int j; //wrong for c89; ok for c99
j=i;
clrscr();
printf("%d %d",i,j);
return 0;
getch();
}
3. /* Write a program to print the signed and unsigned numbers by using C99 standards*/
#include<stdio.h>
int main(void)
{
int i= -99;
{
for(int i=0; i<10; i++) //declare i within for
printf("%d",i);
printf("\n");
}
printf("Value of i is: %d",i); //display-99
return 0;
}
4. /* Write a program to open the file by using C99 standards */
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
if((fp=fopen("test","wb"))==NULL);
{
printf("cannot open file.\n");
exit(1);
fprintf(fp,"this is a test %d %f", 10,20.01); // fprintf
fclose(fp);
return 0;
}
}
xxxvi The C99 Standard

5. /* Write a C program that uses functions to perform the following operations by using
C99 standards(_Complex, _Imaginary):
(i) Reading a complex number
(ii) Writing a complex number
(iii) Addition of two complex numbers
(iv) Multiplication of two complex numbers
(Note: represent complex number using a structure.) */
#include<stdio.h>
#include<math.h>
#include<complex.h>

void _Complex(int opern);

struct comp
{
double realpart;
double _Imaginary;
};

void main()
{
int opern;
clrscr();
printf("\n\n \t\t\t***** MAIN MENU *****");
printf("\n\n Select your option: \n1 : ADD\n2 : MULTIPLY\n0 :
EXIT \n\n\t\t Enter your Option [ ]\b\b");

scanf("%d",&opern);

switch(opern)
{
case 0:
exit(0);
case 1:
case 2:
_Complex(opern);
default:
main();
}

void _Complex(int opern)


The C99 Standard xxxvii

{
struct comp w1, w2, w;
printf("\n Enter two Complex Numbers (x+iy):\n Real Part of
First Number:");
scanf("%lf",&w1.realpart);
printf("\n Imaginary Part of First Number:");
scanf("%lf",&w1._Imaginary);
printf("\n Real Part of Second Number:");
scanf("%lf",&w2.realpart);
printf("\n Imaginary Part of Second Number:");
scanf("%lf",&w2._Imaginary);
switch(opern)
{
/*addition of complex number*/
case 1:
w.realpart = w1.realpart+w2.realpart;
w._Imaginary = w1._Imaginary+w2._Imaginary;
break;

/*multiplication of complex number*/


case 2:
w.realpart=(w1.realpart*w2.realpart)-
(w1._Imaginary*w2._Imaginary);

w._Imaginary=(w1.realpart*w2._Imaginary)+(w1._Imaginary*w2.realpart);
break;
}

if (w._Imaginary>0)
printf("\n Answer = %lf+%lfi",w.realpart,w._Imaginary);
else
printf("\n Answer = %lf%lfi",w.realpart,w._Imaginary);
getch();
main();
}
6. /* Write a program to find the maximum number by using C99 standards(inline keyword)
*/
#include <stdio.h>
inline int max(int a, int b) // inline keyword
{
return a > b ? a : b;
xxxviii The C99 Standard

}
int main(void)
{
int x=5, y=10;
printf("Max of %d and %d is: %d\n", x,y,max(x,y));

return 0;
}
7. /* Write a C program to generate Pascal's Triangle by using C99 standards */
#include<stdio.h>
#include<conio.h>

void main()
{
int bin,q,r;
clrscr();
bin=1;
q=0;

printf("Rows you want to input:");


scanf("%d",&r);

printf("\nPascal's Triangle:\n");

while(q<r)
{
for(int p=40-3*q;p>0;--p) // declare p with in for
printf(" ");
for(int x=0;x<=q;++x) // declare x with in for
{
if((x==0)||(q==0))
bin=1;
else
bin=(bin*(q-x+1))/x;
printf("%6d",bin);
}

printf("\n");
++q;
}
getch();
}
The C99 Standard xxxix

8. /* Write a C program to generate all the prime numbers between 1 and n, where n is a
value supplied by the user by using C99 standards.(long long int,declare variables with in
for loop) */
#include <stdio.h>

void main()
{
long long int no,check; // long long int
clrscr();
printf("<-----------------------PRIME NO. SERIES--------------
---------->");
printf("\n\n\n\t\t\tINPUT THE VALUE OF N: ");
scanf("%d",&no);
printf("\n\nTHE PRIME NO. SERIES B/W 1 TO %lld : \n\n",no);

for(int counter = 1; counter <= no; counter++) // declare


counter with in for
{
check = 0;
//THIS LOOP WILL CHECK A NO TO BE PRIME NO. OR NOT.

for(int counter1 = counter-1; counter1 > 1 ; counter1--)


if(counter%counter1 == 0)
{
check++; // INCREMENT CHECK IF NO. IS NOT A PRIME NO.
break;
}
if(check == 0)
printf("%d\t",counter);
}
getch();
}
9. /* Write a program to print text and numbers by using C99 standards */
#include<stdio.h>
int main(void)
{
printf("%-20s","this is a test"); // left justified
printf("%10.3f",12.234657);
return 0;
}
xl The C99 Standard

10. /* Write a program for addition of matrices by using the restrict keyword */
void fadd(double a[static restrict 10],
const double b[static restrict 10]) // restrict keyword, restricrts a and b
{
int i;
for(i=0; i<10; i++)
{
if(a[i] < 0.0)
return;
a[i] += b[i];
}
return;
}
11. /* Write a C program to find the roots of a quadratic equation by using format modifiers
in C99. */
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
float a,b,c,root1,root2;
clrscr();
printf("\n Enter values of a,b,c for finding roots of a qua-
dratic eq:\n");
scanf("%f%f%f",&a,&b,&c);
/*checking condition*/
if(b*b>4*a*c)
{
root1=-b+sqrt(b*b-4*a*c)/2*a;
root2=-b-sqrt(b*b-4*a*c)/2*a;
printf("\n*****ROOTS ARE*****\n");
printf("\nroot1=%1.3f\nroot2=%1.2f",root1,root2); //format
modifiers for printf()
}
else
printf("\n Imaginary Roots.");
getch();
}
The C99 Standard xli

12. /* Write a C program to find the sum of individual digits of a positive integer by using long
long int in C99 standards*/
#include<stdio.h>
#include<conio.h>
void main()
{
long long int num, k=1, sum=0; // long long int
clrscr();
printf("Enter the number whose digits are to be added:");
scanf("%lld",&num);
while(num!=0)
{
k=num%10;
sum=sum+k;
k=num/10;
num=k;
}
printf("Sum of the digits:%lld",sum);
getch();
}
UNIT I
Chapter
1
Algorithms

1.1 INTRODUCTION

There is a tremendous similarity between the human actions and the way a computer performs various
functions. Nicholas Wirth—the inventor of a computer language—‘Pascal’ used to say “A program is
equal to algorithm + data”. In the next few chapters, we will explore the meaning of these terms; first
learning about and clearly analyzing human actions and then showing how computers also act similarly,
thereby demystifying the complexity that surrounds computers.
We perform hundreds of activities during a day. An activity could be anything from brushing teeth to
making tea and from going to work to having dinner. There are two basic ways to describe in detail, any
of these activities:
1. By describing the process step-by-step—called as algorithm.
2. By representing the various steps in the form of a diagram—called as flow chart.

1.1.1 Algorithm/pseudocode

The term algorithm is very popular in the computer literature. An algorithm is also called pseudocode.
At first, it might sound very complex. However, it is very simple to understand. In fact, we all perform
hundreds of algorithms in our daily life without even realizing it!
Algorithm is the step-by-step method of performing any task. When we break up a big task into
smaller steps, what we actually do is to create an algorithm. In other words, we perform hundreds of
algorithms. Brushing teeth, making tea, getting ready for school or office, are all different algorithms.
For example, when making a cup of tea, we follow the algorithm as shown in Fig. 1.1 (with a few
variations, of course!).
An interesting observation: Many steps can be further sub-divided into still smaller sub-steps. For
example, we can write an algorithm for Step 1 (Boil water) by writing detailed steps for boiling water.
However, it is up to an individual as to how detailed steps one should describe. Each step can be called
as an instruction. Also, we can notice that steps 4 and 5 can be executed in parallel, i.e. we can boil
milk while we wait. In actual life, there is a tremendous amount of parallelism in many of our actions.
We normally hear, see and feel simultaneously to comprehend a situation. Within this also, when we see
1.4 C Programming and Data Structures
a picture, for example, actually we see millions of spots of the picture to generate an image on our retina
while we compare all dots in parallel with already stored millions of images to identify an object instan-
taneously! Therefore, parallel computing was developed to speed up things and ultimately try to
imitate human actions in artificial intelligence. We need not discuss these in detail in later chapters,
but continue with serial algorithms for now.
Begin
1. Boil water.
2. Put tea powder in the kettle.
3. Pour boiled water in the kettle.
4. Wait for three minutes.
5. Boil milk.
6. Put boiled milk in a cup.
7. Add sugar to the cup.
8. Empty the kettle in the cup.
9. Stir the cup with a spoon.
End

Fig. 1.1 Algorithm for making tea

1.1.2 Flow Chart

There is another way to write the steps involved in any process. This is by making use of various
symbols. The symbols form a diagram that represents the steps in a pictorial fashion similar to an
algorithm. This is also very easy to understand. Such a diagram is called flow chart. In its simplest
form, a flow chart consists of a series of rectangles connected to each other by arrows. The rectangles
represent the various steps and the arrows designate the flow. A flow chart for our tea-making example
could be drawn as in Fig. 1.2.

Fig. 1.2 Flow chart for making tea


Algorithms 1.5
As can be seen, these are very primary concepts that we learn since childhood. We learn to make tea
by observing someone making tea: just like any other activity. Thus, the algorithm for making tea was
recorded in our brain long back somewhere deep—in our memory. There is another part of our memory
which stores the details of our current activity or thoughts. Whenever we want to make tea, somehow
this algorithm is brought back from our deep memory into the current memory (i.e. it is ‘remembered’)
and then it is actually executed. This concept of storing something in memory, retrieving it back in the
current memory (i.e. ‘remembering’ it) whenever needed and actually performing a task is very primi-
tive, yet extremely important, as we shall see, due to its similarity with computers.

1.2 THREE BASIC OPERATIONS

The tea-making algorithm and flow chart discussed earlier were quite simple. One step followed another
in a sequential fashion. However, things are not so simple in real life! There are so many ifs and buts.
For example, consider the following statements:
∑ If it is 9 am, I must go to the office.
∑ If it is raining, take your umbrella with you.
∑ Read each line and say it loudly until the end of this page.
How do we take care of such things in an algorithm and a flow chart? And how many different kinds
of situations we must cater to? This section attempts to answer these questions.
In general, the steps in an algorithm can be divided in three basic categories as listed below:
∑ Sequence—A series of steps that we perform one after the other
∑ Selection—Making a choice from multiple available options
∑ Iteration—Performing repetitive tasks
These three basic categories of activities combined in different ways can form the basis for describ-
ing any algorithm. It might sound surprising initially. But it is true. Think of any situation in our daily
life and try to fit it in one of the three categories: it works!
Let us now look at each of the categories in more detail.

1.2.1 Sequence

A sequence is a series of steps that we follow in any algorithm without any break, i.e. unconditionally.
The algorithm for making tea described in Fig. 1.1 belongs to this category. Figure 1.3 describes another
algorithm in this category for ‘boiling water’. What this means is that we have exploded further the step
or instruction 1 in the algorithm for making tea given in Fig. 1.1. We can explode all such steps in Fig.
1.1 in the following way.
Begin
1. Take a utensil.
2. Take the utensil to the water tap.
3. Open the tap.
4. Fill the utensil with water.
5. Close the tap.
6. Put the utensil on the gas or in the oven.
7. Start the gas or the oven.
8. Wait until the water boils.
9. Switch off the gas or the oven.
End

Fig. 1.3 Algorithm for boiling water


1.6 C Programming and Data Structures

We will not draw the flow chart for boiling water. It should be clear by now that it is a matter of
writing all of the above 9 steps in rectangles one after the other; each connected to its successor by an
arrow.

1.2.2 Selection

We will quickly realize that only ‘sequence’ is not good enough to express an algorithm. Quite a few of
our actions depend on certain events. Thus, there is a need to be able to make a choice from many
available options. Therefore, there is a process of selection. A selection statement generally takes the
form as shown in Fig. 1.4.
1. If
2. Then
3. End-if

Fig. 1.4 Selection

We take so many decisions, small and big, in our daily life without even realizing it. For example, if
it is hot, we switch on the fan. We can depict this selection process as shown in Fig. 1.5.
1. If it is hot
2. Then switch on the fan
3. End-if

Fig. 1.5 Example of a selection

Note that End-if is an additional step that indicates the end of the selection process. A question may
be asked: is End-if really necessary? Let us illustrate this by the following selection process that does
not have an End-if. Refer to Fig. 1.6.
1. If the guest wants tea
2. Then make tea
3. Offer biscuits

Fig. 1.6 Importance of End-if

What do we do if the guest does not want tea? Do we offer him biscuits? It is not clear from the
selection process described above. It can be argued and proved either way. That is, we are not sure
whether the Offer biscuits portion is a part of our If condition or not. A miserly person would always say
that he considers Offer biscuits as a part of the condition, and hence would only offer biscuits to some-
one who wants tea! Hence, it is always better to end a selection process with an End-if to avoid any
confusion at least for our algorithms. Different computer programming languages have different con-
ventions.
The position and placement of End-if instructions can change the meaning of the entire algorithm as
shown in Fig. 1.7 (a) and 1.7 (b). Let us study the algorithm shown in Fig. 1.7 (a). If the guest wants tea,
the algorithm will execute step 2 after step 1 (i.e. make tea), then fall through step 3 and then step 4 (i.e.
offer biscuits). Thus, if the guest wants tea, he gets the biscuits, too! Now, let us trace the algorithm if
the guest does not want tea. In this case, the algorithm will follow step 3 after step 1 (i.e. skip the tea)
and then fall through step 4 (i.e. offer biscuits). Thus, biscuits will be offered regardless of tea. If we
study algorithm shown in Fig. 1.7 (b), we will notice that biscuits are offered only with tea. If the guest
Exploring the Variety of Random
Documents with Different Content
reflections of the kind. Speaking of a new arbour he had made, be
says—

“From thence I have seen three or four as fine sunsets as I at


any time have seen, and if the gradual going down, and last,
last twinkle of the once radiant orb, the instant when it was,
and was not, to be seen—made me think of that awful moment
when the last sigh consigns the departing soul to different if not
distant scenes, the glorious effulgence gilding the western
horizon with inimitable magnificence, naturally suggested the
idea of celestial splendour, and inspired the wish that (through
the assistance of His grace) a faithful obedience to the
requirings of our great Maker and Master, may in that solemn
season justify the hope of my being admitted into that city
which hath no need of the sun, neither of the moon to shine on
it, for the glory of God lightens it, and the Lamb is the light
thereof.”

The Wrekin was a favourite object; to its summit he made his annual
pilgrimage, together with his family, his Dale relations, his clerks,
and most of the members of the little Society of Friends. The
following bit of landscape painting betrays a master hand, and is so
faithful in itself, depicting no less the features of the country than
the genius of his mind, that we incorporate it with our present
sketch:—

“We went upon the Wrekin,” he writes, “sooner than usual this
year, that my children might partake of the pleasure. The
weather was pleasant, though rather windy. From the top of
that hill the prospect is so rich, so extensive, so various, that,
considered as a landscape only, it beggars all description; and
yet I cannot forbear, as thou desirest it, mentioning the tufted
trees in the adjoining woods, upon which, occasioned perhaps
by the uncommonness of the scene, I always look down with a
particular pleasure, as well as survey those more distant, which
are interspersed among the corn and meadows, contrasted with
the new-ploughed fallow-grounds and pastures with cattle; the
towns and villages, gentlemen’s seats, farm-houses, enrich and
diversify the prospect, whilst the various companies of harvest
men in the different farms within view enliven the scene. Nor
are the rivers that glitter among the laughing meadows, or the
stupendous mountains which, though distant, appear awfully
dreary without their effect considered part of the landscape
only. But not to confine the entertainment to visual enjoyment,
what an intellectual feast does the prospect from that hill afford
when beheld, ‘or with the curious or pious eye.’ Is not infinite
power exerted, and infinite goodness displayed, in the various
as well as plentiful provision for our several wants. Should not
the consideration expand over hearts with desires to contribute
to the relief of those whose indigence, excluding them from an
equal participation of the general feast, is for a trial of their faith
and patience and of our gratitude and obedience! Whilst with
an appropriation of sentiment which receives propriety from the
consciousness of our unworthiness, we substitute a particular
for the general exclamation of humble admiration, in the word
of the psalmist—‘Lord, what is man, that thou art mindful of
him? or the son of man that thou (thus) visitest him?’ The
romantic scenes of Benthall Edge,—its rocks and precipices, its
sides and top covered with wood; the navigable Severn, in
which its feet are immersed; the populousness of the opposite
shore; the motion, noise, and life on the river; the adjoining
wharves and manufactories, are capable of affording a high
entertainment, and I should willingly devote one day in the year
to a repetition of the enjoyments of the pleasures I have
heretofore received from them: though equally near, and equally
desirable, a jaunt to Benthall Edge is not equally facile with one
to the Wrekin. It seems more out of my province.”

Our readers, ere this, must have discovered a power of description,


a grace and polish, blended with a masculine force of thought, in the
correspondence of Mr. Reynolds, of a more than common order; and
would still more, could we feel at liberty to quote more copiously
from numerous letters to his friends. If we follow him more closely
into private life, and lift the veil that too often hides a dualism of
character from the unsuspicious public eye, we find the sterling
elements of the gentleman and the Christian.
Take the experience of the past as recorded, or the traditions of the
present, as found among a generation second in remove from
Richard Reynolds’s time, and they bring out into relief still more
striking traits of character, that do honour to our common nature.
The guiding principle of his life, in all cases of bargain and of sale,
Mrs. Rathbone tells us, were in accordance with the old adage—“Live
and let live;” and as an instance of the consistency with which he
acted up to his motto she adds that, at the breaking out of the
American war, when bar-iron rose to an extravagant price, and the
makers of pig-iron could obtain their own terms, instead of taking an
unreasonable advantage of the opportunity, he proposed to his
customers that it should be left to one of themselves to name a fair
price for pig-iron in the then state of the trade, and to determine the
scale of proportionate reduction which should take place when the
price of bar-iron should fall, as he foresaw that it would follow the
then great and unsatisfied demand. The proposal was accepted,
and by the scale which was then fixed his conduct was governed.
Order and punctuality were exemplified in his dealings. “A place for
everything and everything in its place”—a maxim for which he
confessed his obligation to De Witt—was not only his rule, but was
painted in large characters in the kitchen, over the fireplace, for the
benefit of the servants. The appellation “honest,” given to his father,
was a term equally applicable to the son, who at the outset and in
after life made it a rule to regulate his affairs by that principle of
prudence and of equity.
He yielded to every man his own, not only as concerned demands
upon his purse, but in what are usually deemed small matters, such
as those of respect which one man owes to another. He would
follow a poor person to his or her home to apologise if he had
spoken warmly or unbecomingly in the heat of temper. It was
painful, his granddaughter tells us, for him to see waste. “I cannot
bear to see sweeping on the ground that which would clothe a poor
shivering child” was his remark made respecting the long dresses of
the time.
Mrs. Rathbone, in her memoir, says:—

“My grandfather had great respect and regard for a very


amiable and excellent minister of the Gospel, who lived in his
neighbourhood, the Rev. Joshua Gilpin; and it was mainly
through his exertions and personal interest that Mr. Gilpin was
presented to the living of Wrockwardine. He also enjoyed the
acquaintance of many scientific and well-informed men. His
manners, as a host, were courteous and dignified, and his
conversation, when he was perfectly at ease, animated, and
often diversified with a quaint wit and humorous satire. His fine
countenance beamed with intelligence and kindness; his eyes
were piercing, and were remarkable for the brightness which
seemed literally to flash from them under strong emotion. It
was something almost fearful to meet their glance in anger or
indignation, whilst equally striking was their beautiful expression
under the excitement of admiration or affection.”

In the short sketch we gave of Mr. Reynolds in the “Severn Valley,”


we said, “the stamp of heaven’s nobility was visible in his face, and
the free and open features with which nature had endowed his
person were not dwarfed by the uniform look and expression
sometimes demanded by sects. Eyes of liquid blue, full-orbed, gave
back the azure tint of heaven, and lighted up a manly face, fair and
ruddy. To these indications of a Saxon type were added others, such
as light brown hair, that in flowing curls fell upon the shoulders of a
tall and full-developed figure.”
The portrait we have hereafter described was obtained with some
difficulty, as Mr. Reynolds refused for a long time to concede to the
wishes of his friends on the subject; and the first attempt made was
by a miniature-painter, who made a sketch from the garden as he
sat reading by candle-light. This was not successful, and a second
attempt, made as he sat at meeting, being no better, he was
induced to sit to Mr. Hobday. The books shown in the background
were favourites of his, and they are arranged in the order in which
he regarded them.
In a letter to his son, dated 8th of 12th month, 1808, he says:—

“John Birtell has paid £48 4s. 7d. for the pictures, frames and
cases, which should be repaid to him. I understood from S. A.
it was thy wish to make thy sister a present of one of them, and
in that case please to remit the amount to John Birtell; if she (S.
A.) is mistaken, remit the money to J. B. nevertheless, and I will
repay thee the half of it; but I insist upon one condition both
from thee and thy sister: that as long as I live, the pictures be
nowhere but in your bed-chambers. The first was begun
without my knowledge, and indirect means used to accomplish
it; at length I was candidly told it was determined to have it,
and when I saw what was done, I thought it better to sit for the
finishing than to have it a mere caricature; but I think it a very
moderate performance at last. I was willing too, to avail myself
of the opportunity, if such a one must be presented, of
exhibiting my belief of Christianity as exhibited in the 5th
chapter of the Romans; and my estimation of certain authors,
by affixing their names to the books delineated in the back
ground.”

In reference to this subject (his portrait), some twelve months after,


in a letter to his son, he says:—

“This reminds me to mention what I intended to have


mentioned before; that is, an alteration I propose to be made in
the one here, and if this could be done in the others, I should
like it; and which, I suppose, would be best effected by
obliterating the books, and arranging them differently, according
to the estimation in which their writings or character may be
supposed to be held; with the addition of Kempis and Fenelon,
not only for their intrinsic merits, but to show that our good
opinion was not confined to our own countrymen. They would
then stand thus:—
“Fox and Penn.
Woolman and Clarkson.
Hanway and Howard.
Milton and Cowper.
Addison and Watts.
Barclay and Locke.
Sir W. Jones and Sir W. Blackstone.
Kempis and Fenelon.
“I do not know whether I gave thee my reasons, as I did to thy
sister, for the original selection. She may shew thee my letter to
her, and thou may communicate the above to her, with my dear
love to all, repeated from
“Thy affectionate father,
“Richard Reynolds.”

It was the custom when Mr. Reynolds had charge of the


Coalbrookdale works to perform long journeys on horseback, and we
have heard it said that on one occasion, being mounted on the back
of an old trooper, near Windsor, where George III. was reviewing
some troops, the horse, on hearing martial music, pricked up his
ears, and carried Mr. Reynolds into the midst of them before he
could be reined up. He was a good horseman, and a grandson of
Mr. Reynolds writes:—

“We also enjoyed very much our grandfather’s account of a visit


paid to the Ketley Iron Works by Lord Thurlow, the then Lord
Chancellor. My grandfather, having gone through the works
with his lordship, and given him all requisite information and
needful refreshment, proposed to accompany him part of the
way on his return, which offer his lordship gratefully accepted,
and the horses were ordered to the door accordingly. They
were, both of them, good riders, and were, both of them, well
mounted. The Lord Chancellor’s horse, no doubt a little
instigated thereto by his owner, took the lead, and my
grandfather’s horse, nothing loth to follow the example, kept as
nearly neck and neck with his rival as his owner considered
respectful. The speed was alternately increased, until they
found themselves getting on at a very dashing pace indeed! and
they became aware that the steeds were as nearly matched as
possible. At last, the Chancellor pulled up, and complimenting
my grandfather upon his ‘very fine horse’ confessed that he had
never expected to meet with one who could trot so fast as his
own. My grandfather acknowledged to a similar impression on
his part; and his lordship, heartily shaking hands with him, and
thanking him for his great attention, laughed, and said, ‘I think,
Mr. Reynolds, this is probably the first time that ever a Lord
Chancellor and a Quaker rode a race together.’”

The years 1774, 1782, and 1796 were periods of great distress.
Haggard hunger, despairing wretchedness, and ignorant force were
banded to trample down the safeguards of civil right, and armed
ruffians took the initiative in scrambles for food. The gravity of the
occasion, in the latter case, may be estimated by the subscriptions
for the purchase of food for the starving population. We give those
of the iron companies of this district only: Messrs. Bishton and Co.
gave £1,500; Mr. Botfield, for the Old Park Company, £1,500; Mr.
Joseph Reynolds, for the Ketley Company, £2,000; Mr. R. Dearman,
for the Coalbrookdale Company, £1,500; Mr. William Reynolds, for
the Madeley-Wood Company, £1000. Mr. Richard Reynolds gave
£500 as his individual subscription. Applications, in times of distress,
from far and near were made to Mr. Reynolds for assistance. Taking
a general view of the distress existing in the beginning of the year
1811, he says, in reply to a letter from a clergyman, “I am thankful I
am not altogether without sympathy with my fellow-men, or
compassion for the sufferings to which the want of employment
subjects the poor, or the sufferings still more severe of some of their
former employers. Thou mentions Rochdale, Bolton, Leeds, and
Halifax. Wilt thou apply the enclosed towards the relief of some of
them, at thy discretion? Those who want it most and deserve it best
should have the preference,—the aged, honest, sober, and
industrious. I am sensible how limited the benefits from such a sum
in so populous a district must be, and of the difficulty of personal
investigation before distribution. If it could be made subservient to
the procuring an extensive contribution it would be of more
important service. If it cannot I think it would be best to commit it
to some judicious person or persons in each place, to distribute with
the utmost privacy, and (that) for their own sakes, were it only to
avoid applications from more than they could supply, and yet the
refusal would subject them to abuse. But in whatever manner thou
shalt dispose of it, I send it upon the express condition that nobody
living knows thou ever had it from me; this is matter of conscience
with me. In places where we are known, and on public occasions,
when one’s example would have an influence, it may be as much a
duty to give up one’s name as one’s money; but otherwise I think
we cannot too strictly follow the injunction:—‘Take heed that ye do
not your alms before men to be seen of them, otherwise ye have no
reward of your Father which is in heaven.’”
If some poor tradesman in London or elsewhere was tottering on the
verge of bankruptcy, and a friend was found to write to Richard
Reynolds, he was put upon his legs again. Poor debtors found
themselves relieved from the King’s Bench by an unknown hand.
Unwilling to be known as the giver of large sums, he would
sometimes forward his subscriptions with his name, and send a
larger contribution anonymously afterwards. In this way he gave a
sum in his own name on behalf of the distress in Germany, and then
forwarded a further sum of £500 privately. For years he had
almoners in London and elsewhere, dispensing sums to meet
distress, and on behalf of public and private charities, scrupulously
enacting that his name should not appear in the transactions. To
one party he sent £20,000 during the distress of 1795. He had four
distributors of his bounty constantly employed in Bristol alone. They
brought in their accounts weekly, giving the names of persons or
families, the sums given, and the circumstances under which they
were relieved. Not the least to be appreciated was the consideration
and delicacy with which he assisted persons not ostensibly objects of
charity (to use the word in its common sense) and many who,
through relationship, personal interest, or estimable conduct were
felt to have claims on his kindness and generosity.
He solicited in Bristol subscriptions on a large scale for augmenting
the fund for the payment of a weekly sum to the inhabitants of the
almshouses, going from house to house,—his own zeal kindling that
of others. One gentleman to whom he applied, of acknowledged
wealth and importance in the city, having given him a cheque for
£500, he said he would give him back the cheque, as such a sum
from him would do more harm than good. The gentleman
immediately wrote another for £1000. He himself gave £2000 (one
of his friends says £4000), and £4000 to the Trinity almshouses. In
1808 he placed in the hands of the trustees the sum of £10,500 to
be invested in land, the rent of which was to be devoted to seven
charitable institutions in Bristol, named in the deed and trust, in such
manner and proportion, either to one alone, or between any, as
should at the time appear expedient to the trustees. An addition to
the infirmary being needed, he devoted much of his time to that
object, subscribing £2,600. The committee also received an
anonymous donation of £1000, entertaining no doubt who was the
giver; and on the following day one of their number happening to
meet Richard Reynolds, thanked him in the name of the committee
for his acceptable donation. He said—“Thou hast no authority for
saying I sent the money,” and the gentleman repeating the
acknowledgment of the committee, Mr. Reynolds quietly said—“Well,
I see thou art determined that I should give thee a thousand
pounds,” and the next day they received a donation of that sum with
his name attached, thus doubling his first contribution. To these
gifts may be added (besides his annual subscription) donations:—
£1,260 to the Stranger’s Friend; £900 to the Misericordia; £500 to
the Refuge, and the same to the Orphan Asylum; and to the Bible
Society, £900. Of several other small amounts one need only be
mentioned, from his purse,—that of £300 to the Temple parish,
towards providing a better supply of water to the poor.
Mr. Reynolds’s last visit to Ketley, the scene of his labours, and the
source of his vast income, was in June, 1816. His funeral took place
on the 18th of September, amidst a manifestation of respect, as
marked and profound as ever was paid to the remains of mortal
man. The city of Bristol offered spontaneously to his memory that
signal tribute of general regard that a name embalmed by good
deeds alone can win. Columns of schoolboys, with mournful
recollections of the good man’s smile, formed a melancholy passage
to the dwelling of their benefactor. These were flanked by vast
crowds of sympathising poor, who felt they had lost a friend. The
clergy of the Church of England, ministers of dissenting
congregations, gentlemen forming the committees of various
societies, and other leading men, besides a large body of the Society
of Friends, followed the several members and relatives of the family
in procession. So great was public curiosity excited on this occasion,
and such the eagerness manifested by the poor, who had lost their
best friend, to pay their last respect to his remains, that not only
was the spacious burial-ground filled with spectators and mourners,
but the very tops of walls and houses surrounding the area were
covered. The behaviour of the vast concourse of people was in the
highest degree decent, orderly and respectful, the poor, considering
it a favour to be permitted in their turn to approach the grave of
their departed friend, and to drop the silent tear as a mark of their
regard for the man whose life had been spent in doing good.
Montgomery, in verses from which we extract the following, paid a
just tribute to his memory:

Strike a louder, loftier lyre;


Bolder, sweeter strains employ;
Wake remembrance! and inspire
Sorrow with the song of joy.
Who was he for whom our tears
Flowed, and will not cease to flow?
Full of honours and of years,
In the dust his head lies low.
.......
He was one whose open face
Did his inmost heart reveal;
One who wore with meekest grace
On his forehead heaven’s broad seal.
Kindness all his looks express’d,
Charity was every word;
Him the eye beheld and bless’d,
And the ear rejoiced and heard.
Like a patriarchal sage,
Holy, humble, courteous, mild,
He could blend the awe of age
With the sweetness of a child.
.......
Oft his silent spirit went,
Like an angel from the throne,
On benign commission bent,
In the fear of God alone.
Then the widow’s heart would sing,
As she turned her wheel, for joy;
Then the bliss of hope would spring
On the outcast orphan boy.
To the blind, the deaf, the lame,
To the ignorant and vile,
Stranger, captive, slave, he came,
With a welcome and a smile.
Help to all he did dispense.
Gold, instruction, raiment, food,
Like the gifts of Providence,
To the evil and the good.
Deeds of mercy, deeds unknown,
Shall eternity record,
Which he durst not call his own,
For he did them for the Lord.
As the earth puts forth her flowers,
Heaven-ward breathing from below;
As the clouds descend in showers,
When the southern breezes glow.
.......
Full of faith, at length he died,
And victorious in the race,
Wore the crown for which he died,
Not of merit but of grace.

William Reynolds.
The father, Richard Reynolds, as will be seen from our sketch,
managed to realize immense wealth at Ketley, and, what is more, to
remain superior to the influence wealth too often has upon its
possessor. The finer feelings of the man never succumbed to the
vulgar circumstances of his position, but maintained their freshness,
and graduated to maturity by the mastering force of a resolute will
and a well-disciplined and highly enlightened mind. Never so
completely absorbed in the arts and intricacies of money-making as
to lose sight of higher and worthier aims, he sought an opportunity
earlier than men in his circumstances usually do of enjoying the
well-earned fruits of an active life; of indulging in that repose and
retirement congenial to minds similarly constituted to his own.
Accordingly, his shares in the works were turned over to his two
sons, William and Joseph. William was the more distinguished of the
two in carrying out improvements connected with the works. Like
his father, he possessed an active mind, an elevated taste, and a
desire for knowledge; to which were added a mechanical genius,
and an aptitude for turning to account resources within his reach.
He saw the necessity of uniting science with practice in developing
the rich resources of the district; and that knowledge and discovery
must keep pace with aptitude in their use.

“An equal appreciation of all parts of knowledge,” it was


remarked by Humboldt, “is an especial requirement of an epoch
in which the material wealth and the increasing prosperity of
nations are in a great measure based on a more enlightened
employment of natural products and forces. The most
superficial glance at the present condition of European states
shows that those which linger in the race cannot hope to escape
the partial diminution, and perhaps the final annihilation, of
their resources. It is with nations as with nature, which,
according to a happy expression of Goethe, knows no pause in
ever-increasing movement, development, and production—a
curse, still cleaving to a standstill. Nothing but serious
occupation with chemistry and physical and natural science can
defend a state from the consequences of competition. Man can
produce no effect upon nature, or appropriate her powers,
unless he is conversant with her laws, and with their relations to
material objects according to measures and numbers. And in
this lies the power of popular intelligence, which rises or falls as
it encourages or neglects this study. Science and information
are the joy and justification of mankind. They form the spring
of a nation’s wealth, being often indeed substitutes for those
material riches which nature has in many cases distributed with
so partial a hand. Those nations which remain behind in
manufacturing activity, by neglecting the practical application of
the mechanical arts, and of industrial chemistry, to the
transmission, growth, or manufacture of raw materials—those
nations amongst whom respect for such activity does not
pervade all classes—must inevitably fall from prosperity they
have attained; and this so much the more certainly and speedily
as neighbouring states, instinct with the power of renovation, in
which science and the arts of industry operate or lend each
other mutual assistance, are seen pressing forward in the race.”

Upon this principle Mr. Reynolds placed himself under the teaching of
Dr. Black, the discoverer of latent heat, a gentleman who by his
eminent ability and teaching did so much to inspire a love for the
science in England during the latter part of the last century. He was
thus enabled to bring the knowledge he possessed of elementary
substances and of their peculiar qualities, gained in the laboratory,
to bear upon the manufacture of iron in the furnace and the forge,
and to anticipate some of the discoveries of later times.
Steel and iron have long been manufactured at Ulverstone, and the
quality or fitness of the ore for the purpose is attributed to the
presence of manganese in the ore, which since the establishment of
railways has come into general use. In Mr. Reynolds’s time we
imported large quantities of iron and steel; and ignorant of what
constituted the difference between our own and that of foreign
markets, had with some humiliation to confess our dependence. In
no case had a uniform quality of bar-iron with the superior marks of
Sweden and Russia been produced. A great variety of processes
had been tried, and makers were not wanting who made laudable
efforts for the accomplishment of the object, feeling that in so doing
they devoted their time to the service of their country, and that in a
national as well as a commercial point of view no experiments were
fraught with more important consequences.
Mr. Reynolds thought he saw the solution of the problem how to
produce metal equal to that made from the magnetic and richer ores
of the Swedish and Siberian mines, when Bergman published his
analysis of Swedish iron, showing the large percentage of
manganese it contained. The analysis showed the following results:

Cast Iron.
Parts.

Plumbago 2.20
Manganese 15.25
Silicious Earth 2.25
Iron 80.30
100
Steel.
Plumbago .50
Manganese 15.25
Silicious Earth .60
Iron 83.65
100
Bar-Iron.
Plumbago .50
Manganese 15.25
Silicious Earth 1.75
Iron 84.78
100

In order to effect a combination corresponding with this analysis of


the French chemist he introduced manganese into the refinery
during the re-smelting process, and succeeded in producing bar-iron
capable of conversion into steel of better quality than had previously
been made from coke-iron. From subsequent experiments the per-
centage introduced of metallic manganese could be traced into bar-
iron, the inference being that the purpose served was the additional
supply of oxygen it gave to burn out the impurities—a result the
Bessemer process has since attained in another way. When it is
remembered that the end to be attained in these processes is to
consume the impurities of the metal, and that those impurities are of
such a nature as to unite with oxygen at a high temperature and
form separate compounds, also that this boiling and bubbling up of
the liquid metal was carefully watched and tended formerly, one can
understand how near the iron-kings of a past age were to the
Bessemer discovery of the present.
“The old men,” as they are frequently called in the works, appear to
have had an inkling of the real nature of the process: The rising
impurities and combination of opposite gases indicated by bubbles
were called the “Soldier’s coming.” At any rate the Bessemer
invention is an adaptation of a principle acted upon during the past
century in the Shropshire ironworks. Mr. Reynolds’s patent was
obtained December 6, 1799, and was stated to be for “preparing
iron for the conversion thereof into steel.” In his specification he
described his invention to consist in the employment of oxide of
manganese in the conversion of pig-iron into malleable iron or steel,
but did not enter into details as to the method he employed for
carrying his invention into effect.
John Wilkinson obtained a patent January 23, 1801, for making “Pig
or cast metal from ore, which when manufactured into bar-iron will
be found equal in quality to any that is imported from Russia or
Sweden.” The patentee states his invention to consist “in making
use of manganese, or ores containing manganese, in addition to
ironstone and other materials used in making iron, and in certain
proportions, to be varied by the nature of such ironstone and other
materials.”
Mr. Reynolds was not only a chemist, but a geologist. He succeeded
in forming a collection of carboniferous fossils to which modern
professors acknowledge their obligations, and which, with the
additions made by Mr. William Anstice, Dean Buckland pronounced
one of the finest in Europe. Other manufacturers, every day dealing
with subterranean treasures that give iron in abundance, were as
dwellers amid the ruins of some ancient city, taking down structures
of the builders of which and of the history of which they were
ignorant. With him minerals had an interest beyond their market
value. Coal and ore from the dusky mine, raised at so much per ton,
were not minerals merely, but materials prepared to his hand by
Nature. He detected traces of that venerable dame’s cast-off
garments in one; the others were fabrics, the result of processes as
varied as his own, the produce of machinery more wonderful and
powerful than that he was about to employ in converting them to
the general uses and purposes of mankind. His pit-shafts to him
were mere inlets to the deep storehouse of the globe where
Providence had treasured means whereby to enrich future
inhabitants of the surface. Geology as a science, ’tis true, was but
beginning to shed its light on the cosmogony of the world;
endeavours to make out a connected history of the earth from
examinations of the structure itself were deemed strange; and the
more intelligent of his contemporaries, who without hesitation
adopted speculations daring and beyond the province of human
intellect, looked coldly upon his labours. The old workmen to whom
he offered premiums for the best specimens could not for the life of
them make out the meaning of his morning visits to the mines, his
constant inquiries respecting fossils, his frequent hammering at
ironstone nodules, his looking inside them and loading his pockets
with them—seeing that he did not confine attention to those that
seemed likely to make good iron. Some considered it to be one of
the good old Quaker’s eccentricities, and did not forget when he
turned his back to point to their heads, intimating that “all was not
right in his upper garrets.” Others, knowing that he sometimes used
the blow-pipe and tried experiments in his laboratory, believed his
aim to be to extract “goold,” as they said, from the stone—a
supposition to which the presence of iron pyrites gave some degree
of colouring. One fine morning, in particular, as flitting gleams of
sunshine came down to brighten young green patches of copse and
meadow, telling of returning spring, a group of his men were seated
with bottle and tot, drinking the cuckoo’s foot-ale, when, “Here
comes Measter William, here comes Old Broadbrim,” it was said,
“with his pecker in his pocket, fatch the curiosities from the crit.” Mr.
Reynolds was not very well pleased, for large orders were in the
books unexecuted, and coal and ore could not be got fast enough.
Every engine had its steam up; but not a beam-head or pulley
creaked or stirred. One or two bands of workmen had gone down,
but had come up again. The cuckoo’s voice that morning for the
first time had been heard, and it was more potent than the master’s;
for it was the custom, and had been from time immemorial, to drink
his foot-ale, and to drink it out of doors; and the man was fined,
who proposed to deviate from custom by drinking it in-doors. On
May Day too it was the custom, as it now is, to gather boughs or
sprigs of the birch, with its young and graceful fronds, and mount
them on the engines, the pit heads, and cabins, and on the heads of
horses, to proclaim the fact that we had entered upon the merry,
merry month of May.
Mr. Reynolds was generally pleased with meeting his men, and
would readily enter into their whims, and turn such interviews to
account. By such means he often obtained from them a knowledge
of their wants, and received hints and suggestions that aided him in
carrying out improvements in the works. The same disruption of
social ties did not then exist as now; that mutual relation that
beautified the olden time, and gave men and master an interest in
each others welfare existed. A master, then, was more like the chief
of a tribe, the father of a family; he had generally sprung from the
ranks, he felt himself to be of the same flesh and blood, removed
only a little by circumstances, and bound by a community of
interest. Money-making had not then been reduced to a science,
nor men to machines. With some degree of pride the men laid their
stony treasures at the master’s feet. There were amongst them
what the colliers call millers’ thumbs, horses’ hoofs, snails’ houses,
“shining scales,” “crucked screws,” “things-like-leaves, and rotten
wood.” “You should have heard,” said an old sage, “Mr. Reynolds
give a description of them, and have seen the effect upon his
audience. If I remember rightly, millers’ thumbs were orthoceratites,
shells—as the name implies—like horns, but not pointed, and having
several air-chambers. Horses’ hoofs, were portions of others, coiled,
and spiral—that could float on the water, sink to the bottom, or rise
to the surface, by a peculiar mechanical apparatus—like the forcing
pump of a steam engine. The shining scales, were scales of fish
coated with armour, hard as flint, and furnished with carvers to cut
up the smaller fry on which they fed.” He showed that the nodules
of ironstone contained exact impressions of leaves and fruits that
grew beneath the golden beams of a tropical sun; that the bits
called rotten wood were really wood, showing the beautiful anatomy
of the tree, that it had been water-worn by being carried down the
dancing stream into the soft and yielding mud in which it ultimately
sank and was preserved. Coal, he explained, was nothing more than
the vegetation of former periods, which accumulated where it grew,
or was swept down by rains or streams into beds where it was
hermetically sealed, fermented, and converted into mineral fuel for
future use. “Lord, sir,” said our informant, “you should have seen
how they all stared. Flukey F’lyd, one of the butties of Whimsey pit,
said he little thought they were working in the gutters, or grubbing
in the mud-banks of slimy lakes of a former world; he had seen
stems of trees and trunks in the roof, but he thought they had got
there at the Flood, and turned to stone. Gambler Baugh, of the
Sulphur pit, said he thought the coal had been put there at the
creation, and was intended to be used to burn up the world at the
last day; and that he sometimes considered it a wrong thing to get
it, believing they ought to use wood, and concluded by inviting the
Governor to ‘wet,’ as he said, ‘the other eye, by taking another tot.’
The company drank his health, his long life and happiness, and
exclaimed—’who’d have thought it.’” “Aye, who would have thought
it,” continued Mr. Reynolds, warming with his subject, “when the first
iron mine was tapped that in the slime and mud of those early
times, now hardened into stone lay coiled up a thousand
conveniences of mankind; that in that ore lay concealed the steam-
engines, the tramways, the popular and universal metal that in
peace and war should keep pace with and contribute to the highest
triumphs of the world.” Upon such occasions questions of
improvement, invention, adaptation, &c., &c., would often be freely
discussed, and we have it upon the authority of some of the old
workmen that many of the achievements in engineering we applaud
in the present day, were the result of such suggestions in part.
Nothing, in fact, was known about iron ore, iron making and
machinery, but what he knew or else took steps to acquaint himself
with, if he had the opportunity. We have a number of large foolscap
MS. volumes of experiments and extracts neatly copied, with pen
and ink drawings of machines, parts of machines, &c.; shewing that
whilst Smeaton and Watt were engaged in perfecting the
construction of the steam engine, Mr. Reynolds was endeavouring to
apply it to purposes similar to those to which it is now applied as a
locomotive. Thus he constructed a locomotive with a waggon
attached, the cylinder and boiler of which are still preserved. An
accident, we believe a fatal one, which happened to one of the men
upon starting the engine led Mr. Reynolds to abandon the machine;
but he by no means lost faith in the invention. On the contrary, he
was wont to say to his nephew, the late William Anstice, father of
the present Mr. Reynolds Anstice, “I may never live to see the time,
but thee may, William, when towns will be lighted by gas instead of
oil and candles, when vessels will be driven without sails, and when
carriages will travel without horses.”
This was before Trevithic invented a machine which travelled at a
slow rate with heavy loads on a railway at Merthyr. It was prior to
1787, when Symington exhibited his model steam carriage in
Edinburgh, and to the time when Darwin, (1793), with equal poetry
and prophecy, wrote—

“Soon shall thy arm, unconquered steam afar


Drag the slow barge, or drive the rapid car.”

Mr. Reynolds indeed contemplated, it is believed, a subterranean


tram road from the banks of the Severn right up into the heart of
the iron districts of Ketley and Donnington Wood, upon which his
engine was to travel, but the prejudice against the scheme was so
great, and the jury empanelled to inquire into the nature of the
accident inflicted such an enormous fine to be enforced every time
the engine was used, that it was abandoned. There are also a pair
of partially rotatory brass cylinders in existence which Mr. Reynolds
intended as models for a boat on the Severn. This was before
Shropshire generally, and the iron districts more particularly, had
begun to participate in the advantages of still-water communication.
With the superior advantages of railways, it is difficult to appreciate
the full benefit of such communication for manufacturing and
agricultural purposes at that time in inland counties like our own.
Mr. Reynolds however, with full faith in the future development of
the powers of steam by means of improved machinery, took great
pains to extend and perfect canal navigation, and his name is
associated with every important work of improvement in the district
during the latter end of the last and the beginning of the present
centuries, and especially with a very ingenious contrivance by means
of which the inequalities of surface were overcome, and the old-
fashioned locks were dispensed with.
Mr. Reynolds commenced his canal for the conveyance of minerals
from Oakengates and Ketley in 1788; and shortly after its completion
an Act of Parliament was obtained for one from Donnington Wood
which, forming a junction therewith, was to proceed along the high
ground above Coalbrookdale, on one hand, and Madeley and
Coalport on the other. The difference of level was 73 feet in one
case and 207 feet in the other. Telford, speaking of the difficulties to
be encountered from the nature of the country, says:

“The inequality of the ground and the want of sufficient water


seemed insuperable, and might probably have been so for ages
to come had not Mr. William Reynolds, of Ketley, whose
character is too well known to need any eulogium, discovered
the means of overcoming them. Having occasion to improve
the method of conveying ironstone and coals from the
neighbourhood of Oakengates to the ironworks at Ketley, these
materials lying generally about the distance of a mile and a half
from the ironworks, and 73 feet above their level, he made a
navigable canal, and instead of descending in the usual way by
locks, contrived to bring the canal forward to an abrupt part of
the bank, the skirts of which terminated on a level with the
ironworks. At the top of this bank he built a small lock, and
from the bottom of the lock, and down the face of the bank, he
constructed an inclined plane, with a double iron railway. He
then erected an upright frame of timber, in which was fixed a
large wooden barrel. Round the latter a rope was passed that
led to a moveable frame, the frame being of a sufficient size to
receive a canal boat, resting and preserved in nearly a
horizontal position, by having two large wheels before and two
small ones behind—varying as much in the diameters as the
inclined plane varied from a horizontal plane. This frame being
placed in the lock, the loaded boat was brought to rest upon it.
The lock gates were shut, the water was drawn from the lock
into a side-pond, the boat settled upon a horizontal wooden
frame, and—as the bottom of the lock was formed with nearly
the same declivity as the inclined plane—upon the lower gates
being opened, the frame with the boat passed down the iron
railway into the lower canal, which had been formed on a level
with the Ketley ironworks, being a fall of 73 feet. A double
railway having been laid upon the inclined plane, the loaded
boat in passing down brought up another boat containing a load
nearly equal to one-third part of that which passed down. The
velocity of the boats was regulated by a break acting upon a
large wheel, placed upon the axis on which the ropes connected
with the carriages were coiled.”

This contrivance has been in use up to the present time. During Mr.
Reynolds’s life a representation of it figured upon copper tokens, one
of the first iron bridge being upon the opposite or obverse side.
Another of these contrivances is still in use near the Hay, in the
parish of Madeley, called the Coalport Incline. This is 207 feet in
length, and the gradient is much greater, being about one in three.
So great indeed that on the chain snapping we have known a canal
boat with five tons of iron pigs on board gain such velocity that on
coming in contact with the water in the lower canal it has broken
away from the iron chains which held it to the carriage, bounded
into the air, clearing two other boats moored on the side, together
with the embankment, and alighted in the Severn, close to the ferry-
boat, into which it pitched some of the iron-pigs it contained. At the
foot of this incline Mr. Reynolds drove a level to the shaft of the
Blissers Hill pits, to bring down the coals to the lower canal for
loading into barges on the Severn. This was the famous Tar Tunnel
from which petroleum was formerly exported in large quantities to
all parts of Europe.
William Reynolds removed from Ketley to a large house formerly
occupied by Lord Dundonald, at the Tuckies, where he continued to
superintend the ironworks he had leased at Madeley Wood, familiarly
known as Bedlam Furnaces, and was succeeded by his brother, Mr.
Joseph Reynolds, who continued to carry on the Ketley Works till the
recurrence of one of those fearful revulsions that have marked the
history of the trade. For a quarter of a century we had been
carrying on wars, levying troops, and interfering with everybody’s
business but that which properly belonged to ourselves. We had
obtained our object of ambition by bribery, strategy, and force of
arms combined. We had restored the ancient families of France,
reduced that country to its ancient limits, and annihilated its
commerce. With glorious victory came fearful collapse, and the
country awoke to find that a fallacy which it had been taught to
regard as truth—that war brings commercial advantages that
compensate for fearful waste and lavish expenditure. To add to the
calamity, a succession of bad harvests was experienced, and the
reduction of the army served to swell the poor’s-rates upon which
working men and their families had been thrown for a bare support.
Iron from £18 had gone down to £7 per ton, carriage paid from
Ketley to Stourport. Mr. Reynolds believed the trade would never
again rally, and resolved to blow out the furnaces at Ketley. This
was in 1817. In 1818, at an immense sacrifice of property,
consisting of the usual apparatus for making and manufacturing iron,
he sold off at an immense loss, and removed to Bristol. Language
cannot paint the deep distress which accompanied and followed this
step. Men, with wives and families dependent upon them, saw their
only ground of hope taken from them. Starving by thousands, and
yoked like horses, they might be seen drawing materials for the
repair of the roads, or conveying coal into Staffordshire. One third
of the Shropshire banks failed. Disturbances were frequent; mobs of
men collected in bodies and went about taking food where they
could find it, and the militia had often to be called out to quell
disturbances. Not only ironmasters, but manufacturers generally
were reduced to despair. The parish authorities of Wellington
advertised in the public journals for persons to come forward and
take the Ketley works; and a company, consisting of the Messrs.
Montford, Shakeshaft, Ogle, Williams, Hombersley, and others, was
formed.
From what we have written, it will be seen that Mr. William Reynolds
was on familiar terms with his men. In severe weather and
distressed times, he made soup to give away three times a week,
and he generally kept “open-house” for his workmen and friends; of
the latter he had a large circle. He did not like idleness or
indiscriminate almsgiving. A number of men thrown out of employ
came to him in a body for relief during a deep snow. He set them to
clear an entire field, and to make him a snow-stack; which they did
of large proportions, receiving daily wages for the same. He allowed
a house and garden rent-free to “Sniggy Oakes,” as he was called—
heaven knows what his right name was, for in that day it was
seldom known in the mining districts—on condition that the said
Sniggy ferry’d him and his family across the river when they required
it. One evening Sniggy, knowing he was out on the other side, went
to bed instead of sitting up, which he found a deal more comfortable
on a cold wet night, and Mr. Reynolds, after calling him first one
name and then another, ringing the changes upon every alias, and
changing it for “boat! boat!” “ferry! ferry!” had to go round by the
bridge. Coming opposite the cottage where Sniggy was snug in bed,
he smashed every window, shouting “boat” at every blow of his
huge stick. Sniggy roared with fright, and promised better things
another time. “On another occasion,” says our informant, “while
having a balcony put up in front of the Tuckies, he gave strict
injunctions that the martins’ nests should not by any means be
disturbed, threatening to shoot the man who violated his
instruction. They all obeyed him but one man, and he—.” “What,
you don’t mean to say he was going to carry out his threat?” said
we. “But he was,” it was replied, “and did.” “What shoot him?”
“Yes; shot him, sir—shot him with a pop-gun!” Being a Quaker,
many anecdotes are told of him not paying church-rates, and what
are called Easter offerings, showing a rich vein of genuine humour
running through a warm and generous nature. Old people too tell
with much glee of a grand illumination they remember to celebrate
one of those interludes of war, termed “a peace rejoicing,” when the
bridge across the river, and a large revolving wheel, were lighted up
with lamps, and the manufactory, in which—together with Messrs.
Horton and Rose—he was a shareholder, was illuminated.
“He is a wise son who knows his own father,” it is said, but it is
sometimes more difficult to trace the paternity of an anecdote, and
we tell the following as it was told to us.

“Mr. Reynolds was kind and generous to a fault, but he did not
like to be tricked. Returning late from a party on horseback, he
was requested to pay again at a turnpike gate. Old Roberts,
who having been in the army, looked with contempt upon all but
a red uniform, and hated Quakers’ plain suits in particular, the
more so as the wearers were known to be averse to war, now
found himself, as he imagined, in a position to ‘take the small
change,’ out of the Quaker. Mr. Reynolds disputed the charge,
knowing from the time he left his friend’s house that he must be
in the right; but, as the other insisted upon being paid, he paid
him. When the latter had opened the gate, Mr. Reynolds
remarked, ‘Well, friend, having paid, I suppose I am at liberty to
pass through as often as I like?’ ‘Certainly, sir,’ said the old
robber—as the juveniles would persist in calling the old man,
adding an additional ‘b’ to his name, and clipping it of the two
terminating letters. Mr. Reynolds had not travelled far on the
home-side of the gate—sufficiently far however to allow the
other to get into bed, before he returned, and called up the
gatekeeper; having occasion, as he said, to go back. By the
time he had again got into bed back came his tormentor at an
easy jog-trot pace; and as he again passed through the gate he
begged to be accommodated with a light. ‘Thou art sure it is
past twelve o’clock, friend?’ said Mr. Reynolds. ‘Quite sure,’ said
the other, adding ‘I thought I had done with you for to-night.’
‘Thou art mistaken,’ said Mr. Reynolds, ‘it is a fine night, and I
intend to make the most of it.’ In about ten minutes time the
hated sound of ‘Gate, gate,’ brought old Roberts to his post,
muttering curses between his teeth. ‘Thou art quite sure it is
past twelve, art thou?’ was the question asked, and asked
again, till at last the gatekeeper begged of his tormentor to take
back the toll. ‘It cured him, though,’ said our informant, ‘and
made him civil; but they called him ‘Past Twelve’ for the rest of
his days.’”

When Mr. Reynolds removed from Ketley to Madeley Wood, he also


removed from the former to the latter place some very primitive
steam engines, from the fact that they were constructed by a man
named Adam Hyslop, and differed from the ordinary condensing
engines of Boulton and Watt in having a cylinder at each end of the
beam: one a steam cylinder and condensing box; the other a
condensing cylinder only, into which the steam, having done duty in
the steam cylinder is conveyed. They were invented prior to Boulton
and Watt’s final improvements. Three of these singular looking
engines are still used in the field, and work most economically, with
five pounds of steam to the square inch.
Of the early history of the Madeley Wood Works, we have been able
to glean little satisfactory, beyond the fact that Richard Reynolds,
who bought the manor in 1781 or 1782, granted a lease in June
1794 of the Bedlam or Madeley Wood furnaces to his son William,
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookgate.com

You might also like