INTRODUCTION TO C 1.1 IMPORTANCE OF C 1.2 WRITING PROGRAMS 1.3 OUR FIRST PROGRAM 1.4 STRUCTURE OF C PROGRAMS 1.5 EXECUTING A 'C' PROGRAM 1.6 IDENTIFIERS IN C DATA TYPES, VARIABLES AND CONSTANTS 2.1 INTRODUCTION 2.2 CHARACTER REPRESENTATION 2.3 TOKENS IN C 2.4 KEYWORDS 2.5 CONSTANTS 2.5.1 INTEGER CONSTANTS 2.5.2 REAL CONSTANTS 2.5.3 SINGLE CHARACTER CONSTANTS 2.5.4 STRING CONSTANTS 2.6 IDENTIFIERS 2.7 VARIABLES 2.7.1 VARIABLE DECLARATION 2.8 DATA TYPES 2.8.1 PRIMARY DATA TYPES 2.8.2 SIZE AND RANGE OF PRIMARY DATA TYPES 2.8.3 DERIVED DATA TYPES 2.8.4 ALIAS DATA TYPES 2.8.5 void DATA TYPE 2.9 STORAGE CLASSES 2.10 DEFINING SYMBOLIC CONSTANTS AND MACROS 2.11 DECLARING A VARIABLE AS A CONSTANT 2.12 VOLATILE VARIABLES 2.13 DATA OVERFLOW AND UNDERFLOW 2.14 SAMPLE PROGRAM OPERATORS AND OPERATIONS 3.1 INTRODUCTION 3.2 ARITHMETIC OPERATORS 3.3 INCREMENT AND DECREMENT OPERATORS 3.4 ASSIGNMENT OPERATORS 3.5 BITWISE OPERATORS 3.6 RELATIONAL OPERATORS 3.7 LOGICAL OPERATORS 3.8 CONDITIONAL (TERNARY) OPERATOR 3.9 SPECIAL OPERATORS 3.9.1 COMMA OPERATOR 3.9.2 sizeof OPERATOR 3.10 ARITHMETIC EXPRESSIONS 3.11 TYPE CONVERSIONS 3.12 OPERATOR PRECEDENCE AND ASSOCIATIVITY 3.13 SAMPLE PROGRAMS INPUT, OUTPUT AND FORMAT SPECIFIERS 4.1 INTRODUCTION 4.2 READING INPUT 4.2.1 SIMPLE INPUT FUNCTIONS 4.2.2 FORMATTED INPUT 4.3 FORMAT SPECIFIERS 4.3.1 FORMATTED INPUT [EXAMPLES] 4.4 GENERATING OUTPUT 4.4.1 SIMPLE OUTPUT FUNCTIONS 4.4.2 FORMATTED OUTPUT 4.5 SAMPLE PROGRAMS ARRAYS 5.1 INTRODUCTION 5.2 ONE-DIMENSIONAL ARRAYS 5.2.1 INITIALIZATION OF ONE-DIMENSIONAL ARRAYS 5.2.2 STRINGS 5.3 TWO-DIMENSIONAL ARRAYS 5.3.1 INITIALIZATION OF TWO-DIMENSIONAL ARRAYS 5.3.2 STRING ARRAYS 5.4 MULTI-DIMENSIONAL ARRAYS 5.5 SAMPLE PROGRAMS CONDITIONAL STATEMENTS AND BRANCHING 6.1 INTRODUCTION 6.2 DECISION CONTROL USING if STATEMENT 6.3 DECISION CONTROL USING if-else STATEMENT 6.4 DECISION CONTROL USING if-else LADDER STATEMENTS 6.5 DECISION CONTROL USING NESTED if STATEMENTS 6.6 DECISION CONTROL USING switch STATEMENT 6.7 DECISION CONTROL USING CONDITIONAL (TERNARY) OPERATOR 6.8 DECISION CONTROL USING goto STATEMENT 6.9 SAMPLE PROGRAMS CONDITIONAL STATEMENTS WITH LOOPS 7.1 INTRODUCTION 7.2 THE while LOOP 7.3 THE do while LOOP 7.4 THE for LOOP 7.5 NESTED LOOPS 7.6 JUMPING WITHIN LOOPS 7.6.1 THE break STATEMENT 7.6.2 THE continue STATEMENT 7.7 CONCISE TEST CONDITIONS 7.8 SAMPLE PROGRAMS POINTERS 8.1 INTRODUCTION 8.2 DECLARING, INITIALIZING AND ASSIGNING POINTERS 8.3 ACCESSING A VARIABLE USING ITS POINTER 8.4 ARRAY OF POINTERS AND POINTER TO AN ARRAY 8.4.1 ARRAY OF POINTERS 8.4.2 POINTER TO AN ARRAY 8.5 POINTER ARITHMETIC 8.6 POINTER TO ANOTHER POINTER 8.7 SAMPLE PROGRAMS CHARACTER STRING OPERATIONS 9.1 INTRODUCTION 9.2 UNICODE CHARACTERS 9.3 ACCEPTING STRINGS FROM USER 9.4 PRINTING STRINGS TO CONSOLE 9.5 ARITHMETIC OPERATIONS WITH CHARACTERS 9.6 ARITHMETIC OPERATIONS WITH STRINGS 9.7 STRING PROCESSING FUNCTIONS 9.7.1 GENERAL STRING PROCESSING FUNCTIONS 9.7.2 MEMORY COPY AND COMPARISON FUNCTIONS 9.7.3 SINGLE CHARACTER PROCESSING FUNCTIONS 9.7.4 STRING CONVERSION FUNCTIONS 9.8 SAMPLE PROGRAMS STRUCTURES AND UNIONS 10.1 INTRODUCTION 10.2 DEFINING A STRUCTURE 10.3 ACCESSING MEMBERS 10.4 STRUCTURE INITIALIZATION 10.5 ARRAY OF STRUCTURE 10.6 POINTER TO STRUCTURE 10.7 NESTED STRUCTURES 10.8 BIT FIELDS 10.9 UNIONS USER DEFINED FUNCTIONS 11.1 INTRODUCTION 11.2 THE STRUCTURE OF A C FUNCTION 11.2.1 FUNCTION NAME 11.2.2 FUNCTION RETURN TYPE AND VALUES 11.2.3 FUNCTION ARGUMENTS 11.2.4 FUNCTION BODY 11.2.5 EXAMPLE PROGRAMS 11.3 FUNCTION VARIABLES: SCOPE AND LIFETIME 11.3.1 AUTOMATIC VARIABLES 11.3.2 GLOBAL AND EXTERNAL VARIABLES 11.3.3 STATIC VARIABLES 11.3.4 REGISTER VARIABLES 11.4 FUNCTIONS WITH POINTER ARGUMENTS 11.4.1 FUNCTION POINTER AS ARGUMENT 11.5 FUNCTIONS WITH ARRAY ARGUMENTS 11.6 FORWARD DECLARATION OF FUNCTIONS 11.7 VARIABLE NUMBER OF ARGUMENTS 11.8 RECURSION 11.9 SAMPLE PROGRAMS FILE MANAGEMENT 12.1 INTRODUCTION 12.2 CREATING AND OPENING FILE 12.3 CLOSING A FILE 12.4 WRITING-TO AND READING-FROM A TEXTUAL FILE 12.4.1 WRITING AND READING SINGLE CHARACTERS 12.4.2 WRITING AND READING INTEGERS 12.4.3 WRITING AND READING STRINGS 12.4.4 WRITING AND READING FORMATTED DATA 12.5 WRITING-TO AND READING-FROM A BINARY FILE 12.6 MISCELLANEOUS FILE MANAGEMENT FUNCTIONS DYNAMIC MEMORY ALLOCATION 13.1 INTRODUCTION 13.2 C PROGRAM – MEMORY LAYOUT 13.3 ALLOCATING MEMORY 13.4 ALTERING ALLOCATED MEMORY SIZE 13.5 RELEASING ALLOCATED SPACE 13.6 SAMPLE PROGRAM 13.7 THINGS TO REMEMBER COMMAND LINE ARGUMENTS 14.1 INTRODUCTION 14.2 ‘main’ FUNCTION REVISITED 14.3 SAMPLE PROGRAMS PREPROCESSOR DIRECTIVES 15.1 INTRODUCTION 15.2 FILE INCLUSION DIRECTIVES 15.3 MACRO DIRECTIVES 15.3.1 SIMPLE MACRO SUBSTITUTION 15.3.2 MACRO SUBSTITUTION USING ARGUMENTS 15.3.3 NESTED MACRO SUBSTITUTION 15.3.4 STANDARD PREDEFINED MACROS 15.3.5 UNDEFINING A MACRO 15.4 COMPILER CONTROL DIRECTIVES 15.4.1 CONDITIONAL PREPROCESSOR STATEMENTS 15.4.2 Pragma DIRECTIVES 15.4.3 DIAGNOSTIC PREPROCESSOR STATEMENTS 15.5 SAMPLE PROGRAM DEPRECATED FUNCTIONS BEST PROGRAMMING PRACTICES 17.1 INTRODUCTION 17.1.1 DOCUMENTATION 17.1.2 AVOID USING DEPRECATED FUNCTIONS 17.1.3 TABS 17.1.4 INDENTATION 17.1.5 LINE LENGTH 17.1.6 BLANK LINES 17.1.7 FILE HEADER 17.1.8 FUNCTION HEADER 17.1.9 BRACES 17.1.10 PREVENT MULTIPLE INCLUSIONS 17.1.11 FUNCTION POINTERS 17.1.12 USE OF PARENTHESIS 17.1.13 BOOLEAN COMPARISONS 17.1.14 COMPARING CONSTANTS 17.1.15 ALWAYS CHECK RETURN VALUES 17.1.16 BLOCK STATEMENTS 17.1.17 SWITCH STATEMENTS 17.1.18 DISABLING OUT CODE 17.1.19 SHORT FUNCTIONS ARE BEAUTIFUL 17.1.20 LIMIT EXIT POINTS FROM FUNCTIONS 17.1.21 INITIALIZE VARIABLES 17.1.22 VARIABLE NAMING CONVENTIONS LINKED LISTS 18.1 INTRODUCTION 18.2 LINKED LIST TYPES 18.2.1 SINGLE LINEAR LINKED LIST 18.2.2 DOUBLE LINEAR LINKED LIST 18.2.3 SINGLE CIRCULAR LINKED LIST 18.2.4 DOUBLE CIRCULAR LINKED LIST STACKS AND QUEUES 19.1 INTRODUCTION 19.2 STACKS 19.2.1 STACK USING ARRAY 19.2.2 STACK USING LINKED LIST 19.3 QUEUES 19.3.1 QUEUE USING ARRAY 19.3.2 QUEUE USING LINKED LIST TREES 20.1 INTRODUCTION 20.2 BINARY SEARCH TREES 20.3 AVL TREES 20.3.1 AVL ROTATIONS 20.4 SPACE AND TIME COMPLEXITIES 20.5 FULL BINARY TREES 20.6 PERFECT BINARY TREES 20.7 COMPLETE BINARY TREES SORTING AND SEARCHING 21.1 INTRODUCTION 21.2 QUICKSORT 21.3 MERGE SORT 21.4 BINARY HEAP 21.5 HEAP SORT 21.6 INSERTION SORT 21.7 BUBBLE SORT 21.8 SELECTION SORT 21.9 BINARY SEARCH TREE 21.10 SPACE AND TIME COMPLEXITIES 21.11 SEARCHING 21.11.1 LINEAR SEARCH 21.11.2 BINARY SEARCH 21.11.3 BINARY SEARCH TREE 21.11.4 JUMP SEARCH C LIBRARY FUNCTIONS