Handout: Problem Solving and 'C' Programming

Version: PSC/Handout/1107/1.0 Date: 16-11-07

Cognizant 500 Glen Pointe Center West Teaneck, NJ 07666 Ph: 201-801-0233 www.cognizant.com

Problem Solving and C Programming

TABLE OF CONTENTS
About this Document ....................................................................................................................6 Target Audience ...........................................................................................................................6 Objectives .....................................................................................................................................6 Pre-requisite .................................................................................................................................6 Session 2: Introduction to Problem Solving and Programming Languages ...........................7 Learning Objectives ......................................................................................................................7 Problem Solving Aspect ...............................................................................................................7 Program Development Steps .......................................................................................................8 Introduction to Programming Languages ...................................................................................14 Types and Categories of Programming Languages ...................................................................15 Program Development Environments ........................................................................................18 Summary ....................................................................................................................................19 Test your Understanding ............................................................................................................19 Session 3: Introduction to C Programming Language .............................................................21 Learning Objectives ....................................................................................................................21 Introduction to C Language ........................................................................................................21 Evolution and Characteristics of C Language ............................................................................21 Structure of a C Program ............................................................................................................23 C Compilation Model ..................................................................................................................24 C Fundamentals .........................................................................................................................25 Character Set..............................................................................................................................25 Keywords ....................................................................................................................................26 Identifiers ....................................................................................................................................26 Data Types .................................................................................................................................26 Variables .....................................................................................................................................28 Constants....................................................................................................................................29 Operators ....................................................................................................................................30 Expressions ................................................................................................................................32 Type Casting...............................................................................................................................33 Input and Output Statements......................................................................................................35 Try It Out .....................................................................................................................................39 Summary ....................................................................................................................................39 Test your Understanding ............................................................................................................39
Page 2 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Session 5: Selection and Control Structures ............................................................................41 Learning Objectives ....................................................................................................................41 Basic Programming Constructs ..................................................................................................41 Sequence....................................................................................................................................42 Selection Statements ..................................................................................................................42 ‘if’ Statement ...............................................................................................................................42 Conditional / Ternary / ?: Operator .............................................................................................44 Switch Statement ........................................................................................................................45 Iteration Statements ...................................................................................................................46 ‘for’ statements ...........................................................................................................................46 ‘while’ statement .........................................................................................................................48 ‘do - while’ statement ..................................................................................................................48 Break, Continue Statements.......................................................................................................49 Try It Out .....................................................................................................................................50 Summary ....................................................................................................................................51 Test your Understanding ............................................................................................................51 Session 7: Arrays and Strings ....................................................................................................53 Learning Objectives ....................................................................................................................53 Need for an Array .......................................................................................................................53 Memory Organization of an Array...............................................................................................53 Declaration and Initialization.......................................................................................................54 Basic Operation on Arrays..........................................................................................................55 Multi-dimensional Array ..............................................................................................................56 Strings.........................................................................................................................................58 String Functions ..........................................................................................................................59 Character Functions ...................................................................................................................61 Try It Out .....................................................................................................................................61 Summary ....................................................................................................................................63 Test your Understanding ............................................................................................................63 Session 9: Functions ...................................................................................................................65 Learning Objectives ....................................................................................................................65 Need for Functions .....................................................................................................................65 Function Prototype .....................................................................................................................66 Function Definition ......................................................................................................................67 Function Call ...............................................................................................................................69 Passing Arguments ....................................................................................................................70 Functions and Arrays ..................................................................................................................73
Page 3 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

................................ All Rights Reserved C3: Protected ...............................................................................................................101 Block I/O ....................................................................................................................................................................................................................93 Enumeration .............................................................................................................100 Numeric I/O......................................................................................................................................................................................................79 Command Line Arguments ............................................................................................................................................................................................................................106 Test your Understanding .............................................................................................................................92 Learning Objectives .......................................................108 Random File Operations ..........................................................................................................89 Summary ..........Problem Solving and C Programming Try It Out .......................................87 Structures and Functions .................................115 Declaration and Initialization....................................................................................................................................................................................................96 Character I/O ........................................106 Session 15: Files and Preprocessor directives / Pointers ................................95 Introduction to Files .........................................................108 Preprocessor Directives ..............................90 Test your Understanding .....................109 Introduction to Pointers ...........................................................77 Test your Understanding ................................................................................................................108 Learning Objectives ....................................................................................94 Typedef Statement ................................................................................................88 Try It Out .....................................................................102 Try It Out ................98 String I/O.........................................................95 File Operations ........................................................................................................................................................................77 Session 10: Functions/Structures and Unions..................................92 Union of Structures ........................................90 Session 14: Structures and Unions / Files and Preprocessor directives ...............................................................................................................................................................................75 Summary ........................................................................115 Page 4 ©Copyright 2007.........................104 Summary ............................................................................................................................................................82 Introduction to Structures and Unions .............................. Cognizant Technology Solutions............................................................................................................79 Learning Objectives ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................83 Declaration and Initialization..............................................................84 Structures and Arrays .........................................100 Formatted I/O......................................................................................................................................................................................................................79 Storage Classes ..................92 Unions....................................................................................................................................................................................................................................

............................................127 Structures and Pointers ............................................................................................................................................................................................................................151 STUDENT NOTES: ...........................................................................................................................................................................................................129 Dynamic Memory Allocation ...............138 References ...............................................................................................................................................................133 Summary ................................................................................................................. All Rights Reserved C3: Protected ...................123 Summary ................... Cognizant Technology Solutions......................................................................................................................................................151 Websites .............................................127 Learning Objectives ...............................130 Try It Out ................................................................................................................117 Try It Out .......................................136 Syntax Summary ..........125 Session 17: Pointers ...............................................................................................................................................................................................................................................................................................................Problem Solving and C Programming Pointer Arithmetic ....152 Page 5 ©Copyright 2007.......151 Books .......................................................................................................................................................................125 Test your Understanding ...........................................127 Functions and Pointers ............................................................................136 Test your Understanding ........116 Pointers and Arrays ..........................................................................................................................................................................................................................................................................................................................................................................

Problem Solving and C Programming Introduction About this Document This document provides the following topics: Problem solving concepts An introduction to C programming language Basic concepts of C programming language Target Audience In-Campus Trainees Objectives Explain the concepts of problem solving Explain the concepts of C programming language Write effective programs using C programming language Pre-requisite This module does not require any pre-requisites Page 6 ©Copyright 2007. Cognizant Technology Solutions. All Rights Reserved C3: Protected .

A problem can be solved successfully only after making an effort to understand the problem. prioritizing. the following questions help: What do we know about the problem? What is the information that we have to process in order the find the solution? What does the solution look like? What sort of special cases exist? How can we recognize that we have found the solution? It is important to see if there are any similarities between the current problem and other problems that have already been solved. and selecting alternatives for a solution and implementing a solution. The important aspect to be considered in problem-solving is the ability to view a problem from a variety of angles. Cognizant Technology Solutions. It is an act of defining a problem. identifying. Some of the well known strategies are: Divide and Conquer Greedy Method Dynamic Programming Backtracking Branch and Bound Page 7 ©Copyright 2007. There is no universal method for solving a given problem. determining the cause of the problem. you will be able to: Explain the Problem Solving Aspect Identify the steps involved in program development Know about the Programming Languages and it’s types and categories Understand the Program Development Environments Problem Solving Aspect Problem solving is a creative process. All Rights Reserved C3: Protected .Problem Solving and C Programming Session 2: Introduction to Problem Solving and Programming Languages Learning Objectives After completing this session. To understand the problem. We have to be sure that the past experience does not hinder us in developing new methodology or technique for solving a problem. Different strategies appear to be good for different problems.

The input specification is obtained by answering the following questions: o o o o What specific values will be provided as input to the program? What format will the values be? For each input item. The processing requirement specification is obtained by answering the following questions: o o o What is the method (technique) required in producing the desired output? What calculations are needed? What are the validation checks that need to be applied to the input data? Page 8 ©Copyright 2007.Problem Solving and C Programming Program Development Steps The various steps involved in Program Development are: o o o o o o o Defining or Analyzing the problem Design (Algorithm) Coding Documenting the program Compiling and Running the Program Testing and Debugging Maintenance Analyzing or Defining the Problem The problem is defined by doing a preliminary investigation. headings. All Rights Reserved C3: Protected . Tasks in defining a problem: o o o Specifying the input requirements Specifying the output requirements Specifying the processing requirements Specifying the input requirements Determine the inputs required and source of the data. Cognizant Technology Solutions. The output specification is obtained by answering the following questions: o o o o What values will be produced? What is the format of these values? What specific annotation. or titles are required in the report? What is the amount of output that will be produced? Specifying the Processing Requirements Determine the processing requirements for converting the input data to output. Defining a problem helps us to understand the problem clear. It is also known as Program Analysis. what is the valid range of values that it may assume? What restrictions are placed on the use of these values? Specifying the output requirements Describe in detail the output that will be produced.

An important approach is Top-Down programming design. called Modules Each module should be independent and should have a single task to do Each module can have only one entry point and one exit point.1 Find the factorial of a given number Input: Positive valued integer number Output: Factorial of that number Process: Solution technique which transforms input into output. easier to design Modules may be reused Breaking the problem into parts allows more than one person to work on the solution simultaneously Page 9 ©Copyright 2007. Program Design is both a product and a process. The process results in a theoretical framework for describing the effects and consequences of a program as they are related to its development and implementation. consider the following guidelines: A problem is divided it into smaller logical sub-problems. so that the logic flow of the program is easy to follow When the program is executed. While applying top-down design to a given problem. All Rights Reserved C3: Protected . It is a structured design technique which breaks up the problem into a set of sub-problems called Modules and creates a hierarchical structure of modules.Problem Solving and C Programming Example 2. in order to make the design and testing easier Top-down design has the following advantages: Breaking up the problem into parts helps us to clarify what is to be done At each step of refinement. Factorial of a number can be calculated by the formula n! = 1*2*3*4…. the new parts become more focussed and. therefore. it must be able to move from one module to the next in sequence. Cognizant Technology Solutions.*n Design A design is the path from the problem to a solution in code. several design methodologies can be applied. A well designed program is more likely to be: Easier to read and understand later Less of bugs and errors Easier to extend to add new features Easier to program in the first place Modular Design Once the problem is defined clearly. until the last module is executed Each module should be of manageable size.

to test its correctness. the closer our first attempt will be to a correct solution and the less revision will be required. However. The term “ordered sequence” specifies.Problem Solving and C Programming Algorithm (Developing a Solution technique) An algorithm is a step-by-step description of the solution to a problem. when carried out for a given set of initial conditions. This refining continues until the programmer is satisfied that. but omits language-specific syntax. i to be 1 Step 3: Input a number n Step 4: Check whether the number is 0. An algorithm must be: Definite Finite Precise and Effective Implementation independent ( only for problem not for programming languages) Developing Algorithms Algorithm development process is a trial-and-error process. It is defined as an ordered sequence of well-defined and effective operations which.2: Algorithm for finding factorial of a given number Step 1: Start Step 2: Initialize factorial to be 1. The errors identified leads to insertions. produce output. Example 2. or modifications to the existing algorithm. All Rights Reserved C3: Protected . deletions. fact. If so report factorial is 1 and goto step 9 Step 5: Repeat step 6 through step 7 n times Step 6: Calculate factorial = factorial * i Step 7: Increment i by 1 Step 8: Report the calculated factorial value Step 9: Stop Pseudo Code Pseudo code is an informal high-level description of an algorithm that uses the structural conventions of programming languages. It is an outline of a program written in English or the user's natural language. and terminate in a finite time. a novice programmer should not view developing algorithm as a single-step operation Example 2. The more experience we gain in developing an algorithm. the algorithm is essentially correct and ready to be executed. after the completion of each step in the algorithm. Cognizant Technology Solutions. the next step must be unambiguously defined. i Step 2: SET variable fact =1 and i =1 Page 10 ©Copyright 2007.3: Pseudo Code for finding factorial of a given number Step 1: START Step 2: DECLARE the variables n. Programmers make initial attempt to the solution and review it.

reports).2: GOTO Step 9 Step 5: WHILE the condition i<=n is true. It is usually used to break a flow line that will be continued elsewhere. The Document Symbol is used to represent any type of hard copy input or output (i. Connector Symbol represents the exit to. required to solve a problem. Cognizant Technology Solutions. Page 11 ©Copyright 2007. repeat Step 6 through Step 7 Step 6: COMPUTE fact = fact * i Step 7: INCREMENT i by 1 Step 8: PRINT the factorial value Step 9: STOP Flowchart Flowchart is a diagrammatic representation of an algorithm. Typical flowchart symbols are given below: Represents Start. Output data Represents Process (actions. another part of the same flow chart.e. All Rights Reserved C3: Protected . It serves as a blueprint or a logical diagram of the solution to a problem. End Represents Input. It uses different symbols to represent the sequence of operations. Page numbers are usually placed inside for easy reference. or entry from.1: PRINT factorial = 1 Step 4.Problem Solving and C Programming Step 3: READ the number n Step 4: IF n = 0 then Step 4. calculations) Represents Decision Making Represents Pre-defined Process / module Represents off page connector which are used to indicate that the flow chart continues on another page.

Problem Solving and C Programming Represents control flow Example 2. Cognizant Technology Solutions. fact.i =1 Read n True If n=0 0 Print 1 False If i<=n False True fact = fact * i i=i+1 Print fact STOP Coding Page 12 ©Copyright 2007. All Rights Reserved C3: Protected .4: Flow Chart for finding factorial of a given number START Declare the variables n. i Initialize fact =1.

Linking is done if necessary. Details of particular programs. and project workbooks Internal documentation. which includes things such as reference manuals. Testing Testing is the process of executing a program with the deliberate intent of finding errors. or particular pieces of programs. Documentation can be of great value. algorithm descriptions. Testing is done during every phase of program development. After compilation. and comments) Compiling and Executing the Program Compilation is a process of translating a source program into machine understandable form. flowcharts. requirements can be tested for its correctness. which is part of the source code itself (essentially. The compiler is system software. It is important to design test cases for abnormal input conditions. statements. are easily forgotten or confused without suitable documentation. Then. Writing a program is called Coding. Page 13 ©Copyright 2007.Problem Solving and C Programming An algorithm expressed in programming languages is called Program. Initially. the design (algorithm. Documentation comes in two forms: External documentation. Program should be tested with all possible input data and control conditions. not only to those involved in maintaining or modifying a program. Structured walk through is made to verify the design. Testing is needed to check whether the expected output matches the actual output. The program is now ready for execution. Programs are tested with several test criteria and the important ones are given below: Test whether each and every statement in the program is executed at least once (Basic path testing) Test whether every branch in the program is traversed at least once (control flow) Test whether the input data flows through the program and is converted to an output (data flow) The probability of discovering errors through testing can be increased by selecting significant test cases. which does the translation after examining each instruction for its correctness. The logic that has been developed in the algorithm is used to write the program. the executable object code is loaded into the computer’s memory and the program instructions are executed. Cognizant Technology Solutions. flow charts) can be tested for its exactness and efficiency. Linking is the process of putting together all the external references (other program files and functions) that are required by the program. The translation results in the creation of object code. but also to the programmers themselves. the declarations. Documenting the Program Documentation explains how the program works and how to use the program. During execution. All Rights Reserved C3: Protected .

Debugging means diagnosing and correcting the root causes. and Pascal. by means of issuing sequence of commands to it. debugging occupies as much as 50 percent of the total development time. using symbolic constants etc) Introduction to Programming Languages What is a Programming Language? Computer Programming is an art of making a computer to do the required operations. debugging is the hardest part of programming because of improper documentation. Page 14 ©Copyright 2007. such as BASIC. Debugging Debugging is a process of correcting the errors. Some programmers use the terms “testing” and “debugging” interchangeably. Testing means detecting errors. Maintainability of the program is achieved by: Modularizing it Providing proper documentation for it Following standards and conventions (naming conventions. One of the ways to ensure the correctness of the program is by printing out the intermediate results at strategic points of computation. keywords and the syntax for organizing programming instructions. For many programmers. This is called foolproof programming.Problem Solving and C Programming The Boundary (or Extreme) Cases How does the algorithm perform at the extremes of the valid cases? The Unusual Cases What happens when the input data violates the normal conditions of the problem or represent unusual condition? The Invalid Cases How does the algorithm react for data which are patently illegal or completely meaningless? An algorithm should work correctly and produce meaningful results for any data. Maintenance Programs require a continuing process of maintenance and modification to keep pace with changing requirements and implementation technologies. All Rights Reserved C3: Protected . The term programming languages usually refers to high-level languages. but careful programmers distinguish between the two activities. Programs may have logical errors which cannot be caught during compilation. Ada. Debugging is the process of identifying their root causes. Each programming language has a unique set of characters. Maintainability and modifiability are essential characteristics of every program. A programming language can be defined as a vocabulary and set of grammatical rules for instructing the computer to perform specific tasks. FORTRAN. On some projects. C++. COBOL. Cognizant Technology Solutions. C.

The programmer has to know details of hardware to write program It is difficult to debug the program Page 15 ©Copyright 2007. The study of more than one programming language helps us: to master different programming paradigms to enhance the skills to state different programming concepts to understand the significance of a particular language implementation to compare different languages and to choose appropriate language to improve the ability to learn new languages and to design new languages Types and Categories of Programming Languages Types of Programming Languages There are two major types of programming languages: Low Level Languages High Level Languages Low Level Languages The term low level refers closeness to the way in which the machine has been built.Problem Solving and C Programming Why Study Programming Languages? The design of new programming languages and implementation methods have been evolved and improved to meet the change in requirements. it recognizes the code and converts it in to electrical signals. Because of it design. All Rights Reserved C3: Protected . Low level languages are machine oriented and require extensive knowledge of computer hardware architecture and its configuration. When this sequence of codes is fed in to the computer. Advantage The program runs faster because no translation is needed. Low Level languages are further divided in to Machine language and Assembly language. The instructions are called machine instruction (machine code) and it is written as strings of 1's (one) and 0’s (zero). For example. machine language is not an easy language to learn. It is also difficult to debug the program written in this language. It does not need any translator program. a program instruction may look like this: 1011000111101 Machine language is considered to be the first generation language. there are many new languages. (It is already in machine understandable form) Disadvantages It is very difficult to write programs in machine language. Cognizant Technology Solutions. (a) Machine Language Machine Language is the only language that is directly understood by the computer. Thus.

For example. Advantages: The symbolic keywords are easier to code and saves time and effort It is easier to correct errors and modify programming instructions Assembly Language has utmost the same efficiency of execution as the machine level language. set of mnemonics (symbolic keywords) are used to represent machine codes. In order to execute the programs written in assembly language. There are some numerical & mathematical oriented languages like FORTRAN (Formula Translation) and BASIC (Beginners All-purpose Symbolic Instruction Code). SUB and LOAD etc. Compiler is a translator program which converts a program in high level language in to machine language. because there is one-to-one translation between assembly language program and its corresponding machine language program Disadvantages: Assembly languages are machine dependent. High Level Languages High level languages are the simple languages that use English like instructions and mathematical symbols like +. This translator program is called Assembler. These early machines were designed to solve numerical problems and were thought of as ELECTRONIC CALCULATORS. Advantages of High Level Languages High level languages are easy to learn and use Categories of programming languages Numerical Languages Early computer technology dates from the era just before World War 2 in the late 1930s to the early 1940s. Page 16 ©Copyright 2007. Higher level languages are problem-oriented languages because the instructions are suitable for solving a particular problem. Numerical calculations were the dominant form of application for these early machines. Cognizant Technology Solutions. Mnemonics are usually combination of words like ADD. it is enough to know the logic and required instructions for a given problem. irrespective of the type of computer used. %. A program written for one computer might not run in other computer. All Rights Reserved C3: Protected . -. In high level languages. COBOL (Common Business Oriented Language) is mostly suitable for business oriented applications.Problem Solving and C Programming (b) Assembly Language In assembly language. Assembly language is considered to be the second-generation language. for its program construction. a translator program is required to translate it to the machine language. /.

the use of assembly language held on for years in the system area long after other application domains started to use higher-level languages. which would be a business-oriented language that used English as much as possible for its notation. FORTRAN is a particularly good language for processing numerical data. The major breakthrough occurred. led to the formation of a Short Range Committee to develop COBOL. in turn. The major landmark here is the development of UNIX. the US department of Defense sponsored a meeting to develop COMMON BUSINESS LANGUAGE (CBL). Many systems programming languages such as CPL & BCPL were designed. In 1959. more AI languages like SNOBOL & PROLOG were designed. but it is complex and difficult to learn. What makes a Good Language? Every language has its strengths and weaknesses. though not widely used. but it is not as flexible as the C programming language. with every combination being meaningful. tested and maintained with ease. For example. Orthogonality makes a language easy to learn and write programs. when John McCarthy of MIT designed LISP (List Processing) for the IBM 704. type of program. The choice of which language to use depends on the type of computer used. Naturalness for the application: A language needs syntax that when properly used allows the program structure to reflect the underlying logical structure of the algorithm. Following are the most important features that would make a programming language efficient and easy to use: Clarity.Problem Solving and C Programming Business Languages Business data processing was an early application domain developed after numerical applications. Simplicity and Unity: A programming Language provides. PASCAL is very good for writing wellstructured and readable programs. The syntax of a language should be such that programs may be written. control structures and natural syntax for the problem to be solved. where high level languages also proceed to work effectively. operations. The language should provide appropriate data structures. All Rights Reserved C3: Protected . but it does not lend itself very well to organize large programs. This. Cognizant Technology Solutions. Artificial Intelligence Languages (AI) The first step towards the development of AI languages commenced with the evolution of IPL (Information Processing Language) by the Rand Corporation. both a conceptual framework for thinking about algorithms and a means for expressing these algorithms. C++ embodies powerful object-oriented features. Later. Page 17 ©Copyright 2007. because there are fewer exceptions & special cases to remember. Systems Languages Because of the need of efficiency. Orthogonality: This refers to the attribute of being able to combine various features of a language in all possible combinations. and the expertise of the programmer.

testing. Host and Target environment may be different for a program or application. Page 18 ©Copyright 2007. the backup process on an organization. This is highly critical for large programs that will be executed continuously. there is always a substantial gap remaining between the abstract data structures & operations that characterize the solution to a problem and the particular data structures and operations built into a language. usage & maintenance solutions for a problem with minimum investment of programmer time & energy. The external environment which supports the execution of a program is termed as Operating or Target Environment. The transaction details of all the departments are collected for backup at one place and the backup is done at a time at the end of the day. For example. It tends to have less influence on language design than the operating environment in which programs are expected to be executed. Cost of use: Cost of use is measured on different languages like: Cost of program execution: Optimizing compilers. Cost of Program creation. Program Development Environments The environment under which a program is designed. Each poses different requirement on languages adapted for those environments. Batch-Processing Environments In batch-processing environments. Cost of Program Maintenance: The highest cost involved in any program is the total life-cycle costs including development costs & the cost of maintenance of the program while it is in production use. The production of programs that operate reliably and efficiently is made much simpler by a good programming environment and by a language that allows the use of good programming tools and practices. coding. testing & use: This implies design. the input data are collected in ‘batches’ on files and are processed in batches by the program. Cognizant Technology Solutions. and Embedded System Environment. Interactive Environment. design of efficient run-time support mechanisms are all factors that contribute towards cost of program execution. tested & debugged is called Host Environment. Programming Environments (Host Environment) It is the environment in which programs are created and tested. coded. Portability of Programs: Portability is an important criterion for many programming projects which essentially indicates the transportability of the resulting programs from the computer on which they are developed to other computer systems. efficient register allocation. A language whose definition is independent of the features of a particular machine forms a useful base for the production of transportable programs. Target Environments Target environments can be classified into 3 categories – Batch Processing Environment. All Rights Reserved C3: Protected .Problem Solving and C Programming Support for abstraction: Even with the most natural programming language for an application.

Target environments can be classified into 3 categories. Cognizant Technology Solutions. a program interacts directly with a user at a display console. A programming language is a vocabulary and set of grammatical rules for instructing a computer to perform specific tasks. algorithm development. Embedded System Environments An embedded computer system is used to control part of a larger system such as an industrial plant (computerized machineries) or an aircraft. documenting. The environment under which a program is designed. b) Programs written in high Level languages needs translation for executing them. 3. word processing systems etc. debugging. 2. called Modules. Examples include database management systems. Summary Program development life cycle involves analysis. divides the problem into smaller logical sub problems. coded. failure of which would imply failure of the larger system as well. An algorithm is a sequence of unambiguous instructions for solving a problem. tested & debugged is called Host environment (programming environment) The environment under which a program is executed is called Target environment. and maintenance. compiling and running. Distinguish between testing and debugging. coding. Top-down program design. All Rights Reserved C3: Protected . State whether the following is True or False : a) Assembly language is a second generation language. 4. by alternately sending output to the display & receiving input from the keyboard or mouse. o o o Batch processing environment Interactive environment Embedded System environment Test your Understanding 1. Planning a tour. Give the algorithm. Two major types of programming languages are Low Level Languages and High Level Languages. pseudo code and flowchart for the following problem: Sort a list of numbers in ascending order. Page 19 ©Copyright 2007. testing.Problem Solving and C Programming Interactive Environments In interactive environment. The computer system will be an integral part of the larger system. Represent the following problem in top-down design.

The program needs to be compiled in every machine Answers: 3. c (it can run on any machine) Page 20 ©Copyright 2007. It can run on any machine d. True. True 5. What is meant by portability of programs? a.Problem Solving and C Programming 5. Cognizant Technology Solutions. All Rights Reserved C3: Protected . Easy to carry from place to place b. Testing is to find errors in programs and debugging is to correct their root causes 4. Transportability of resulting program within machine folders c.

Ken Thompson created a language using many features of BCPL and called it ‘B’. The data types and control structures are directly supported by most computers. UNIX operating system was coded almost entirely in C. C uses many concepts of these languages and new features like data types. During 1970s. Both BCPL and B were “typeless” system programming languages. Prior to C. Its features allow the development of well-structured programs. in 1973. The popularity of C led to the development of different versions of the language that were similar but often incompatible. Martin Richards developed a language called BCPL (Basic Combined Programming Language) primarily. American National Standards Institute (ANSI) appointed a technical committee to define a standard for C.Problem Solving and C Programming Session 3: Introduction to C Programming Language Learning Objectives After completing this session. Cognizant Technology Solutions. The standard was updated in 1999. Page 21 ©Copyright 2007. C had evolved into what is now known as “traditional C”. Systems languages: Low Level and Assembly language. BCPL. which are portable but inefficient. for writing system software. Because of its flexibility and efficiency it is widely used for software development. there are two broad types of languages: Applications languages: Basic and COBOL. which are efficient but nonportable. The committee approved a version of C in 1989 which is now known as ANSI C. In 1970. ‘B’ was used to create early versions of UNIX operating system at Bell Laboratories. Evolution and Characteristics of C Language Evolution of C Language ALGOL was the first computer language to use a block structure. To assure that the C language remains standard. It was evolved from ALGOL. C was developed by Dennis Ritchie at Bell Laboratories in 1972. All Rights Reserved C3: Protected . It was then approved by the International standards Organization (ISO) in 1990. resulting in the construction of efficient programs. you will be able to: Explain the Evolution of C Language Describe the Structure of a C Program Know about the Compilation Model Explain the Basic elements of C language Introduction to C Language C is a general purpose high level programming language. and B. In 1967.

All Rights Reserved C3: Protected . C# conserve C syntax.Problem Solving and C Programming ‘C‘ is developed in such a way that it is efficient and portable. C++. Java. Cognizant Technology Solutions. The following figure depicts the history of languages: Page 22 ©Copyright 2007.

Problem Solving and C Programming Characteristics of C Language The increasing popularity of C is due to its various desirable qualities: C language is well suited for structured modular programming C is a robust language with rich set of built-in functions and operators C is smaller which has minimal instruction set and programs written in C are efficient and fast C is highly portable (code written in one machine can be moved to other) C is highly flexible C allows access to the machine at bit level (Low level (Bitwise) programming) C supports pointer implementation .extensive use of pointers for memory. to include functions from the system library. The variables that are used in common by more than one function are called Global Variables and are declared in global declaration section. All the statements in the declaration and executable parts end with a semicolon. These two parts must appear between the opening and the closing braces. C program can be documented using these comment lines. Cognizant Technology Solutions. Every C program must have one main() function. C program can have any number of user-defined functions and they are generally placed immediately after the main() function. The preprocessor directives provide instructions to the preprocessor. This section can have declarations for all the user-defined functions. The prototype of the user-defined functions (function declaration) is specified after the preprocessor directives. A function is a subroutine that includes one or more statements designed to perform a specific task. C is a case sensitive language. The program execution begins at the opening brace and ends at the closing braces. Comments are enclosed within /* and */. called functions. The declaration part declares all the variables used in the executable part. array. structures and functions Structure of a C Program A C program can be viewed as a group of building blocks. All Rights Reserved C3: Protected . This function contains two parts: declaration part and executable part. The closing brace of the main function is the logical end of the program. preprocessor directives global declaration section main() { : } user-defined function definitions. The executable portion of the main function will have three types of statements: Input. All sections except the main() function may be absent when they are not required. Page 23 ©Copyright 2007. Output and Processing statements. to define the symbolic constants and macro. although they may appear in any order.

num2). The key features of the C compilation model are as follows: The Preprocessor The preprocessor accepts source code as input and interprets preprocessor directives denoted by #.h> main( ) { int num1. Cognizant Technology Solutions. printf(“\n Please enter 2 integer numbers”).Problem Solving and C Programming Example 3.1 /* Program to accept 2 integers from the keyboard as input.&num2). printf (“\n The following data was input: %d & %d ”.num2. sum = num1+num2. printf (“\n Program to find the sum of two numbers\n”). } C Compilation Model The C Compilation model describes the program development process in terms of language.sum. calculate and print their sum */ #include <stdio. num1. scanf(“%d%d”. All Rights Reserved C3: Protected . It removes comments and empty lines in the program. sum). &num1. printf(“\n The sum of two numbers is = %d”. Page 24 ©Copyright 2007.

numbers and expressions. Blank spaces etc. The frequently used escape sequences are given below: o o o o o o o o Horizontal tab ( \t ) Vertical tab ( \v ) Carriage return (\r ) New line ( \n ) Form feed (\f ) Back Space ( \b ) Back Slash ( \\ ) Null ( \0 ) Page 25 ©Copyright 2007. Cognizant Technology Solutions.] Link Editor If a source file references library functions or functions defined in other source files. to create an executable file. Character Set Character set defines the characters that are used to form words.Z o Lowercase a…. macro definition #define MAX_ARRAY_SIZE 100 C Compiler The C compiler translates the preprocessed code (user written program) to assembly code (machine understandable code). These files are usually called header files. % .z Digits o o All decimal digits 0…9 =. file with a.includes contents of a named file. [On UNIX.2 #include -. +. the link editor combines these functions with main(). . All Rights Reserved C3: Protected . #include <stdio. which begin with backward slash and followed by one or more special characters. Identifiers. External variable references are resolved here. C Fundamentals Basic elements of C language constitute Character set.standard library I/O file #define -. The characters in C are grouped into the following categories: Letters o Uppercase A….OBJ indicates object code files.o suffix and on MSDOS files with . ? . Assembler The assembler creates the object code.defines a symbolic name or constant. Operators and Expression..Problem Solving and C Programming Example 3.h> -. Special characters Escape Sequences: Escape sequences are non printable characters.h> -. #include <math.standard library maths file.

Problem Solving and C Programming Keywords Keywords have standard. The following table shows the list of keywords. and the type of operation that can be performed on a particular data item. predefined meanings in C. An Identifier can be of arbitrarily long. the range of values that can be represented in memory. It should start with an alphabet. the number of bytes to be reserved in memory. All keywords must be written in lowercase. Keywords serve as basic building blocks for program statements. ANSI C supports 32 keywords. followed by the combinations of alphabets and digits. All Rights Reserved C3: Protected . No special character is allowed except underscore (_). Example 3. constants. and functions. ANSI C supports two classes of data types: Primary / Fundamental / Basic / Primitive data types Derived / Compound data types Page 26 ©Copyright 2007. Some implementation of C recognizes only the first eight characters and some other recognize first 32 characters. These keywords can be used only for their intended purpose and they cannot be used as programmer-defined identifiers. Cognizant Technology Solutions. auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static Long Switch typedef Union unsigned Void volatile While Identifiers Identifiers are names given to various programming elements such as variables.3 Valid identifiers : Invalid identifiers: sum_2_nos 5subjects basic_pay emp name _amount #ofstudents Data Types Data types are used to indicate the type of value represented or stored in a variable.

Cognizant Technology Solutions.Problem Solving and C Programming Primary / Fundamental / Basic / Primitive data types C uses the following basic data types: o o o o int char float double integer quantity character (stores a single character) single precision real (floating point) number double precision real (floating point) number Typical memory requirements for these data types are given below: o o o o int char float double 2 bytes 1 byte 4 bytes 8 bytes The actual number of bytes used in the internal storage for these data types depends on the machine being used. long int may be 2 bytes or 4 bytes Range of values represented by data types on 16-bit machine Type unsigned char signed char char unsigned int unsigned short int Meaning Unsigned character (positive) Size 8 bits 0 to 255 Range Represents single character. short int may be 1 byte or 2 bytes int = 2 bytes. int = 2 bytes. short int may require less space than an int or it may require the same amount of memory.535 Page 27 ©Copyright 2007. 8 bits Represents positive integer numbers -128 to 127 16 bits 0 to 65. All Rights Reserved C3: Protected . a long int may require the same amount of memory as an int or it may require more memory. For example. Here. Similarly. The basic data types can be augmented by the use of data type qualifiers. never less than int. o o o o short long signed unsigned A number of qualifiers or modifiers may be assigned to any basic data type to vary the number of bits utilized and the range of values represented by that data type. They are. Type Qualifiers Data type qualifiers add additional information to the data types.

4 * (10-38) to 3. Variable names must be chosen in such a way that it should be a valid identifier satisfying all the basic conditions.483. The value represented by the identifier may be changed during the execution of the program.768 to 32. Cognizant Technology Solutions. All Rights Reserved C3: Protected .147.Problem Solving and C Programming Type Short signed short short int signed short int int unsigned long long signed long long int signed long int Float Double long double void Meaning Size Range represents both positive and 16 bits negative integer quantity -32.647 Floating Point Number.7 * (10+308) 3.1 * (104932) Increases the size of double.967.767 represents positive long integer 32 bits 0 to 4.295 Represents both positive and negative long integer 32 bits -2.483.4 * (10+38) 1. A more accurate floatingpoint number than float 32 bits 64 bits 3.648 to 2.7 * (10-308) to 1.147. Page 28 ©Copyright 2007. They are: Arrays Structures Unions Enumerated Pointers Variables A variable is an identifier that represents a value. They are used to represent a collection of data. 80 bits Defines an empty data type which can then be associated with some data types. It is useful with pointers.294. Derived Data Types Derived data types are a combination of primitive data types. Variable names are case sensitive (ex: variable EMPNAME is different from variable empname).4 * (10-4932) to 1. The variable name can be chosen by the programmer in a meaningful way so as to reflect its function or nature in the program.

Constants A constant in C refers to the fixed values that do not change during the execution of a program. Initialization Variables can be initialized in the declaration statement itself or within the program using assignment statement. Symbolic constants are usually represented in upper case letters. y. ct=1.Problem Solving and C Programming Declaration of a variable Declaration is used to specify the variable names used in the program and the type of data that the variable can hold. The preprocessor directive #define is used to define symbolic constants in a program. float sum = 0. tot = 0. There are two types of constants: Symbolic constants Constant variables. z. k. A symbolic constant is defined as follows: #define MAX 100 #define PI 3.4 int i. General form: var_data_type list variables. Symbolic Constants A symbolic constant is defined in the preprocessor area of the program and is valid throughout the program. Example 3. also called read-only variables.5 int total=0.14 Page 29 ©Copyright 2007. float x. j. Example 3. char ch. Cognizant Technology Solutions. All Rights Reserved C3: Protected . General Form: [data type] variable name = value. int tot.0. ct=1.

Keyword ‘const’ is used to declare constant variables.6 const int size = 100. const float pi=3. which evaluates to either true or false. (true – 1. false – 0) Logical operators && || ! Logical AND (true only if both the operands are true) Logical OR (true if either one operand is true) Logical NOT (negate the operand) Page 30 ©Copyright 2007. Constant Variables A constant variable is declared and initialized in the variable declaration section of the program and cannot be modified thereafter. All Rights Reserved C3: Protected . const long a = 50000L. or const long a = 50000l. Example 3. Operators are used in programs to manipulate data. const char ch = ‘a’.14. The type of value stored in the constant must be specified in the declaration. C operators can be classified into a number of categories. const int a = 0Xa92 (Octal representation – prefix 0) (Hexadecimal representation – prefix 0x or 0X) Operators C supports a rich set of operators.Problem Solving and C Programming Each reference to ‘MAX’ in program will cause the value of 100 to be substituted. They include: Arithmetic operators + Addition Subtraction * Multiplication / Division (second operand must be nonzero) % Modulus (both operands must be integer and second operand must be non zero) Relational operators < Less than <= Less than or equals to > Greater than >= Greater than or equals to == Equals to != not equals to These operators are used to form relational expressions. An operator is a symbol that tells the computer to perform mathematical or logical operations. const int a = 0567. Cognizant Technology Solutions. This value cannot be changed by the program.

pre increment */ /* prints 6 .Unary minus Increment and decrement operators ++ may be in the form of pre increment or post increment (++ k: pre increment. Special operators & Address operator * Indirection operator comma Comma operator sizeof() Size of operator (sizeof(int) = 2 bytes) Page 31 ©Copyright 2007. (a = a+b equals to a+=b) Unary operators + Unary plus . %= Compound assignment operators are used whenever.Problem Solving and C Programming Expressions which use logical operators are evaluated to either true or false. *=.may be in the form of pre decrement or post decrement (-.post increment */ /* prints 7 */ -. left hand side identifier is used in the right hand side expression. +=.k: pre increment. -=. /=. the value of variable a will be assigned to variable big else b will be assigned. k++: post increment) Example: int i=5. printf(“%d”. printf(“%d”. i). i++). Bitwise operators & | << >> Bit wise AND Bit wise OR Left shift Right shift These operators are used to access machine at bit level. printf(“%d”. ++i). k--: post increment) Conditional operator (ternary operator) ?: used to carry out simple conditional checking Example: big = (a>b)? a: b In the above statement. /*prints 6 . Assignment operators = Assignment operator which assign a value to an identifier. if condition is evaluated to true. All Rights Reserved C3: Protected . Cognizant Technology Solutions.

It is necessary to be careful of the meaning of expressions such as a . Relational expression (uses relational operators).Problem Solving and C Programming Order of Precedence All the operators have its own precedence and associativity. The expression a + b – c is evaluated as (a + b) – c. Equality comparators Logical AND. operators. op= Name Parentheses. Logical OR. c=3 (1) a* b%c+1 is equivalent to (2) ++a*b – c-is equivalent to ((++a)*b) .(b / c). ! – sizeof() (Typecast) * & ++ -*/% +< > <= >= == != && || ?: = . Operators of the same priority group are evaluated from left to right fashion.b) / c or a . Assignment. member access operators Logical NOT. Index. function calls that evaluates to a value. Page 32 ©Copyright 2007. unary minus. indirection. address Increment and decrement operators.(c--) which is equal to 1 ((a*b) %c)+1 which is equal to 3 Expressions Expression is a combination of operands. All Rights Reserved C3: Protected . From high priority to low priority the order for all C operators is given below: Operator ( ) [ ] -> . Conditional. High priority operators are evaluated prior to lower priority ones. and Logical expression (uses logical operators). Inequality comparators. Additive operators.b / c because we may want the effect as either (a . The three types of expressions are Arithmetic expression (uses arithmetic operators).7: Operators Let a=1. b=2. Multiplicative operators. Cognizant Technology Solutions. Comma Association Left to Right Right to Left Right to Left Left to Right Left to Right Left to Right Left to Right Left tot Right Left to Right Right to Left Right to Left Left to Right Example 3.

5 5 -1 Type Casting C provides a mechanism for allowing the programmer to change the default data type of a given expression. computes the value of y+z and store the result in the variable x. long int to int causes dropping of the excess higher order bits. Typecasting allows a variable to behave like a variable of another type. (4) int c. (2) a = (b=2. the statement x = y + z. whose address specifies where to store the data on the right side. b+c. This is called Typecasting. (3) int a. In implicit type conversion. For example: a = b = c = d = 3. b=4. Page 33 ©Copyright 2007.Problem Solving and C Programming Assignment Statement Assignment statement is used to assign a value to a variable. The left side of the “=” is always a variable. e = a != b.) not a storage location. The final result of an expression is converted to the type of the variable on the LHS of the assignment statement. For example.which is the same as. Cognizant Technology Solutions.8 (1) a = (b = 2. C provides two types of type conversions: Implicit and Explicit type conversions. b+c). is not legal because x + 3 is an arithmetic expression (i. if the operands of an expression are of different types.e. the lower data type is automatically converted to the higher data type before the operation evaluation. In C. but more efficient than: a = 3. The result of the expression will be of higher data type. x + 3 = y.5. All Rights Reserved C3: Protected . o o o float to int assignment causes truncation of the fractional part. Example 3. before assigning the value to it. a=3. . c=3. d = 3. c=0 d=0 e=1 a= 3 b=3. a=b=3. double to float causes round of digits. c = 3. C allows multiple assignment statements using =. c=3.. For example. b-c). d = a == b. c= a>b. float b. However. b = 3. the assignment operator is “=”..

Cognizant Technology Solutions. x = a / 10. the user has to enforce the compiler to convert one data type to another data type by using typecasting operator. b=4.0 will be stored in sum. float x. Example 3.5 * 3.0 */ Page 34 ©Copyright 2007.0.10 float (char or int) to to (int or char) float . a=14.Problem Solving and C Programming In explicit type conversion. General Form: (data type)variable/expression/value. c = a/b.8) as the integer 5. d = a % b. f. This method of typecasting is done by prefixing the variable name with the data type enclosed within parenthesis. Example 3. Widening: Converting the lower data type value to higher data type value. y = a / 10. /*f=2*/ /*c=3 */ /*d=2 */ /*x=1.11 int a. z. 5. d. Then.widening The following examples show different kinds of expressions: Example 3. y.4 (Mixed-mode expression)*/ /*y=1.9 float sum.5 * 3. instead of 5. The typecast (int) tells the C compiler to interpret the result of (1. The original value of the variable is not altered. /*-2 (Modulus operation retains the sign of the first operand)*/ f = a % -b. b.8). All Rights Reserved C3: Protected . because the variable sum is of type float. e = -a % -b.7. sum = (int) (1.narrowing . Another two terms associated with type casting are: Narrowing: Converting the higher data type value to lower data type value. e. c.

General form: char-variable = getchar(). processing. c = a && b 0 2 2 5 5 0 1 2 3 2 5 5 b 0 1 2 3 2 2 2 1 (Relational expression evaluated to true) 1 (Logical expression evaluated to true. One method is to assign values to variables through the assignment statements. c=0. punctuations. getch (). This single character includes alphabets. and tab. c = a>b. Unformatted Input statements Character Input There are several functions available to input a character from the console. a=b++ + c++.12 a int a=0. . Cognizant Technology Solutions.13 char ch. There are two types of Input and Output (I/O) statements: Unformatted I/O statements and Formatted I/O statements.character input from console & doesn’t echo the character. getchar () This function accepts a single character from the stream stdin (keyboard buffer). digits. Another method is to use input functions. a=++b + c++. return. which can get data from the keyboard (standard input-stdin).+ --c. and printing of data are the three essential functions of a computer program. a=b-. a=++b + ++c. Example 3. There are two methods of providing data to the program variables. ch = getchar().Problem Solving and C Programming Example 3. All Rights Reserved C3: Protected . b=0. Non zero value is true and Zero is false) c Input and Output Statements Reading. Page 35 ©Copyright 2007.

character input from console & echoes the character. gets(ch). String Input gets () . General Form: putchar(char variable). Blank space is also considered as a character. monitor. this function serves the purpose. All Rights Reserved C3: Protected . Cognizant Technology Solutions. General Form: gets(stringvariable).14 char ch[5]. To get a line of text. String Output puts() This function displays the string in the standard output. This function accepts a string terminated by a new line character. ch = getchar(). Page 36 ©Copyright 2007.15 char ch. Example 3. Unformatted Output statements Character Output putchar() This function displays a single character in the standard output (stdout).Problem Solving and C Programming getche(). /* string is represented as character array */ Example 3. putchar(ch).

f. list of variables). Page 37 ©Copyright 2007. x.] – string of specified characters %u – unsigned General Form: “%-+s0w. l. A character following this defines the format for a value. General Form: scanf (“format string”. All Rights Reserved C3: Protected . Cognizant Technology Solutions. %g – float %s – string %ld – long integer %o – octal %x – hexadecimal %hd – short integer %[. Format string specifies the field format in which the data is to be entered. o. g. e) Formatted Input Statement scanf() scanf () function is used to read formatted data items.. puts(ch). C has a special formatting character (%).pmc” Where: + s 0 w p m c left justify print with sign print space with no sign pad with leading zero field width precision conversion character ( h. Some of the format specifiers are given below: %c – character %d – integer %f. Example 3.Problem Solving and C Programming General Form: puts(str). gets(ch). Formatted I/O Statements Formatted input refers to an input data that has been arranged in a particular format. L) conversion character (d. %e. u.16 char ch[5].

/*delimiter between two input is = (10=20)*/ scanf (“%2d%5d”. All Rights Reserved C3: Protected . /* width & precision can be user defined*/ printf (“name = %10. ‘&’ need not be used. p. int=%3d. This function returns the number of characters printed. &b). list of variables). Example 3.*/ Page 38 ©Copyright 2007.18 printf (“char=%c. a= 12 & b=3456*/ scanf (“%d%d”.ch.4s”. str). Address operator (&) is used before the variables. &a.&b). General Form: sscanf (str. By default.&b).&a. To read a string using ‘%s’. This functions returns the number of inputs read successfully. /* column width 10. Cognizant Technology Solutions.*/ scanf (“%d=%d”. Stops when it encounters new line. Format string and variables are separated by comma. a=12345 & b=10*/ sscanf() sscanf() function to read values from a string. “format string”. Example 3. also known as control string contains field specifications. w.Problem Solving and C Programming List of variables specify the address of memory locations where the data is to be stored. printf (“sum = %*. i. /*accepts all inputs including space. floating point=%6. Delimiter can be user-defined. Format string. list of variables). x).*f”. the delimiter while reading the values is space. /*if the input is 12345 & 10. first 4 characters printed. a=12 & b=345 if the input is 12 & 3456. General Form: printf (“format string”. &ch.17 scanf (“%c %d %f”. /*if the input is 12345 & 10. &x). sum). &i. &a. Formatted Output Statement printf() printf () function is used to output the values. scanf (“%[^\n]s”.2f”. name). which directs the interpretation of input data.

total-marks Page 39 ©Copyright 2007.z). z = x++ .b=2. C program is a collection of functions. } Refer File Name: <sesh3_1.--y * b / a. float. the value get computed and prints on the screen Summary C is a structured programming language. char. C has a rich set of operators. C has Unformatted and Formatted Input / Output statements. General Form: sprintf (str. getchar(). “total” c. Test your Understanding 1. Emp_name b.c> to obtain soft copy of the program code How It Works: The program assigns the value and substitute in the expression. Which of the following are valid identifiers? a.h> main() { int z. double. Cognizant Technology Solutions. then based on the operator precedence. main d. printf("The Value of z : %d\n". All Rights Reserved C3: Protected .y=-10. list of variables). C supports four basic primitive data types: int. “format string”.Problem Solving and C Programming sprintf() sprintf() function is used to output values to a string. Try It Out Problem Statement: Write a program to find out value for an expression Code: #include <stdio.a=4.x=5.

4.0 . What is the output of the following code? int a . but getch() will not echo the character. What is ternary operator in C? 5. 6. y=7. 4 5 7. the scanf() statement contains the following control : “%d \n %d” Which of the following set of inputs will successfully read ? a. x= (int) y. Is the statement valid? 3. What is the difference between getche() and getch()? 6. Cognizant Technology Solutions. a. printf (“%d “.Problem Solving and C Programming 2. Answers: 1.5 4. s. valid 3.are not the valid characters to form an identifier) 2. getche() echoes the input character on screen. 4 5 b.5. 5. 7. s= (int) y + 3. a = (b = 2) + (c=3).5. s = 10. All are valid. All Rights Reserved C3: Protected . ?: is called ternary operator (conditional operator) used to carry out simple decision making. What will be the value of the variables x and s after the following piece of code is executed? float x.c ( “ “ . x = 7. If. b = printf (“welcome”).b). welcome7 Page 40 ©Copyright 2007. .

. All Rights Reserved C3: Protected . 1 a=8. Page 41 ©Copyright 2007.) is termed to be a simple statement (or expression statement). c=3. } x=a*b. Cognizant Technology Solutions. Statements in C Simple Statement (expression statement) An expression terminated by a semicolon (. In a sequence construct. } } { b=2. } { { a=1. y = x * b – k. It consists of one or more individual statements enclosed within the braces { }. the instructions are executed in the same order in which they appear in the program. c=a + b. selection. and iteration (looping).Problem Solving and C Programming Session 5: Selection and Control Structures Learning Objectives After completing this session. c=a+b. until some condition is satisfied. 2 { a=10. In an iterative structure. Example 5. Example 5. Null statement Compound Statements / Blocks Compound statements are used to group the statements into a single executable unit. you will be able to: Write a Simple Program Write program using Conditional statements Write program using Looping and Iteration Basic Programming Constructs The basic programming constructs are sequence. In a selection structure. b=10. the control flow can be altered by evaluating conditions. a group of instructions is executed repeatedly.

and one or more simple expression statements. The if statement has three basic forms: Simple if-else Nested if if-else if ladder Simple “if-else” General Form: if (expression) { statements1. and/or logical operators. The following are the selection constructs available in C: “ if ” statement Conditional / Ternary operator statement (? :) “switch” statement ‘if’ Statement The if statement. Cognizant Technology Solutions. The tests and subsequent decisions are made by evaluating a given expression as either True (non zero) or False (zero). } ] statements3. Depending on the result of the expression the statements are executed. Programs may require certain logical tests to be carried out at some particular points. All Rights Reserved C3: Protected . and/or relational expression. Selection Statements Selection statements are used to alter the normal sequential flow of control. If the expression is evaluated to true (nonzero). [ ] is used to represent the optional usage of ‘else’ block. is executed in a sequential manner. } [ else { statements2. Expression can be arithmetic. which consists of declaration statements. If the expression is evaluated to false (zero). It provides the ability to decide the order of execution. the statements1 are executed and the control is transferred to the statements (statements3) next to the if construct is executed. allows us to establish decision-making in the programs. the Page 42 ©Copyright 2007. input-output statements.Problem Solving and C Programming Sequence A program.<Delete the arrow brackets while entering actual names and text. An expression involves arithmetic. relational. Insert more subheadings where required by copying one already done. logical.

a).c). if (expression) statements-2. Page 43 ©Copyright 2007.4 Program to find the maximum of 3 numbers. else max = a. true or false is known. Example 5. if (expression) statements-1. if (a>b) if (a>c) printf(“largest = %d”. Short-circuit Evaluation Whenever the expression with the operators && and || are evaluated. the evaluation of expr2 will not occur [ 1 OR anything is 1] Nested ‘if’ Statement Body of an ‘if’ statement contains another ‘if’ statement.max).Problem Solving and C Programming statements1 will be skipped and the else part statements (statements2) are executed. Cognizant Technology Solutions. If the else part is not specified. the statements (statements3) next to the if construct is executed. } else { statements2. else printf (“largest = %d”. if (a<b) max = b. For example: expr1 && expr2 If the value of expr1 is zero. the evaluation of expr2 will not occur [ 0 AND anything is 0] expr1 || expr2 If expr1 has non-zero value. the evaluation process stops as soon as the outcome. General Form: if (expression) { statements1. printf(“ max = %d” .3: Program to find maximum of two numbers. All Rights Reserved C3: Protected . } Example 5.

5 if (mark >= 75) printf(“Honours\n”). else printf (“largest = %d”. else if(expression) statements3. else if (mark >=60) printf(“First Class\n”). Conditional / Ternary / ?: Operator This operator takes 3 expressions / operands. else printf(“Fail\n”). The final ‘else’ statement is executed only if none of the previous conditions are satisfied. Final ‘else’ serves as a default case and is useful in detecting an impossible or error condition.c). else if (expression) statements2.Problem Solving and C Programming else if (c>b) printf (“largest = %d”. else if (mark >=50) printf(“Second Class\n”). else statements4. Cognizant Technology Solutions. Example 5. . else if (mark >=45) printf(“Third Class\n”). General form: [variable = ]expr1? expr2: This simply states: Page 44 ©Copyright 2007. All Rights Reserved C3: Protected expr3. ‘if… else if’ Ladder Statement General Form: if (expression) statements1. It is a more efficient form for expressing simple if statements.b). Each condition is evaluated in order and if any condition is true the corresponding statement is executed and the remainder of the chain is skipped.

break.6 max = (a>b) ? a : b. All Rights Reserved C3: Protected . Items which represent the case labels must be an integer constant or character constant. which are represented by constant values. Cognizant Technology Solutions. break. variable. and/or arithmetic expression. logical expression. else max = b. expr3 is evaluated. A switch statement allows a single variable to be compared with several possible case labels. array variable. case item2: statement 2.Problem Solving and C Programming if (expr1 is true) then expr2 else expr3 Where: o o expr2 is evaluated. Expression may be a constant value. case itemn: statement n. default : statement. must be an integer valued expression. The break is needed to terminate the switch after the execution of particular choice. } Expression in the switch statement. relational expression. default statements will be executed. It is a multi-way conditional statement generalizing the ‘ifelse’ statement. if the value of expr1 is non-zero (true part). A case label can not appear more than once and there can only be one default expression. General Form: switch (expression) { case item1: statement 1. then an execution jump is made to that point. If the variable matches with one of the constants. Otherwise the next cases get evaluated. break. Page 45 ©Copyright 2007. which is similar to the following if-else statement. Switch Statement This is a conditional control statement that allows some particular group of statements to be chosen from several available groups. if (a>b) max = a. Default case is optional and if specified. pointer variable. if there is no match for the case labels. Example 5. if the value of expr1 is zero (false part).

General Form: for (expression1. ‘do. the control is transferred to the statement. There are several ways to execute loops in C. Page 46 ©Copyright 2007. case ‘/’: c=a/b. case ‘*’: c=a*b.while’. case ‘-’: c=a-b. break. If the test condition is False. the statements inside the loop are executed. } Where: expression1 initializes the counter/index variable. ‘while’. expression3) { statement / block of statements. All Rights Reserved C3: Protected . The statements used for looping are: ‘for’. } Iteration Statements Most of the real world applications require some set of instructions to perform repetitive actions on a stream of data. break. The initialization is usually an assignment statement that is used to set the index variable or loop control variable. It is evaluated at the beginning of every iteration. ‘for’ statements This statement is used to repeat a statement or a set of statements for a specified number of times or until a condition satisfied. default: printf (“Invalid operator”). expression2. Cognizant Technology Solutions.7 switch (op) { case ‘+’: c=a+b. expression2 is to set a terminating condition. break. break. If the test condition is True.Problem Solving and C Programming Example 5. which follows the loop.

y=4.) { c+=1. c++.i). for(..i++) { printf(“\n i = %d”. The second loop.) { printf (“%d”. z=4000. Such loops are called nested loops. Example 5. (3) for (x=0. For each & every iteration through the outer loop. c). infinite loop infinite loop ((x>3) && (y<9)).j<=3.. } (7) int c=0. ((x>3) && (x<9)). controlled by the value of ‘j’. Cognizant Technology Solutions. the loop controlled by the value of ‘i’ is called the outer loop. is called inner loop. c).c<=20. y=4.c=c+2) (5) for (c=2. All statements in the inner loop are within the boundaries of the outer loop. the inner loop runs completely. printf (“c=%d”. Page 47 ©Copyright 2007.i<=3.8 (1) for (x=0.c<=20. All Rights Reserved C3: Protected .++c) (6) c=2. (4) c=2. Example 5. Different variables must be used to control each loop. for (j=1. z . These three expressions are separated by semicolons. } Nested ‘for’ statement There are many situations in which a loop statement contains another loop statement. } In the above example. y+=2) z/=10) (2) for (x=0. which is evaluated at the end of every iteration.9 for (i=1.Problem Solving and C Programming expression3 is the loop variant/modifier (increment / decrement). for (.j). j++) printf (“\n j = %d”. for (. x++) x++.

Example 5. otherwise statements after the while block is executed. (4) while(1). (2) while(x = x+1){ }. If the expression is evaluated Page 48 ©Copyright 2007. } Expression can be a constant value. The body of the loop may have one or more statements. The braces are needed only if the body contains two or more statements. the program proceeds to evaluate the body of the loop first. the body of the loop is executed. All Rights Reserved C3: Protected . If the expression evaluates to True. Cognizant Technology Solutions. (5) while ( (ch = getche ( )) != ‘q’) putchar(ch). If the result is True. the expression in the while statement is evaluated.. (6) c=1. } ‘do .Problem Solving and C Programming ‘while’ statement The while is an entry controlled loop statement. General Form: while (expression) { Statements. General Form: do statement (s). At the end of the loop. ++c. the expression is checked again.. the body of the loop is executed. The body of the loop is executed repeatedly until the expression is False. The conditional expression is evaluated at the beginning and the result of the expression decides on the execution of the body of loop.10 Different ways to use while loops (1) while(x--){ }. while (c<=10) { printf (“%d”.c).while’ statement The do. After executing the body of the loop. variable or any expression. If the expression is initially False. On reaching the do statement. (3) while(x) { }. while is an exit controlled loop statement. while (expression). the body of loop is not executed at all.

loop++) { If (loop==10) break. Continue Statements Break Statement The break statement can appear in the switch statement and the loop statements.loop<50. It is used to terminate the current iteration. the loop will be terminated and control is transferred to the next statement following the do. Example 5.. General Form: break. General Form: continue.12 for(loop=0.d). Since the expression is tested at the end of the loop. } while (d<=10). Cognizant Technology Solutions.loop++) { if (loop==50) /* control will come out of the loop.11 int d=1. ++d. It causes the execution of the current enclosing switch case or the loop to terminate. When the condition becomes False. } Only numbers 0 through 9 are printed. Example 5.loop<100.while.Problem Solving and C Programming to True. This process continues as long as the expression evaluates to True. Page 49 ©Copyright 2007. Continue Statement The continue statement can only appear in the loop statements. Break. do { printf (“%d\n”. the body of the loop is executed at least once.13 for(loop=0. */ printf("%d\n". the program continues to evaluate the body of the loop once again. It skips rest of the statements in the body of the loop and begins the next iteration. Example 5.loop). All Rights Reserved C3: Protected .

printf("%d\n".h> #define KILOS_PER_POUND . } getchar(). uklbs. kilos). lbs INT Kg\n"). Try It Out Problem Statement: Write a program to convert pounds in to equivalent international units starting from 10 pounds to 250 pounds incremental of 10 pounds Code: #include <stdio.e. Continue this till the termination condition is met i. printf(" %d %d %d %f\n". uklbs and kilos.uklbs and kilos and print on the screen. for(pounds=10. } The numbers 0 through 99 are printed except 50. pounds.Problem Solving and C Programming continue. till the pound becomes greater than or equal to 250 pounds Page 50 ©Copyright 2007. float kilos = pounds * KILOS_PER_POUND. int uklbs = pounds % 14. Cognizant Technology Solutions. We know the starting point. For each pounds. stones. The conversion has to be done starting from 10 pounds till 250 pounds in the incremental of 10 pounds. printf(" US lbs UK st.loop). termination condition and the increment.c> to obtain soft copy of the program code How It Works: This program converts pounds in to stones . } Refer File Name: <sesh5_1. pounds < 250. so we have used the for loop.45359 main() { int pounds. pounds+=10) { int stones = pounds / 14. apply formula to get the stones. All Rights Reserved C3: Protected .

} } Page 51 ©Copyright 2007. Test your Understanding 1. and do-while statements are repetitive control structures available in C . for. Cognizant Technology Solutions. An if statement may include only simple statements. case 3 : printf(“3”). switch(i) { default : printf(“0”). case 2 : printf(“2”). break. that are used to carry out conditional looping. if clause can contain another if statement. An if statement must always include an else clause. b. break statement is used to terminate the loop but continue statement skips the current iteration and continues the loop with the next iteration. case 1 : printf(“1”). 2. All Rights Reserved C3: Protected . Looping allows a program to repeat a section of code any number of times or until some condition occurs.Problem Solving and C Programming Summary if statement is a condition based decision making statement. What is the output of the following piece of code? main( ) { int i=3. When will the default case in switch statement be executed? 3. break. while. Ternary operator is more efficient form for expressing simple if statements. Which of the following statements are true? a. Switch statement is a conditional control statement that allows some particular group of statements to be chosen from several available groups. c. break.

while statements?What is the output of the following code? while(1) { if (printf (“%d”. Cognizant Technology Solutions.while is exit controlled loop (condition is checked at the end). 3 4.Problem Solving and C Programming 4.. All Rights Reserved C3: Protected . The loop statements of do. 5. Default case is executed. } Answers: 1. c 2.. 01 Page 52 ©Copyright 2007. What is the difference between a while and do. else continue. printf (“%d”))) break. 3..while will get executed at least once. While is an entry controlled loop (condition is checked in the beginning) and do. whenever evaluated expression does not matches with any of the case labels.

the name of the array refers to the base address of the array. The individual elements are accessed by specifying the subscript. Array is a derived data type which is used to store similar data items in contiguous memory locations under a single name. of the same data type. totally 10 contiguous bytes will be allocated in memory. index 1 refers second location. [index 0 refers first location . All Rights Reserved C3: Protected . Memory Organization of an Array The elements in an array are always stored in consecutive memory locations. Address of an array element is calculated as below: Address of ith location = base address + (size of the individual data element * index i ) Address of 0th element = 1000 + (2 * 0) = 1000 Address of 1st element = 1000 + (2 * 1) = 1002 … In C. set of names). etc.]. Page 53 ©Copyright 2007.. Cognizant Technology Solutions. 1000 1002 1004 1006 1008 Individual memory location is referred by index.g. Note: size of an integer is assumed to be 2 bytes Starting address is assumed as 1000 and totally 10 bytes are created.Problem Solving and C Programming Session 7: Arrays and Strings Learning Objectives After completing this session. If an array of 5 integers elements is created. set of numbers. you will be able to: Explain the concept of Array and memory organization Write program using Single-dimensional arrays Write program using Multi-dimensional arrays Understand Strings Understand String and Character functions Need for an Array Many applications require the processing of multiple data items that have common characteristics (e. It holds a fixed number of equally sized data elements.

Defines a floating point array sales_amt of 10 floating point numbers. indexing begins at 0 and ends at 1 less than the defined size of an array. General Form: arrayname[index or subscript] Example 7. Defines a character array. Arrays are defined by appending an integer encapsulated in square brackets at the end of a variable name. Array declaration reserves space in memory. All Rights Reserved C3: Protected . When addressing an element in an array. Accessing Array Elements The array elements are accessed by specifying the subscript / index.1 int x[5]. General Form: datatype arrayname[size] . char str[16]="qwerty".Problem Solving and C Programming Declaration and Initialization Array Declaration Arrays are declared with appropriate data type and size. starting at x[0]. Defines an integer array x of at x[4]. starting at sales_amt[0] and ending at sales_amt[9].2 x[0] x[4] str[2] sales_amt [8] to access the 1st element in array to access the 5th element in array to access the 3rd character in the string (character array) to access the 9th sales amount in the array 5 integers. Example 7. and ending Page 54 ©Copyright 2007. Each additional set of brackets defines an additional dimension to the array (multi dimensional arrays). int matrix[2][2]. Defines a 2*2 matrix (totally 4 elements) of integers. which is represents a string of maximum of 16 characters. Cognizant Technology Solutions. Arrays can be of single dimension or of multi dimensions. float sales_amt[10].

34}. the uninitialized array elements are initialized to Zero or Null depending on the data type of the array. Zero is initialized for numeric array and Null for character array.2. the base address can not be changed. a[1] = 2 . /*all the array elements are initialized to zero*/ int a[5]={1.45. (ex.34 */ Basic Operation on Arrays Basic operations allowed on arrays are storing.3. /*a[0]=1.4.3. OR datatype arrayname[ ] = {value(s)}.4}. size of the array equals the number of elements initialized. When arrays are initialized during declaration.2.2.3 int a[5]={1. a[1]=2.4}. /* b[0] = 10. ) */ float b[2]={10.Problem Solving and C Programming Array Initialization Array elements can be initialized during declaration or can be initialized in the program. 3rd element can be deleted by moving 4th element to 3rd location. a[2] = 3 . /*a[4] = 0*/ int a[ ] = {1. retrieving. The following expressions are illegal: a++ (base address of array ‘a’ is modified by adding one) a+=2 (base address of array ‘a’ is modified by adding two) Page 55 ©Copyright 2007. General Form: datatype arrayname[size] = {value(s)}. Thus. size depends upon the number of values initialized.2. b[1] = 45. In partial initialization.3. In such cases.20 . /*a[0] = 1. and processing of array elements. array can be declared without specifying the exact size. Example 7. Cognizant Technology Solutions. 5th element to 4th location and so on) Array name is a constant pointer (pointer is a variable which holds address of another variable) to the base address of the array.5}. partial initialization is allowed. a[2]=3. All Rights Reserved C3: Protected . a[3]=4 (if size not specified. If initialized. a[3] = 4 and a[4] = 5*/ int a[5]={0}. Insertion and deletion can be done by moving the array elements to the appropriate places.

i<3. /*prints value of 3rd printf(“%d%d%d”.a[i]). (2) /*gets value for 1st location*/ gets value for 2nd location*/ gets value for 3rd location*/ scanf(“%d%d%d”. a[0]). a[2]). (1) printf(“%d”. /* gets value for first 3 locations (array name has the base address . &a[0]).6 int a[3]. a+1. except that a separate pair of square brackets is required for second dimension. /*loop statement is used to print the array elements */ Multi-dimensional Array The elements of an array can themselves be arrays.i<3. &a[1]). printf(“%d”. /* usually loop statement is used to get the array elements*/ Printing out the array elements Example 7.a[0].pointer)*/ (3) for(i=0. Example 7. scanf(“%d”. All Rights Reserved C3: Protected .a[1].i++) scanf(“%d”. Two-dimensional array – Declaration Two-dimensional arrays are defined in the same way as one dimensional array. Cognizant Technology Solutions. Multidimensional arrays will also occupy the contiguous memory locations.&a[i]). General Form: datatype arrayname [row ][column] Page 56 ©Copyright 2007.Problem Solving and C Programming Getting the value for Arrays Input statement is used to get the values for an array. Two dimensional arrays can be viewed as set of one dimensional array (rows & columns) and 3 dimensional arrays can be viewed as set of two dimensional arrays. (1) scanf(“%d”.5 int a[3].a[2]). /* prints value of first 3 locations*/ for(i=0.i++) printf(“%d”. a. scanf(“%d”. (2) (3) /*prints value of 1st location*/ /*prints value of 2nd location*/ location*/ printf(“%d”.a[1]). &a[2]). a+2).

9: 4-dimensional array sales [year ] [month ] [area ] [salesperson] Advantages Simple and easy to use Stored in Contiguous locations Fast retrieval because of its indexed nature No need to worry about the allocation and de-allocation of arrays Limitations Conventional arrays are static in nature.row 0 & column 1 . the uninitialized array elements are initialized to Zero.6}.2. out of n locations defined.5}. = 4 elements). /*row elements are initialized separately*/ int num[2][3] = {{1. It is necessary to specify the size of the column in declaration.{1. a[0][0] will be in location 1000 . If m elements are needed. All Rights Reserved C3: Protected .2. Example 7. n-m locations are unnecessarily wasted No automatic array bounds checking during compilation Page 57 ©Copyright 2007.4.2.2.3}}.5.row 0 & column 0 .{4}}.8 int num[2][3] = {1. creates 8 bytes of contiguous memory locations. int num[2][3] = {1. In partial initialization.row 1 & column 0 .Problem Solving and C Programming Example 7. Elements of 1st row are stored first and then the elements of next row.3.2}. /*num[0][2] = 0 num[1][1]=num[1][2]=0*/ Example 7.4.3. 7 int a[2][2]. Memory is allocated in the beginning of the execution.row 1 & column 1 a[0][1] a[1][0] a[1][1] will be in location 1002 will be in location 1004 will be in location 1006 Two-dimensional array Initialization Two-dimensional arrays can also be initialized in the declaration statement. /*num[1][2] = 0*/ int num[2][3] = {{1. Assume that array starts at location 1000. Cognizant Technology Solutions. (2*2 Elements are stored in row major order.3}.

/* 50 student names each with 15 characters at the maximum */ Page 58 ©Copyright 2007. All Rights Reserved C3: Protected .*/ (3) char name[5]. The value at str[5] is the character ‘y’. one ASCII character per location.’\0’). name[1] = ‘O’. Declaration General Form: char arrayname [no. String should always have a NULL character (‘\0’) at the end.11 char studname[50][15]. to represent the end of string. of strings] [max no. (2) char str[16]="qwerty". it is preferred to allocate one extra space to store null terminator */ Array of Strings Two dimensional character arrays are used to represent array of strings. String can be represented as a one-dimensional array of characters. int main( ) { name[0] = ‘G’. The values from str[7] to str[15] are undefined. } (4) char name[5] = “INDIA” /* Strings are terminated by the null character. A character string is stored in an array of character type.10 (1) char c[4]={‘s’. In C. return 0. Example 7. there is no built-in data type for strings. name[3] = ‘D’.’m’. name[2] = ‘O’. /*Creates a string. Cognizant Technology Solutions. The value at str[6] is the null character. String constants can be assigned to character array variables. Example 7. of chars in strings]. String constants are always enclosed within double quotes and character constants are enclosed within single quotes.Problem Solving and C Programming Strings Strings are sequence of characters. name[4] = ‘\0’.’u’.

’t’. {‘c’.’t’. Strings are manipulated either via pointers or via special routines available from the standard string library string.13 (1) char name[20].’\0’}.12 char name[3][5] = {“bata” . if (name1 == name) Or name1 = name. All Rights Reserved C3: Protected . which manipulates the entire string at once.”at”} char name[3][5] {‘a’.’\0’}} = {{‘b’. Illegal operations on Strings C does not allow one array to be assigned to another. assignment not allowed name1 = name + “to c “ concatenation is not allowed two strings cannot be compared with the ‘equal to’ operator String Functions C does not provide any operator. printf(“%s” . Example 7. (2) (3) scanf( “%s“ . while((name[i] = getchar ()) != ‘\n’ ) i++.’t’. int i=0.h.’a’. name). Page 59 ©Copyright 2007. name).Problem Solving and C Programming Initialization General Form: char arrayname [ r ] [ c ]={“values”}. Cognizant Technology Solutions.’\0’}. Array name itself specifies the base address and %s is a format specifier which will read a string until a white space character is encountered. [Note: no need to use & operator while reading string using %s] Example 7. thus statements of the following form are illegal” name = “GOOD”. String can be read either character-by-character or as an entire string (using %s format specifier).’a’.’a’.”cat” .

c) strstr(s1.s2) strpbrk(s1. Returns a pointer to the first occurrence in s1 of any character from s2 Returns the number of characters at the beginning of s1 that match s2. All Rights Reserved C3: Protected . n) strupr (string) strlwr (string) atoi (string) atof (string) atol (string) strchr (string.string2. string2) strcmp(string1. Find last occurrence of character c in string.string2) Copy string2 into string1 Concatenate string2 onto the end of string1 Lexically compares the two input strings (ASCII comparison) returns 0 if string1 is equal to string2 < 0 if string1 is less than string2 > 0 if string1 is greater than string2 Gives the length of a string Reverse the string and result is stored in same string. Returns the number of characters at the beginning of s1 that do not match s2. c) strrchr (string. string2) strcat(string1. Functionality strlen (string) strrev (string) strncat(string1. string2.Problem Solving and C Programming The following is the list of string functions available in string. s2) Page 60 ©Copyright 2007. Copy first n characters of string2 to string1 Converts string to uppercase Converts a string to lowercase Converts the string to integer number Converts the string to floating point number Converts the string to long integer number Find first occurrence of character c in string. Locates the first occurrence of s2 in s1. Cognizant Technology Solutions. n) strncmp(string1. s2) strcspn(s1. s2) strspn(s1.h: String Functions strcpy(string1. Append n characters from string2 to string1 Compare first n characters of two strings. string2. n) strncpy(string1.

\a) True if c is a decimal digit True if c is a graphical character (all characters. Functions int isalnum (c) int isalpha (c) int isascii( c) int iscntrl (c) int isdigit (c) int isgraph (c) int islower (c) int isprint (c) int ispunct (c) int isspace( c) int isupper (c) int isxdigit (c) toupper (x) tolower (x) toascii (x) True if c is alphanumeric.Problem Solving and C Programming Character Functions C provides the following collection of character functions.h. for (i = 0. . All Rights Reserved C3: Protected . which can manipulate a single character. i++) Page 61 ©Copyright 2007. for(i = 2. i < 24. int i. ‘.’ ‘) True if c is an uppercase letter True if c is a hexadecimal digit Converts lowercase letter to uppercase Converts uppercase to lowercase Converts the char to ASCII value Functionality Try It Out 1.\v. Cognizant Technology Solutions.\t. The header file. . True if c is ASCII .‘. “. Problem Statement: Write a program to develop Fibonacci series using arrays Code: #include <stdio. except space) True if c is a lowercase letter True if c is a printable character (all characters including white space) True if c is a punctuation character (. True if c is a letter. fib[0] = 0. True if c is a control character (\n.:.\f.h> main() { int fib[24]. fib[1] = 1.\r. i < 24. ctype.) True if c is a space character (\n. is used for the character functions. i++) fib[i] = fib[i-1] + fib[i-2].\r.\f.

Problem Statement: Write a program to demonstrate two dimensional arrays Code: #include <stdio.2. } Refer File Name: <sesh7_1. j<5. j++) printf("%d ". i<4. fib[i]). Initially array of size 24 is declared. getchar(). i.5.The program computes the series up to 24 numbers. as we know the first two numbers initialize the first two elements in the array.Problem Solving and C Programming printf("%3d %6d\n". i++) { for (j=0. Page 62 ©Copyright 2007. } getchar(). for (i=0..13…. j++) twod[i][j] = i*j.j.c> to obtain soft copy of the program code How It Works: The Fibonacci series is 1. j<5. All Rights Reserved C3: Protected . Cognizant Technology Solutions. printf("\n").h> main() { int twod[4][5]. Again use the for loop to print the series one by one from the array.c> to obtain soft copy of the program code How It Works: This program explains the how to use the two dimensional array. int i. twod[i][j]).8. i<4. for(i=0. In the for loop start adding the values in the previous two indices of array and store it in the third element Then increment the indices and keep continuing the same process until 24 numbers are added.3. } Refer File Name: <sesh7_2. 2. This program implemented fibonacci series by using for loop and array. i++) for(j=0.

Problem Solving and C Programming

In two dimensional array, two indices will be used, one represent the row and the other one column. Here “i” represents row and the “j’ represents the column Two for loops are used. The outer loop decides the row and the inner loop represents the column Initialise both i and j to 0. For each value of i, find out all the values of column by multiplying the i with j with incremental of j. Store the values in the array Use another for loop to print the values in the two dimensional array in the form of matrix. The program output looks like this: o 00000 o 01234 o 02468 o 036912

Summary
An array can be defined as a collection of homogenous elements stored in consecutive memory locations. Array name is a constant pointer to the base address of the array. Conventional array always has a predefined size and the elements of an array are referenced by means of an index / subscript. An array can be of more than one dimension. There is no restriction on the number of dimensions. String is represented as an array of characters. C supports a number of in-built string functions to manipulate strings.

Test your Understanding
1. Is it possible to declare an array x containing 50 integer elements followed immediately by 50 floating point numbers? 2. Why array index should always start with 0? 3. How entire array, x[100] with value 0, is initialized in declaration statement? 4. When a one dimensional array is being declared, under what condition may the size be omitted, with array name followed by an empty pair of square brackets?

Page 63 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

5. What is the output of the following code? main() { int a[5]={2,3}; printf(""\n %d %d %d"",a[2],a[3],a[4]); }

6. List few library functions for string operations. Answers: 1. No, array can contain only similar data items. 2. Array elements are accessed by relative addressing method (base address + index), in order to access the first element, which is in base address, index must be 0. 3. int x[100] = {0} ( partial initialization) 4. If an entire array is being initialized within the declaration. 5. 0 0 0 6. strlen(), strcmp(), strcat(), strrev(), strcpy()

Page 64 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Session 9: Functions
Learning Objectives
After completing this session, you will be able to: Define functions Understand how to pass arguments to function Understand and Implement Recursive functions Understand how to pass arrays in a function

Need for Functions
Functions are smaller self-contained components which carry out some specific, well defined task. As real world applications become more complex and large, several problems arise. Most common are: Algorithms for solving more complex problems become more difficult and hence difficult to design. Even after designing an algorithm, its implementation becomes more difficult because of the size of the program. As programs become larger, testing, debugging, and maintenance will be a difficult task. Thus, complex problems can be solved by breaking them into a set of sub-problems, called Modules. Each module can be implemented independently and later can be combined into a single unit. C supports modularity by means of functions. C functions are classified into two categories. User defined functions Library functions C function offers the following advantages. It facilitates top-down modular programming. Modularity brings logical clarity to the programs It avoids the need for redundant code. The repeated instructions can be written as a function, which can then be called whenever it is needed It facilitates reusability – functions created in one program can be accessed in other programs. C programmer can build on what others have already done, instead of starting from scratch C functions can be used to build a customized library of frequently used routines

Page 65 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Function Prototype
Like variables, functions are declared and declaration of a function is called Function Prototype. Prototype specifies the signature (name) of the function, the return type, and number and data types of the arguments. It helps the compiler to know about the function. Functions must be declared before it is called. Function prototyping is not mandatory in C. It is mandatory when the function is called prior to its definition. They are desirable, however, because they further facilitate error checking between function calls and the corresponding function definition. Example 9.1 int find_big (int, int); arguments */ void swap (int *, int *); variables. */ float add(float, int); /* function ‘add’ returns float value, takes 1 float variable and 1 integer variable */ /* function ‘swap’ does not return any value, takes 2 pointer /* function find_big returns integer value, takes 2 integer

Example 9.2 (1) main() { int a,b; int sum(int, int) ; scanf("%d%d” , &a, &b); printf(“ %d “ , } int sum(int a , int b) { return a+b; } sum(a, b); /* function prototyping. */

Page 66 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

when the program gets executed and deallocated only at the end of program execution.arg2 … return-type specifies the name of the function and it must be a valid identifier specifies formal arguments (formal parameters) represents the data type of the data item returned by the function Function Body Function can have declaration statements and any number of valid executable statements. there is no need for the function prototype. } Function is defined prior to its reference. Functions can be defined at any location in the program. : return expression. Function Definition Function definition is used to define the function with appropriate name. All Rights Reserved C3: Protected . If it is declared in the Global declaration section. Memory for the global variables is allocated. A function definition has two principle components: Function header (first line). If the function is defined before the ‘main’ program. } main() { fun(). Local Variables . Cognizant Technology Solutions. type arg2. It can be accessed only within that function. executable statement 2. } Function Header function-name arg1. Memory for the local variables is allocated only when the function is invoked and de-allocated when the control moves out of the function. Function body. and the operations to be carried out by the function.. parameters. …. Page 67 ©Copyright 2007.The variables declared inside any function are local to that function.Problem Solving and C Programming (2) void fun() { printf(“"prototype not needed “). So compiler will identify the function name. it is used by all the functions in the program.The variables that are common to all the functions are declared outside the functions. Global Variables .) { local variables Declaration. executable statement 1. General form: return-type function-name(type arg1.

} Function Name Return Type – find_big – integer Formal arguments – 2 (a. int b) { if ( a > b) return a. (control is transferred returns zero returns the product of a & b returns True (1) or False (0) Example 9. it is achieved by the return statement. constant value or any single valued expression.4 Function for finding the biggest of two integers int find_big(int a. each containing different expression. A function may or may not return a value to the calling function. does not return any value. General Form: return. All Rights Reserved C3: Protected . return(a*b). the closing braces (}) in the function body acts as a return statement. A function may receive any number of values from the called function.5 (1) void display(void) { printf(“this is a function”). return(a<b). to calling program) (2) (3) (4) return 0. Example 9. If it returns a value. } If the function doesn’t receive any arguments and doesn’t return any data.Problem Solving and C Programming return statement is used to transfer the control back to the calling program.3 (1) return. expression can be a variable name. Cognizant Technology Solutions. There can be multiple return statements. If there is no return statement. OR return(expression). then void keyword is used to represent that. Example 9. else return b. b) Page 68 ©Copyright 2007. Default return type is ‘int’. } (2) main() { return 0.

} Note: Function can also be called using printf (“The biggest is: %d”. } int find_big(int a. /* function call statement. and the order of the actual arguments and formal arguments should match. big=find_big(num1. Example 9. num1 & num2 are actual arguments */ printf(“ The biggest is : %d “. When the function call is encountered. the control is transferred to the called function and the statements in the function are executed. global declaration */ main( ) { int num1. num2. The LHS variable name in the function call is optional. it is called Recursion. the control is transferred back to the place of function call in the calling function. All Rights Reserved C3: Protected . big). When the return statement is executed or last statement is execution. data type.num2)) statement. else return b. big. General form: [variable name =] function name(actual arguments). int). A recursive function must have the following properties: The problem must be written in a recursive form /* a & b are formal arguments */ Page 69 ©Copyright 2007. If a function is returning a value.6 Program for finding biggest of two integers using the function find_big int find_big(int. /* function prototype. find_big(num1. followed by a list of parameters enclosed within parentheses. &num1. Recursion If a function is having a self-reference. Variable names of the actual arguments and the formal arguments need not be same. int b) { if ( a > b) return a. It is a process by which a function calls itself. scanf(“%d%d”. The number.Problem Solving and C Programming Function Call Functions are invoked by specifying its name. the value returned is stored in the LHS variable name. &num2).num2). If the function returns value. Actual arguments are the parameters passed to the called function. that value is substituted in place of a function call in the calling function. Cognizant Technology Solutions.

functions may be classified as: Functions with no arguments & no return value Functions with no arguments but return value Functions with arguments but no return value Functions with arguments and return value Page 70 ©Copyright 2007. else return(k*fact(k-1). Cognizant Technology Solutions. Function will be evaluated in Last In First Out manner (Stack) Nesting of Functions Functions may be nested. In fourth call. which may call function3.fact(n)). control is transferred back to the called function. printf(“Factorial = %d“. } If n = 4. the condition evaluates to 1 and returns 1 to the calling part (call 3). along with the value returned.7 main() { int n. { if (k<=1) return 1. All Rights Reserved C3: Protected . } fact(int k).Problem Solving and C Programming There must be a base criteria (terminating condition) for which the function doesn’t call itself Example 9. Depending on its definition. The parameter values are substituted and the function is executed. Passing Arguments A function is referenced by its name and providing appropriate values for the arguments. When the return statement is encountered. fact(int). call 3 = 2 * fact(1) call 2 = 3 * fact(2) . printf(“Enter an integer\n”).&n). which in turn return the value to its calling function. The main function may call function1. which in turn call function2. scanf(“%d“. then call 1 = 4 * fact(3). On seeing the name of the function in calling statement. the control is immediately transferred to the function.

c). &n. char c. scanf(“%d%c”. printf(“\t\t Hello World\n””) border(n.&b).Problem Solving and C Programming Example 9.int y) { return a+b . All Rights Reserved C3: Protected . sum=add(). printf(“Enter2 With main() arguments and printf(“Enter the size of border & style\n”).a.&c). integers\n”).&b).c).9 With arguments and no return value return value main() { int n.s). printf(“\nSum = %d”. } border() { int i. Page 71 ©Copyright 2007. } No arguments but return value main() Example 9.b. border(n.i<=m. for(i=1.i<=80.i++) printf(“-“). for(i=1. } { int sum.b). add(int x. printf(“\nSum = %d”. printf(“\n”). return(a+b). scanf(“%d%d”. &a. char s) { int i.i++) printf(“%c“. return.sum). printf(“\t\t Hello World\n””) border(). } } } scanf(“%d%d”. Cognizant Technology Solutions. } border(int m. printf(“\n”).b.sum).8 No Arguments and no return value main() { border(). { int sum. } add() { int a. return.&a. sum=add(a.

b=20. /* prints 10 20 */ Page 72 ©Copyright 2007. a=10. Note: Actual arguments are address of the ordinary variable. changes in the formal arguments are reflected in actual arguments. b. The value of the actual argument will remain same. swap(a. Actual and formal arguments refer to the different memory locations and the value of actual argument is copied into the formal argument. } void swap(int c. b). b). This approach is of practical importance while passing arrays to functions and returning back more than one value to the calling function. } Call by Reference In this approach. c = d. d = temp. Cognizant Technology Solutions. Example 9. a. So. They are: Call by Value Call by Reference Call by Value Arguments are usually passed by value in C function calls. The values of the actual arguments are copied in to the respective formal arguments. temp = c. /* passing the values of a and b to c and d of swap function */ printf(“%d %d”. The actual and formal arguments refer to the same memory location. Formal arguments should be a pointer variable or array. So.10: Program that illustrates call by value mechanism main() { int a. pointer variable or array name. Passing arrays to functions is call by reference by default. All Rights Reserved C3: Protected .Problem Solving and C Programming Passing arguments to a Function: There are two approaches to pass the information to a function via arguments. any changes made to the formal argument are not reflected in their corresponding actual arguments. a x a is actual argument and x is formal argument. the addresses of actual arguments are passed to the function call and the formal arguments will receive the address. int d) /*Function used to swap the values of variables c and d*/ { int temp.

int *d) { int temp. } main() { int values[5]. i < 5. a. i. All Rights Reserved C3: Protected . } void swap(int *c. a=10. Example 9. &b). for( i = 0. i. b. maximum( int val[] ) /*size of the array need not be mentioned */ Page 73 ©Copyright 2007. it is enough to give the name of the array as argument. swap(&a. which points to an array. b=20. ++i ) if ( val[i] > max_value ) max_value = val[i]. } /* reference is made */ /* prints 20 10 */ Functions and Arrays It is possible to pass an entire array to a function. temp = *c. *c = *d. max_value = val[0]. Array name is interpreted as base address of the array and the address is given to the formal argument. *d = temp. max. return max_value. Example 9. Formal argument can be an array or pointer variable.12 int { int max_value. Cognizant Technology Solutions. printf("Enter 5 numbers\n"). b).11: Program that illustrates call by reference mechanism main() { int a.Problem Solving and C Programming a x a is actual argument and x is formal argument. To pass an array to a function. /* passing the addresses of a and b to c and d of swap function */ printf(“%d %d”.

Problem Solving and C Programming

for( i = 0; i < 5; ++i ) scanf("%d", &values[i] ); max = maximum(values); /* array name is used to pass an entire array without any subscripts */ printf("\nMaximum value is %d\n", max ); } Passing Multidimensional Arrays Multi dimensional arrays can also be passed in the same manner as single dimensional array, but care must be taken in representing the formal arguments. Example 9.13 void print_table(int xsize,int ysize, float table[][5]) { int x,y; for (x=0;x<xsize;x++) { for (y=0;y<ysize;y++) printf("\t%f",table[x][y]); printf("\n"); } } Note: Second dimension is mentioned with its size. In case of three dimensional arrays, second & third dimension has to be mentioned. This is to represent the column size. The array elements are stored in row major form. Arrays can not be returned with return statement since return can pass only a single-value back to the calling program. Therefore, in order to return an array to the calling program, the array must either be defined as global array, or it must be passed as a formal argument to a function.

Page 74 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Try It Out 1. Problem Statement:
Write a program to print out first 10 numbers in descending order using recursive function

Code:
#include <stdio.h> void recurse(int i); void main(void) { recurse(0); getchar(); } void recurse(int i) { if (i<10) { recurse(i+1); printf("%d ",i); } } Refer File Name: <sesh9_1.c> to obtain soft copy of the program code

How It Works:
This program explains about how to write recursive function The main program calls the recurse function with value 0 as argument In the recurse function, the value is increment and the recurse function is called again. This time it passes 1 as argument. Again in the next step value will be incremented and the recurse function is called. This continues till the value passed is less than 10. Once it is equal to 10, it start printing the value of i. First it will print the value of 10, then it returns from the function and again prints the value as 9 and returns back. This continues till all the function call is completed. Hence the 10 numbers will be printed in descending order.

Page 75 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

2. Problem Statement:
Write a program to have functioning returning a value

Code:
/* function that returns value*/ #include <stdio.h> #include <stdlib.h> int getval(void); int main() { int weight; weight=getval(); printf("Entered value is %d\n",weight); getchar(); return(0); } int getval(void) { char input[20]; int x; printf("some integer:"); gets(input); x=atoi(input); return(x); } Refer File Name: <sesh9_2.c> to obtain soft copy of the program code

How It Works:
The main program calls the getval() function. In getval() function, prompts the user to enter some number. It reads the input value and converts to integer form . Then returns the integer value. The main program then prints the value on the screen.

Page 76 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

C supports four storage class specifiers (auto.i). printf(“ %d “ . Test your Understanding 1. What is the output of the following code? main() { int i=10. What is the difference between call by reference and call by value? 5. What is function prototyping? 2. a). } 4. extern and register) to define scope and life time for the variable. argc and argv are used to pass arguments to main() function. A function calling itself is called recursion. well defined task. Cognizant Technology Solutions. Arrays can be passed to a function by simply specifying its name. } printf(“%d” . ii) function call. { int a = 3. What is relationship between the actual parameters and its formal parameters? 3. All Rights Reserved C3: Protected . static. fn(i). } Page 77 ©Copyright 2007. printf("%d". Functions facilitates reusability and brings logical clarity to the programs.Problem Solving and C Programming Summary Functions are smaller self-contained components which carry out some specific. iii) function prototyping Arguments can be passed to a function via call by reference method or by call by value method. } fn(int i) { return ++i. What is the output of the following code? main() { int a =4. a). C functions should be considered with three aspects: i) function definition. The command line arguments.

Using command line arguments. a) p is a function which receives a character pointer and returns an integer value b) p is a function which receives a character pointer and returns an integer pointer c) p is a pointer (function pointer) which can point to any function with character argument and integer return value. type of its arguments. b. Function prototyping is like a function declaration statement which informs the compiler about the function (its name. How main() function is called with parameters? Answers: 1. Corresponding parameters must be of same type. address of the actual parameters are passed to corresponding formal parameters but in call by value. 3 4 4. In call by reference. 10 6. 7. d) p is a function whose argument is an array of pointers. int p(char *a) b. What the following declaration statements imply? a. int (*p)(char a) d. int *p(char *a[]) 7.Problem Solving and C Programming 6. 2. only the values of the actual parameters are copied in to corresponding formal parameters. int *p(char *a) c. return data type). All Rights Reserved C3: Protected . Page 78 ©Copyright 2007. a. 3. it is needed only when the function is called prior to its definition. 5. In C. Cognizant Technology Solutions. There must be a one-to-one correspondence between the actual and formal parameters.

All Rights Reserved C3: Protected . you will be able to: Use different storage classes in a program Use command line arguments Explain the concept of structures and unions Explain how to declare and initialise Structure Perform operations on structures Perform operation on structures and arrays Perform operation on Structures and functions Storage Classes Variables in C can be characterized by their data type and storage classes. This is called block scope.. it has file scope. This is normally called a global variable and is normally defined at the top of the source code. This means. Life Time Life time refers to the permanence of a variable – How long the variable will retain its value in memory. If it is defined outside of all the blocks. Cognizant Technology Solutions. All other types of variables are local variables. The storage-class-specifier can be any one of the following: auto static register extern Page 79 ©Copyright 2007.. Data type refers to the type of information represented by a variable and storage classes define its life time and scope. is determined by where it is defined..Problem Solving and C Programming Session 10: Functions/Structures and Unions Learning Objectives After completing this session. its scope begins when the variable is defined and ends when it hits the terminating. If a variable is defined in a block (encapsulated with {and}). General Form: storage-class-specifier type-specifier variable-names. Scope The scope of the variable (where it can be used). it may be accessed anywhere in the current source code file.

In the case recursive functions. When the execution of the block is completed. Because of this property. Local variables of different functions/blocks may have the same name.1 main() { int a = 5 . with identical names. Whenever the control again comes to the same block new memory location will be allocated to those variables. The scope is only to the function in which it has been declared but the variable exists in the memory throughout the entire life of the program . All Rights Reserved C3: Protected . Cognizant Technology Solutions. Static variables are stored in memory. } One important feature of automatic variables is that their value cannot be changed by whatever happens in some other function in the program. Static variables (static storage class) Static variables are also local (visible) to the block in which the variable is declared. then its scope is confined to that function. a situation similar to function nested auto variables. their initial value will be unpredictable (garbage value). Once allocated. it is cleared and its memory destroyed. They are local or private to the function in which they are declared. internal static variables retain values between function calls. If no storage class is specified. Example 10. A static variable may be either internal (local) or external (global). by default it is an auto variable. prints 5 prints 6 Page 80 ©Copyright 2007. although it is active only in main(). It retains its value till the control remains in that block. memory will be de-allocated after the completion of the program execution. } printf(“ %d “ . printf (“%d “ . If the variable is declared within a function.Thus. So. Internal variables are those declared inside a function (or block). If not initialized in the declaration. a). A variable local to the main function will be normally alive throughout the whole program. the nested variables are unique auto variables. They retain the values throughout the life of the program. { int a =6 . it will retain the value between function calls.Problem Solving and C Programming Automatic variables (Auto storage class) Automatic variables are local (visible) to the block in which they are declared. it is automatically initialized to zero. a). they are also called local or internal variables. If not initialized in the declaration statement.

we must distinguish between: External Variable Definition External Variable Declaration Page 81 ©Copyright 2007. Since the registers are less in numbers.2 main() { int i. External variables can be accessed from any function and the changes done by one function will be reflected through out the entire scope. Since registers are faster than memory. instead of keeping it in the memory.x). They are referred to as global variables. they will be automatically converted into non register variables (automatic variable). Access to variables outside of their file scope can also be made by using linkage. Cognizant Technology Solutions. printf(“ x = %d\n”. Linkage is done by placing the keyword extern prior to a variable declaration. It retains its value till the control remains in that block. } incre() { static int x = 0. If the declaration of register variable exceeds the availability. All Rights Reserved C3: Protected . If not initialized in the declaration. for (i=1. the variable is initialized to zero. External variables (extern storage class) External variables are not confined to a single function.i<=5. keeping the frequently accessed variables like a loop control variable in a register will increase the execution speed. } Output: x = 1 x = 2 x = 3 x = 4 Register variables (register storage class) It is possible to inform the compiler that a variable should be kept in one of the registers. x = x +1. careful selection must be made for their use. Their scope extends from the point of definition through the remainder of the program. Register variables are local (Visible) to the block in which they declared.Problem Solving and C Programming Example 10.i++) incre(). This allows a variable that is defined in another source code file to be accessed. When using external variables.

3 int a = 5 . A C program is executed by calling its main() function. /* external variable definition (No need to use extern keyword) */ main() { extern int b. extern int a = 10. a C program can be executed either by selecting an icon from a graphical user interface or by entering a command in a command window (DOS or UNIX command window).Problem Solving and C Programming If not initialized in the declaration. it is executed by a command-line interpreter. */ void fun(). All Rights Reserved C3: Protected . The first word is treated as the name of a program. fun(). Page 82 ©Copyright 2007. b). The interpreter searches for the program and starts it executing with the command words passed as arguments. but as a first approximation. printf(“ %d “ . It is usually easier to write programs that are run by entering a command in a command window. External variable declaration can not have initialization. just to say that the variable is declared somewhere else in the same program or other programs. } int b = 20. } void fun() { a = 10 . The function is called with one integer argument that indicates how many words are in the command line and another argument that is a character array of pointers containing the command line words. it is initialized to zero. /* external variable declaration. When a command is entered in a command window. External variables are useful when working with multiple source files. The operation of a command interpreter is quite complex. interpreter breaks up a command into words separated by spaces. printf(“ %d “ . Example 10. a). invalid /* /* prints 10 */ prints 20 */ Command Line Arguments Depending on the operating system and programming environment. Cognizant Technology Solutions.

department code (string). salary (float). Cognizant Technology Solutions. For example.argc). i < argc. an employee is represented with the following attributes: employee code (string / integer). A structure is an aggregation of components that can be treated as a single variable. Page 83 ©Copyright 2007. employee name (string). which are command line strings. i++) printf(“\nArgument number %d = %s”. argv[i]). All Rights Reserved C3: Protected . } When the following command is given in the command prompt. c cpp java The following result is displayed Introduction to Structures and Unions Structures and Unions are the main constructs available in C by which programmers can define new data type. printf(“\n Total Number of Arguments = %d”. The components are called Members.Problem Solving and C Programming main ( int argc. Structures and unions provide a way to group together logically related data items.4 main( int argc. char *argv[]) { : } Where: argc provides a count of the number of command line argument argv is an array of character pointer of undefined size that can be thought of as an array of pointer to strings.i . for( i = 0. Structure Structure is a derived data type used to represent heterogeneous data items. Example 10. C:\tc\bin> CMLPGM c cpp java arguments) Number of Arguments = 4 Argument number 0 = CMLPGM Argument number 1 = c Argument number 2 = cpp Argument number 3 = java (CMLPGM program name. char* argv[]) { int i.

... General form: struct tag_name { type variable-name. tag name is optional.... Here. variable-name.. } .Problem Solving and C Programming Declaration and Initialization Declaration C provides facilities to define structures via a template and to declare a tag to be associated with such structures so that it is not necessary to repeat the definition. Page 84 ©Copyright 2007.. no extra structures can be created. Structure definition and declaration of structure variables can be combined together.. variable-name.... float salary. Example 10.. a separate instance of structure will be created with the name specified and memory will be allocated for that... : : type variable-name.... All Rights Reserved C3: Protected ..... Structure-variables can be declared separately by specifying: struct tag_name new-structure-variable.. “struct” keyword is used to define structures... struct employee emp1. }. emp2.. type variable-name.. Individual members will be given a separate memory location. When declaring structure variables..5 1) struct employee { int code....... Cognizant Technology Solutions. int dept_code. variable-name. Note: If tag name is not specified in the declaration.. type variable-name. variable-name. char name[20]..

1}. the ‘avg’ will be initialized to 0. stud2={102.”Dina”. then the expression “s. struct employee { int empno = 101 . int dept_code. 1. } Accessing the members Members of the structure can be accessed by using the member access operator “. static char[20] empname = “AAAA”. illegal. the member variables are automatically initialized to zero or Null depending on the data type of the member variable. If the structure variable is declared before the main function in the global declaration section. Initialization Structure variables can be initialized at the time of declaration. struct stud stud1={101. If it is partially initialized. int semester. If ‘s’ is a structure variable with a member named ‘m’. Cognizant Technology Solutions. Example 10. “Raja”. (tag name is optional here) char name[20]. illegal. stud For the structure variable ‘stud2’. char name[20].m” refers to the value of the member ‘m’ within the structure ‘s’. uninitialized members are assigned zero or Null.78}. The format used is quite similar to initializing an array. } emp1. float salary.Problem Solving and C Programming 2) struct employee { int code. No storage class can be specified for structure members.”(dot). }. 90.6 struct { int rollnum.0 Individual structure members can be initialized only via structure variable. float avg. emp2. All Rights Reserved C3: Protected . Page 85 ©Copyright 2007.

9 struct { int day.code emp1. member-field-name Example 10. the assignment expression a = b is valid. date Page 86 ©Copyright 2007. }.dept_code emp1. even though the values stored in the member variables are same. Example 10. Assignment operation is allowed. All Rights Reserved C3: Protected . char name[20]. This is because. slack bytes are added in-between two member variables and these slack bytes have garbage value. While comparing structure variables. It causes each member of ‘a’ to be assigned the value of the corresponding member of ‘b’. Note: Member structure must be defined prior to its use. Size = 26 Nested Structure Just as arrays of arrays.7 emp1. printf (“Size = %d”.8 struct emp { int empno. } emp1.name Operations on Structures Two structure variables cannot be compared for equality. For example. sizeof() operator can be used to find the size of the structure. This can be a powerful method to create complex data types. structures can contain members that themselves are structures. if ‘a’ and ‘b’ are two structure variables of the same structure type. the values in slack bytes are also compared. float basic. which is always not same for different structure variables.Problem Solving and C Programming General Form: struct_vble .name emp1.salary emp2. Cognizant Technology Solutions.code emp2. Example 10. int year. int month.sizeof(emp1)).

int avg. struct stud Accessing values: student [1].semester student [1]. char name[20]. int sub_marks[5]. }.doj.year Structures and Arrays A structure can be a array of structure and the members of structures can be arrays. then we can do so by writing: emp1. All Rights Reserved C3: Protected .name student [1]. }student. struct date doj.rollnum student [1]. float salary.sub_marks[0] }. Accessing values: student. }emp1.10 Array of structures struct stud { int rollnum. char name[15]. char name [20].avg student[50]. int semester.11: Arrays within structures struct student-mark { int rollnumber. if we want to access the year of joining of an employee of emp1. In this example.emp2. Cognizant Technology Solutions. Example 10.sub_mark[1] Page 87 ©Copyright 2007. student. int dept_code.Problem Solving and C Programming struct employee { int code. Example 10.

main( ) { void display(struct emp). emp2. change(&emp1). “AAAA”} . Example 10. But changes will not be reflected back. printf(“ %s “ . emp2. struct emp emp1 = { 101 . struct emp emp1 = { 101 .12 struct emp { int empno.Problem Solving and C Programming Structures and Functions Structures can be passed to a function via call by value and call by reference methods. /* prints 102 */ Page 88 ©Copyright 2007. Cognizant Technology Solutions. We can use pointer to structures. void main( ) { void change(struct emp *).13 struct emp { int empno. or we can pass address of the structure variable using & operator. “AAAA”} .empname). All the members are copied into corresponding formal arguments. printf(“%d” . char empname[10]. emp1->empno). }. char empname[10]. it is passed using call by value method. When the structure variable (which not a pointer) is passed as an argument to a function. }. } void display(struct emp emp2) { printf(“ %d “ . All Rights Reserved C3: Protected . } Entire structure can be passed to a function using call by reference method.empno). display(emp1). Example 10.

student2. Cognizant Technology Solutions.Problem Solving and C Programming } void display(struct emp *emp2) { emp2->empno=102.marks = 99. } student1. x. int main ( ) { struct student student3.marks). emp1 is a structure variable of employee structure. student1. Function should be declared and defined as: struct tag_name fun_name( struct tag_name struct_vble_name. printf (" Marks are %. student2.2f \n". getchar(). } Function can return a structure type struct_name = fun_name (struct_vble_name).h> struct student { char name[20].name. struct employee emp_pay (struct sal pay. strcpy(student1. y). } Page 89 ©Copyright 2007. wage is a structure variable of sal structure. float b) { } function definition Try It Out Problem Statement: Write a program to access the members of structure Code: #include <stdio.14 emp1 = emp_pay (wage. All Rights Reserved C3: Protected . printf (" Name is %s \n". student2. float marks."Tom").9.name). …) Example 10. int a.

Print the values of the structure. enum keyword is used to define enumerations.Problem Solving and C Programming Refer File Name: <sesh10_1. Unions are similar to structures but the main difference is that union members share the common memory location whereas memory is allocated to individual structure members. }*p1. What distinguishes an array from a structure? 2. In unions. typedef statement is used to define new data types which are compatible with existing ones. Summary Structure is a derived data type used to store heterogeneous data items under a single unit. In the main program assign values to both member of structure. Structure can be passed to a function by both call by value approach and call by reference approach. What is a self referential structure and where can it be used? 3. Structure members can be accessed by structure variables using dot ( .c> to obtain soft copy of the program code How It Works: Declare student structure comprising of name and marks. All Rights Reserved C3: Protected . ) operator. Consider the following structure. only one member is accessible at a time. Test your Understanding 1. int *p. How can the content pointed by member pointer p be accessed via structure variable p1? Page 90 ©Copyright 2007. struct { int a. Structures can be nested and can also have self reference. Cognizant Technology Solutions.

}. Cognizant Technology Solutions. *p1->p. whereas the members of a structure can be of different types. 3. Size = 19 Page 91 ©Copyright 2007. struct stud_type s1. All Rights Reserved C3: Protected . The elements of an array are always of the same type. 4. Answers: 1. 2. sizeof (ex)). }ex. printf(“Size = %d”. Self referential structures will contain a member that is a pointer to the parent structure type. It is very useful in applications that involve linked data structures. What will be the result when the following code is executed? struct stud_type { int rollno. union person { char surname[10]. int age. char name[15].Problem Solving and C Programming 4.

.. }union-variable. ... along with the keyword ‘union’.... Cognizant Technology Solutions.. Initialization Union can be initialized only with a value for the first union member.. : : type variable-name. like a structure.. unformatted... Unions follow the same syntax as structures.... can be used to declare variables of the union type. variable-name. All Rights Reserved C3: Protected .. you will be able to: Explain how to declare and initialise Unions Perform operations on unions How to use typedef statement How to declare and use enumeration data type Explain the concept of file and its types Perform basic file operations Perform formatted. is a derived data type.. the compiler allocates a piece of storage that can accommodate the largest of the specified members. variable-name..... and the members of the union are given..... and block file I/O operations Unions Union.. In the declaration. type variable-name. Declaration The declaration can be thought of as a template .. For each variable..... type variable-name..Problem Solving and C Programming Session 14: Structures and Unions / Files and Preprocessor directives Learning Objectives After completing this session.... keyword ‘union’. the tag name. Union differs from structure in storage and in initialization. variable-name. Page 92 ©Copyright 2007. The tag name.. No other member can be initialized. but no storage is allocated. The programmer is responsible for interpreting the stored values correctly..it creates the type. General Form: union tag_name { type variable-name.... union-variable.. variable-name.

Cognizant Technology Solutions. Thus. only one member variable can be accessed at a time. The dot operator (. char c.Problem Solving and C Programming Example 14. /* m will be initialized with 100 */ Accessing the member of union The notation used to access a member of a union is identical to that used to access member of a structure. Example 14. char name[15].) is used to access the members. }. union { char surname[10]. int dept_code. person Union of Structures struct employee_type Page 93 ©Copyright 2007.1 union item { int m. float salary.2 { int code. int age. struct stud_type { int rollno. float avg. float x. }. Union permits a section of memory to be treated as a variable of one type on one occasion. s1. All Rights Reserved C3: Protected . char name[20]. struct stud_type }ex. struct employee_type e1. Union of Structures Structures and unions can be members of structures and unions. and as a different variable of a different type on another occasion. static union item product = {100}. }.

“enum” keyword is used to declare enumerated variables. vtab = `\v'.Problem Solving and C Programming In the above example. first enumerated name has index value 0. All Rights Reserved C3: Protected . to share common memory. Here. Example 14.salary Enumeration Enumeration is a derived data type. …………… var n. enum colors { red = 1 . tag is a name that identifies enumerations having this composition and members represent the identifiers that may be assigned to variables of this type. …… member n } . var2 . As with arrays. General Form: enum tag { member1 . if (e1 == newline) printf("newline"). That is. Enumerated variables can be declared as follows: storage-class enum tag var1 . definition and variable declaration can be combined. The member names must differ from one another. next value is calculated as previous plus one. at the same time. Cognizant Technology Solutions. similar to structures or a union. member2 . green takes the value 6. though they have signed integer values.e1.3 enum escapes { bell = `\a'. green } Page 94 ©Copyright 2007. newline = `\n'. e1 and s1. backspace = `\b'. We can also override the 0 start value by assigning some other value. } Enumeration variables can be processed in the same manner as other integer variables. the union allows the structure variables. e1 = getch(). These constants represent values that can be assigned to corresponding enumeration variables. The elements of this union of structures are accessed using dot operator as follows: ex. blue = 5 . As structures. return = `\r'} main() { enum escapes e1. but not both. tab = `\t’. the user can use either e1 or s1. Its members are constants that are written as identifiers.

For such applications. }employee. emp2. files are needed. All Rights Reserved C3: Protected . General Form typedef datatype new-type. supplying data through the keyboard during the execution or displaying the output on the screen is not convenient. char empname[10]. It is used to give new names to existing data types.5 typedef { int empno. Example 14. Cognizant Technology Solutions. n2 are the employee is the name given to the structure of the above type. struct n1 .4 typedef numbers int. integer variables. no need to use struct keyword.Problem Solving and C Programming Typedef Statement The ‘typedef’ allows users to define new data types that are equivalent to existing data types. A file is a place on the disk where a group of related data is stored. Example 14. The input data can be stored on disks and the program may access the data from disks for processing. file manipulations may be done in two ways: Low-level I/O using system calls High-level I/O using functions from standard I/O library The files accessed through the library functions are called Stream Oriented files and the files accessed with system calls are known as System Oriented files. typedef is mostly useful with structures and unions. the results may be stored on disks. Similarly. Introduction to Files When a large volume of data is involved. n2 . numbers n1. numbers is the new name given to integer data type and it can be used to declare integer variables. In C. employee emp1. Then structure variables can be declared as follows. Streams and Files Page 95 ©Copyright 2007.

Each line has zero or more characters and is terminated by a new line character. there are three available streams: Standard input (stdin) is the stream where a program gets its input data Standard output (stdout) is the stream where a program writes its output data. Spaces cannot appear before a newline character. More generally. Text streams consist of printable characters. File Operations Files are associated with streams and must be open in order to use it. There are two types of streams: text and binary.h. Binary streams are composed of only 0’s and 1’s. In C. When a file is opened. and the new-line character. All Rights Reserved C3: Protected . the file position points to the beginning of the file unless the file is opened for an append operation . Cognizant Technology Solutions. Standard error (stderr) is another output stream typically used by programs to output error messages. The point of I/O within a file is determined by the file position. The file position indicates where the next operation (read/write) will occur. ‘FILE’ is a structure that holds the description of a file and is defined in stdio. When a file is closed. Basic File operations are: Opening a File Reading from and/or writing into a File Closing the File Page 96 ©Copyright 2007. a text stream removes these spaces even though implementation defines it. A text stream.Problem Solving and C Programming Streams facilitate a way to create a level of abstraction between the program and an input/output device. Text streams are composed of a set of lines. and all characters will be transferred as such. This allows a common method of sending and receiving data amongst the various types of devices available. When a program begins. Conversions may occur on text streams during input and output. Exiting from the main function causes all open files to be closed. the tab character.in which case the position points to the end of the file. no more actions can be taken on it until it is opened again. It is simply a long series of 0’s and 1’s. on some systems. there need not be a one-to-one mapping between characters in the original file and the characters read from or written to a text stream. may be able to handle lines of up to 254 characters long (including the terminating new line character). But in the binary stream there will be one-to-one mapping because no conversion exists.

fclose(fp ). fp = fopen(“name”. All Rights Reserved C3: Protected . the purpose/positioning of opening the file. fscanf(fp. “mode”).c. Where: The ‘fp’ is a file pointer or file handler. (Extensions can be specified like test. the code must: define a local ‘pointer’ of type FILE ( called file pointer ) ‘open’ the file and associate it with the file pointer via fopen() perform the I/O operations using file I/O functions ( ex. details.dat etc) The ‘mode’ argument in the fopen() specifies. It is a string enclosed within double quotes. fprintf(fp. fscanf() and fprintf() ) disconnect the file from the task using fclose() General form: FILE *fp. The ‘name’ is to represent filename and it is a string of characters.Problem Solving and C Programming The logic is. variable list). variable list). "format string". "format string". The ‘mode’ can be any of the following: r read text mode w write text mode (truncates file to zero length if it already exits or creates new file) a append text mode for writing (opens or creates file and sets file pointer to the end-of-file) rb read binary mode wb write binary mode (truncates file to zero length if it already exits or creates new file) ab append binary mode for writing (opens or creates file and sets file pointer to the end-of-file) r+ read and write text mode w+ read and write text mode (truncates file to zero length if it already exists or creates new file) a+ read and write text mode (opens or creates file and sets file pointer to the end-of-file) Page 97 ©Copyright 2007. Cognizant Technology Solutions.

all write operations occur at the end of the file regardless of the current file position. all the files opened are closed when the program is terminated. the file must be opened in ‘w’ mode The function putc() is used to write a byte to a file. The Standard I/O provides variety of functions to handle files. one character (byte) can be written to or read from a file at a time. If the file is opened in the update mode (+). the file open fails and it will return NULL to file pointer. fopen() returns the file pointer position for successful open and returns NULL. rewind(). fsetpos(). It supports the following ways of reading from and writing into file: Character I/O String I/O Formatted I/O Block I/O Integer I/O Character I/O Using character I/O. because files can be reopened only if they are closed.Problem Solving and C Programming r+b or read and write binary mode rb+ w+b or read and write binary mode (truncates file to zero length if it already exists or creates new wb+ file) a+b or read and write binary mode (opens or creates file and sets file pointer to the end-of-file) ab+ If the file does not exist and it is opened with read mode (r). if the file does not open or the file does not exist. Writing in to a file To write into a file. All Rights Reserved C3: Protected . output cannot be directly followed by input and input cannot be directly followed by output without an intervening fseek(). Cognizant Technology Solutions. fclose() returns zero for successful close and returns EOF (end of file) when error is encountered in closing a file. or fflush(). By default. It is good to close all the files opened with fopen(). If the file is opened with append mode (a). Page 98 ©Copyright 2007.

which represents a standard input device.”r”)) !=NULL) { while ((c=getc(fp)) != EOF) Page 99 ©Copyright 2007. The fptr may be stdin. the character is returned. EOF is returned and the end-of-file indicator is set. This may be a macro version of fgetc.fp). Example 14. the character is returned. the error indicator for the stream is set and EOF is returned. If the end-of-file is encountered. On success.fptr). Cognizant Technology Solutions. char c. After the reading a character. which represents standard output device. } Reading from a file The function getc() is used to read a byte from a file. This function writes the character ch into a file pointed by the file pointer fptr. the pointer is moved to the next position. the error indicator for the stream is set and EOF is returned. The EOF is end of file status flag. if ((fp=fopen(“sample. otherwise false. This fptr may be stdout.dat”.7: main() { Program to read a character data from a text file FILE *fp. If an error occurs. This function reads a character from the file and it is returned to the program defined character variable. General Form: ch =getc (fptr). On success. If an error occurs. fclose(fp). if ((fp=fopen(“sample. Example 14. char c. keyboard as a file.”w”)) !=NULL) { while ((c=getchar()) != EOF) putc(c.dat”.6: Program to create a text file (character file) main() { FILE *fp. which is true if end of file is reached. } else printf(“Error in opening a file”).Problem Solving and C Programming General Form: putc(ch. monitor as a file. All Rights Reserved C3: Protected .

On success.Problem Solving and C Programming putchar(c). or read from. A null character is appended to the end of the string. string can be written to. a nonnegative value is returned. General Form: putw (i. fptr). On error. Numeric I/O Using numeric I/O. fclose(fp). Cognizant Technology Solutions. Reads a line from the specified stream and stores it into the string pointed to by str. General Form: fputs (str. fptr). On error. On error. Reading a string from a file The function used is fgets(). a file at a time. This function writes an integer to a file. On success.fptr). the newline character is read. a nonnegative value is returned. It stops when (n-1) characters are read. or the endof-file is reached. EOF is returned. a null pointer is returned. Writes a string to the specified stream till the last character is read but does not include the null character. } else printf(“Error in opening a file”). General Form: fgets(str. Writing integer in to a file The function used is putw(). whichever comes first. Writing a string in to a file The function used is fputs(). or read from. All Rights Reserved C3: Protected . integers can be written to. Page 100 ©Copyright 2007.n. } String I/O Using string I/O. a file at a time. The newline character is copied to the string. a pointer to the string is returned. the string remains unchanged. On success. If the end-of-file occurs before any characters have been read. EOF is returned.

If the input does not match. new line. Reading an input field (designated with a conversion specifier) ends when an incompatible character is met. Other characters in the format string specify characters that must be matched from the input. General Form: fscanf( fptr. or form feed. addresses-list). On success. Each character in the format string is copied to the stream except for conversion characters which specify a format specifier. The fprintf() function takes the format string specified by the format argument and applies each following argument to the format specifiers in the string. Reading formatted data from the file The function used is fscanf(). format-string.Problem Solving and C Programming Reading integer from a file The function used is getw(). format-string. as specified by the format specifiers in format-string and stores in the variables. Each input field is specified in the format string with a conversion specifier which specifies how the input is to be stored in the appropriate variable. On success. the number of input fields converted and stored is returned. This function will write the values stored in the variables into a file pointed by fptr. carriage return. but are not stored in any of the following arguments. whose addresses are given in addresses-list. Writing formatted data to a file The function fprintf() is used. General Form: i = getw( fptr). tab. or the width field is satisfied. vertical tab. variable-list). -1 is returned. The fscanf() function takes input in a manner that is specified by the format argument and stores each input field into the corresponding arguments. according to the format specifier specified in format string. in a left to right fashion. Page 101 ©Copyright 2007. If an input failure occurs. Reads an integer from the file and assigns it to the program defined numeric variable at the LHS. A white space character may match with any white space character such as space. All Rights Reserved C3: Protected . If an error occurred. General Form: fprintf ( fptr. EOF is returned. in a left to right fashion. the function stops scanning and returns. or the next incompatible character. the number of characters printed is returned. Formatted I/O The formatted I/O functions can handle a group of data in a single call. Cognizant Technology Solutions.This function will read the formatted data from the file pointed by fptr.

no . std1[i].age). fpt = fopen("details.i++) { scanf("%d %s %d " .name . &std[i]. int i. char name[10]. The data handled by block input/output function will be in ‘raw data format’ (i.e. Cognizant Technology Solutions. std1[i].&std1[i].8: Program using fscanf() and fprintf() main() { FILE *fpt. Writing in to a file The function used is fwrite(). } } Block I/O Block I/O is used to read or write a specified number of bytes. It writes ‘n’ blocks of size Page 102 ©Copyright 2007. fpt = fopen("details.name printf("%d %s %d \n" . for(i=0.name .name .no . All Rights Reserved C3: Protected . "r").Problem Solving and C Programming Example 14. i<5 . printf("\n\n reading from file \n\n"). age )\n\n").age).no . &std1[i].Transfers a specified number of bytes beginning at a specified location in memory to a file.dat" . fprintf(fpt . bytes of data). name . std1[i]. struct { int no. std1[10]. std[i]. while(!feof(fpt)) { fscanf(fpt . "%d . "%d %s %d " .no . std1[i]. printf("\n\n enter the details (no .age). std[i]. }std[10]. } fclose(fpt). std[i]. std[i]. clrscr(). "w"). The function writes data from the array pointed to by ptr to the given stream.age). %s %d " . i++.dat" . &std[i]. int age. Used to write a structure or an array of structures to an output file.

n. General Form fread (&str. All Rights Reserved C3: Protected . fp). sizeof(stud1[0]) . n. On success the number of elements read is returned.age). the total number of elements successfully read (which may be zero) is returned. fp). The total number of bytes written is (size*n). General Form fwrite (ptr.dat" . sizeof(stud[0]) .dat" . It reads ‘n’ number of elements of size ‘size’. The total number of bytes read is (size*n). Where: &str size n fp destination memory address size of each block (number of bytes to be read) number of blocks to be read file pointer (source) Example 14. printf(" \n\n printing the values "). 5 .9: Program using Block I/O main() { FILE *fptr. fread(&stud1 . fptr). fwrite(&stud .name . Reads data from the given stream into the variable pointed to by ptr. clrscr(). }stud[10] . fclose(fptr). int age . fptr = fopen("ex. size. 5 . for(i=0 . On error the total number of elements successfully written (which may be zero) is returned. struct tag { char name[10]. i<5 .Problem Solving and C Programming ‘size’. Where: ptr size n fp pointer to the data block (source) size of each block (number of bytes to be written) number of blocks to be written file pointer (destination) Reading from a file The function used is fread(). fptr=fopen("ex. stud1[10]. size. fptr). "r" ). On error or end-of-file. int i . &stud[i]. i++) scanf("%s %d ".stud[i]. Cognizant Technology Solutions. On success the number of elements written is returned. Page 103 ©Copyright 2007. "w" ).

// this will be the file I want to read main(int argc.c> to obtain soft copy of the program code How It Works: Run the program by passing file that needs to searched as command line arguments.Print the line number and the line. // This is where I read the lines of the file int count. // after this command. } Refer File Name: <sesh14_1. stud1[i]. Read the first line of the file and increment the line count Page 104 ©Copyright 2007. count will equal the current line number if (strstr(myString. inFile) != NULL) // keep reading lines { // until I've seen them all count++. myString). All Rights Reserved C3: Protected .h> */ FILE * inFile.h> #include <stdio. Cognizant Technology Solutions. print it } fclose(inFile). // start at 0 lines counted so far inFile = fopen(argv[1].age). In the main program. 255. "name") != NULL) // check to see if 'drawline' printf("Line %d] %s". Problem Statement: Write a program to find a word in a file. // I will use this to count the lines of the file count = 0.count.c */ #include <string. } Try It Out 1. read the input argument. // is in the current line and // if so. i<5 . i++) printf("\n %s \t %d " .h> /* #include <stdlib.Problem Solving and C Programming for(i=0 . stud1[i]. "r"). Code: /* findword.char *argv[]) { char myString[256]. // close the file I opened earlier getchar(). // open the file for reading only while (fgets(myString. Open the input file.name .

Page 105 ©Copyright 2007. value. Continue till all the lines in the file are processed. printf( "%s\n%s\n%s%d\n%s%f\n\n". "double:\n". value.y ). value. Code: //Output both value in a union #include <stdio. Cognizant Technology Solutions.x.c> to obtain soft copy of the program code How It Works: Declare a union having two members. double y.x. printf( "%s\n%s\n%s%d\n%s%f\n". Again read the next line in the file and do the same process.0. getchar(). Problem Statement: Write a program to print both members of union. "Put a value in the floating member". int main() { union number value. one integer and the other double. value. if found print the line number and the full string. "and print both members. Close the file and exit the program 2.h> union number { int x. }. value. "double:\n". In the main program declare a variable of union datatype. "and print both members.x = 100. "int: ". "Put a value in the integer member". "int: ". value. return 0.". } Refer File Name: <sesh14_2. All Rights Reserved C3: Protected .y = 100.y ).".Problem Solving and C Programming compare the search key word say ”name” .

ii) file inclusion and iii) conditional compilation. fopen(). string I/O. and rewind() functions. Cognizant Technology Solutions. } 3. Output operations on files can be of character I/O. formatted I/O and block I/O. All Rights Reserved C3: Protected ."hello-out"). sleep(1).Problem Solving and C Programming First assign the value of x as 100 and print both the members. Preprocessor directives perform i) macro substitution. Test your Understanding 1. What is EOF. 2) Page 106 ©Copyright 2007. x will print as 100 and y as 0 Next assign the value of y as 100 and print both the members. and what value does it usually have? 4. 2L . fclose() functions are used for opening and closing of files. i++. What are the three files automatically associated with every C program? 2. x will print as 0 and y as 100 Summary Files are used to store bulk of related information in secondary storage. } return 0. Preprocessor directives are identified by # symbol. Files can be classified as system oriented and stream oriented files. Preproccessing is done before compilation. ftell(). Direct access of a file is supported by fseek(). What does the following statement specifies? fseek( fptr . Input. What is the output of the following code? int main() { while(i<10) { fprintf(stdout.

a ). No significance. printf(“%d”. What is the output of the following code? #define a 10 foo( ) { #undef a # define a 50 } main( ) { printf(“%d. 4. All Rights Reserved C3: Protected . stdout. 3. } Answers: 1. 50 50 Page 107 ©Copyright 2007. Cognizant Technology Solutions. It will print hello-out in the monitor 10 times. EOF is a constant returned by many I/O functions to indicate that the end of an input file has been reached..”. foo( ). a).Problem Solving and C Programming 5. 5. stderr 2. stdin. trying to move file pointer in the forward direction from the end of file. Its value on most computers is -1.

Problem Solving and C Programming Session 15: Files and Preprocessor directives / Pointers Learning Objectives After completing this session. Page 108 ©Copyright 2007. This can be achieved by using the functions fseek(). If it is a binary stream. then the value is a value usable by the fseek() function to return the file position to the current position. ftell() This function takes a file pointer and returns a long int. then the value is the number of bytes from the beginning of the file. Cognizant Technology Solutions. General Form: fseek( fptr. General Form: n = ftell(fptr). the value -1L is returned and error number (errno) is set. it may be necessary to access some part of the file directly. fseek() This function sets the file position to the given offset (specified in long integer format). offset. ftell() and rewind(). In some applications. The argument from_where can be: SEEK_SET Seeks from the beginning of the file. you will be able to: Access files in both sequential and random order Define pre-processor directives Perform pre-processor operations Perform conditional compilation How to declare and initialise Pointers Understand Pointer Arithmetic Perform operations on Pointers and Arrays Random File Operations The functions discussed earlier are to be used for reading and writing data sequentially. which corresponds to the current file pointer position. the current file position is returned. All Rights Reserved C3: Protected . from_where) The argument offset signifies the number of bytes to seek from the given ‘from_where’ position. On success. 0 1 SEEK_CUR Seeks from the current position. On error. If it is a text stream.

The error and end-of-file indicators are reset. Cognizant Technology Solutions. 2). A token is a series of characters delimited by white space. 2 On a text stream. Move the file pointer to the end of file. or carriage return. These lines are always preceded by a pound sign (#). 0L. zero is returned. Preprocessor Directives One of C's most useful features is its preprocessor. Move after 10 bytes from the beginning. 0L. form feed.1 fseek (fp. 1). On error. 10L. 2). therefore the preprocessor digests all these directives before any executable code is generated for the statements. change the line number of the next line of source and change the file name of the current file. Page 109 ©Copyright 2007. Preprocessing is a step that takes place before compilation that lets you to: Replace preprocessor tokens in the current file with specified replacement tokens. Remove comments from the source file. 0). -10L. On success. fseek (fp. from_where should be SEEK_SET and offset should be either zero or a value returned from ftell(). fseek (fp. a nonzero value is returned. Preprocessor directives are lines included in the code that are not program statements but directives for the preprocessor. fseek (fp. The white space allowed on a preprocessor directive may be the space. Embed files within the current file Conditionally compile sections of the current file Generate diagnostic messages Remove the blank lines in the program. All Rights Reserved C3: Protected . The error indicator is NOT reset. 0). rewind() This function sets the file position to the beginning of the file of the given stream. fseek (fp. General Form: rewind(fptr). vertical tab. The end-of-file indicator is reset. The preprocessed source program file must be a valid C program. fseek (fp. Move the file pointer to the beginning. Example 15. Move after 10 bytes from the current Move backward 10 bytes from the current Move backward 10 bytes from the EOF.Problem Solving and C Programming SEEK_END Seeks from the end of the file. 10L. horizontal tab. The preprocessor is executed before the actual compilation of code begins. -10L. 1).

The # is not part of the directive name and can be separated from the name with white spaces. or #elif test fails. preprocessor directives can appear anywhere in a program. #undef Removes a preprocessor macro definition. #pragma Specifies implementation-defined instructions to the compiler. #ifndef. No semicolon (. the preprocessor interprets the \ and the new-line character as a continuation marker. #ifdef #ifndef Conditionally includes source text if a macro name is defined. Conditionally includes source text if the previous #if. A preprocessor directive ends at the new-line character unless the last character of the line is the \ (backslash) character. #include Inserts text from another source file. #line Supplies a line number for compiler messages. Ends conditional text. #ifdef. All Rights Reserved C3: Protected . Preprocessor Directives Name Action # #define #elif #else #endif #error Null directive specifying that no action be performed. depending on the result of a constant expression. The preprocessor deletes the \ (and the following new-line character) and splices the physical source lines into continuous logical lines. Defines a preprocessor macro. Page 110 ©Copyright 2007.Problem Solving and C Programming Preprocessor directives begin with the # token followed by a preprocessor keyword. or #elif test fails. Conditionally includes source text if the previous #if. If the \ character appears as the last character in the preprocessor line. The # token must appear as a first character. Except for some #pragma directives.) is expected at the end of a preprocessor directive. Cognizant Technology Solutions. #if Conditionally includes or suppresses portions of source code. #ifndef. #ifdef. Conditionally includes source text if a macro name is not defined. Defines text for a compile-time error message.

The preprocessor replaces subsequent occurrences of that identifier with its assigned value until the identifier is undefined with the #undef preprocessor directive. All Rights Reserved C3: Protected . Example 15. General Form: #include <header file> OR #include “header file” The only difference between both expressions is the places (directories) where the compiler is going to look for the included file. Page 111 ©Copyright 2007. Therefore.h> #include “stdio. In the second case where the file name is specified between double-quotes. and then linked as necessary with other programs and libraries.2 #include <stdio. while other user specificed header files are included using quotes. Cognizant Technology Solutions.Problem Solving and C Programming Preprocessing Operations: Pre processing operations are mainly classifieds into 1) File Inclusion.h” Preprocessor Macros: #define preprocessor directive is used to define a macro that assigns a value to an identifier. whichever comes first. Preprocessing will be done before compilation. standard header files are usually included in angle-brackets. If the file name is enclosed between angle-brackets <>. or until the end of the program source is reached. the file is searched in the directories where the compiler is configured to look for the standard header files. the compiler searches the file in the default directories where it is configured to look for the standard header files. In case that it is not there. and then processed by the compiler. File Inclusion The #include directive allows external files to be added in to our source file. which is then syntactically and semantically analyzed and translated. the file is searched first in the current working directory. compilation process operates on the preprocessor output. 2) Macro substitution and 3) Conditional Compilation. There are two basic types of macro definitions that you can use to assign a value to an identifer: Object-like Macros (Symbolic constants) Replaces a single identifier with a specified token or constant value.

All Rights Reserved C3: Protected .. #define General Form: #define symbolicvaraiablename value Example 15. the defined function is inserted in place of the identifier along with any corresponding arguments. } Page 112 ©Copyright 2007.Problem Solving and C Programming Function-like Macros Associates a user-defined function and argument list to an identifier.4 #undef SIZE Macros: General Form: #define macroname(argument list) macrodefn Example: #define sqarea(a) ((a)*(a)) main() { areaofsquare=sqarea(a). Symbolic Constants The preprocessing directives #define and #undef allow the definition of identifiers which hold a certain value. ….3 #define SIZE 10 #define NAME letters */ “xyz” /* good practice is to use upper case #undef: General Form: #undef variablename Example 15. Cognizant Technology Solutions. When the preprocessor encounters that identifier in the program source. These identifiers can simply be constants or a macro function.

b) ((a)+(b)). All Rights Reserved C3: Protected . */ (1) */ areaofsquare=(3+4)*(3+4).Problem Solving and C Programming Arguments in the macro definition are enclosed with parenthesis to avoid miscalculation. /* areaofsquare=sqarea(3+4). All the matching directives are considered to be at the same nesting level. main() { areaofsquare=sqarea(a).3). The directives are: #if #ifdef #ifndef #else #elif #endif The directives #ifdef and #ifndef allow conditional compiling of certain lines of code based on whether or not an identifier has been defined. #ifdef. */ areaofsquare = (3) *(3). and #ifndef directive. and one matching #endif directive. Continuation character for macro definition is \. There is no need for semicolon after the macro definition. zero or one #else directive. These directives test a constant expression or an identifier to determine which tokens the preprocessor should pass on to the compiler and which tokens should be bypassed during preprocessing.5 #define sqarea(a) #define sqa(b) b*b #define add(a. General Form: #if constant_expression #else #endif OR #if constant_expression #elif constant_expression #endif Page 113 ©Copyright 2007. */ (2) */ ((a)*(a)) Conditional Compilation Directives: A preprocessor conditional compilation directive causes the preprocessor to conditionally suppress the compilation of portions of source code. addition=(2)+(3). } (1) (2) miscalculation because of no parentheses two semicolons in macro expansion. addition=add(2. Example 15. For each #if. /* /* areaofsquare = (a) * (a). /* areaofsquare=sqarea(3). /* areaofsquare=sqa(3+4).. Cognizant Technology Solutions. areaofsquare=3+4*3+4. there are zero or more #elif directives.

Example 15. then the compiler skips the lines until the next #else. Example 15. If there is a matching #else.. change the value of that variable to 1 after undefining it.somca)).6 Check whether a variable is defined. …. Cognizant Technology Solutions.Problem Solving and C Programming The compiler only compiles the code after the #if expression if the constant_expression evaluates to a non-zero value (true). printf(name(xyz)).y) x##y main() { …. If the value is 0 (false).. and the constant_expression evaluated to 0 (false). */ Example 15. */ Page 114 ©Copyright 2007.7 #define name(x) #x main() { …. } ## concatenation operator /* printf(“xyz”). …. printf(name(ssn. All Rights Reserved C3: Protected . and the preceding #if evaluated to false. } /* printf(“ssnsomca”). If there is a matching #elif. If so.8 #define name(x. #if define(NUMBER) #undef NUMBER #define NUMBER 1 #endif # and ## operators # causes the argument to be converted as a string enclosed within quotes. then the constant_expression after that is evaluated and the code between the #elif and the #endif is compiled only if this expression evaluates to a nonzero value (true). #elif. or #endif. then the lines between the #else and the #endif are compiled.

1000 – assumed as the address of a 1000 printf(“ Value = %d”. as they have a number of useful applications. Variable directly references the value and Pointer variable indirectly references the value. It is a unary operator that returns the address of its operand. C provides two operators. * and & are inverse of each other.Problem Solving and C Programming Introduction to Pointers Pointer is a variable that contain the memory address of another variable. int a = 5 . Whenever a variable is declared. Declaration General Form: data-type *pointer-name. All Rights Reserved C3: Protected . x 5 1000 px 1000 3000 variables values addresses Page 115 ©Copyright 2007. for pointer implementation. Referencing a value through a pointer is called Indirection. x = 5 . prints the value 5 prints the address 1000 Declaration and Initialization A pointer variable is declared with an asterisk before the variable name. *px. a). It returns the value of the variable to which its operand points. &a). px = &x. & address operator. 2 bytes of memory is allocated for variable ‘a’ a 5 a – variable. 5 – value. Cognizant Technology Solutions. The type-specifiers determine that what kind of variable the pointer variable points to. Pointers are one of the powerful and frequently used features of C.9 int x. Example 15. printf(“ Address of a = %u”. * Indirection or de-referencing operator. Variables contain the values and pointer variables contain the address of variables that has the value. & and *. memory is allocated for the variable according to the data type specified.

&x). b . px). printf(“ x = %d “ . x).11 Valid and Invalid pointer assignments int a . .cannot assign value to the pointer variable Pointer Arithmetic Pointer Addition or subtraction is done in accordance with the associated data type. b = &a.both p and q is pointing to the memory location of variable a invalid – ordinary variables cannot hold address. One pointer can be subtracted from another pointer variable provided both are pointing to same array.Problem Solving and C Programming Example 15. A pointer variable can be assigned the value of another pointer variable. invalid . Example 15. All Rights Reserved C3: Protected . *p = &a . An integer quantity can be added to or subtracted from a pointer variable. prints 5 prints 1000 prints 1000 prints 3000 prints 5 Initialization Pointer variables should be initialized to 0. printf (“ address pointed by pointer = %u”. q = p. &px). q = a. printf (“address of the pointer = %u”. valid valid.10 Now execute the following printf statements and observe the results. printf (“content pointed by pointer = %d”. *px). printf(” address of x = %d “ . *q = NULL. hold only the address of the variable of same data type. The following are the illegal operations on pointers variables: Two pointer variables can not be added. Two pointer variables can be compared. The following operations can be performed on pointer variables: A pointer variable can be assigned the address of an ordinary variable or it can be a null pointer. int char float long int adds 2 for every increment adds 1 for every increment adds 4 for every increment adds 4 for every increment All the operations can be done on the value pointed by the pointer. Page 116 ©Copyright 2007. No other constant can be initialized to a pointer variable. Cognizant Technology Solutions. Pointer variable of a particular data type can. Pointer variable can not be multiplied or divided by a constant. Null or an address.

conventional array is declared and pointer variable can be made to point to the starting location of the array. Compiler treats the subscript as a relative offset from the beginning of the array. Pointers Pointer addressing is in the form of absolute addressing. *pv is the same as v[0]. *(pv+1) is the same as v[1]. ptr ++. p2 points to same array) Pointers and Arrays Arrays Array is used to store the similar data items in contiguous memory locations under single name. Array elements are accessed using pointer variable. The pointer variable is incremented to find the next element. ptr= &i. i=5. Array subscripting notation is converted to pointer notation during compilation. Array addressing is in the form of relative addressing. Exact location of the elements can be accessed directly by assigning the starting location of the array to the pointer variable.12: Pointer arithmetic int * ptr . Cognizant Technology Solutions. and so on.13: Pointer operations Legal operations p1 > p2 p1==p2 Illegal operations p1/p2 p1*p2 p1+p2 p1/5 p1+2 p1-p2 (if p1. All Rights Reserved C3: Protected . Pointer pointing to an array Initialization To initialize a pointer variable. let ptr = 1000 (location of i) ptr = 1002 (+2 for integers) increments the value of i by 1 ++*ptr or (*ptr)++ Example 15. so writing array subscripting expressions using pointer notation can save compile time. if v is an array. Thus. C treats the name of the array as if it is a pointer to the first element.Problem Solving and C Programming Example 15. Page 117 ©Copyright 2007.

Example 15.3. OR ptr_vble = array_name. Accessing address Example 15. 4.*(a+i)).5} ptr = a .3. Cognizant Technology Solutions. a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 5 ptr + 0 = 1000 ptr + 1 = 1002 ptr + 2 = 1004 ptr + 3 = 1006 ptr + 4 = 1008 *(ptr+0) *(ptr+1) *(ptr+2) *(ptr+3) *(ptr+4) = 1 = 2 = 3 = 4 = 5 Assume that array starts at location 1000 Pointers and Multi Dimensional Arrays As the internal representation of a multi dimensional array is also linear. OR pointer_variable = array_name.2. General Form: ptr_vble = &array_name [starting index1]…[starting indexn].4} .17 int a[2][2] = {1. *ptr .14 int a[5] = {1. All Rights Reserved C3: Protected . Page 118 ©Copyright 2007. Example 15. ptr = &a[0][0] . (ptr+i)).*(ptr+i)).Problem Solving and C Programming General Form: pointer_variable = &array_name [starting index].2. Assume that the array starts at location 1000 &a[0][0] = 1000 &a[0][1] = 1002 &a[1][0] = 1004 &a[1][1] = 1006 a[0][0] = 1 a[0][1] = 2 a[1][0] = 3 a[1][1] = 4 ptr+0 = 1000 ptr+1 = 1002 ptr+2 = 1004 ptr+3 = 1006 *(ptr+0) = 1 *(ptr+1) = 2 *(ptr+2) = 3 *(ptr+3) = 4 *ptr . displays address of a(i) displays the a[i] value displays the a[0] value displays the a[i] value .16 printf (“%u “. varies according to the dimension. The way in which the pointer variable used.15 printf (“%d “. a pointer variable can point to an array of any dimension. similar to ptr = &a[0].*ptr). i . printf (“%d “. &a[0] = 1000 &a[1] = 1002 &a[2] = 1004 &a[3] = 1006 &a[4] = 1008 Accessing value Example 15. printf (“%d “.

printf (“%d “.*(*(pa+i)+j)).18 printf (“%d “. a twodimensional array is defined as a pointer to a group of one dimensional array and in the same way three dimensional arrays can be represented by a pointer to a group of two dimensional arrays. jth column Accessing value Example 15. for (i=0.6}. is a collection of one dimensional array.Problem Solving and C Programming If the pointer to the array is accessed with 2 subscripts. The following representations are used when a pointer is pointing to a 2D array: ptr+i *(ptr+i) is a pointer to ith row. printf (“%d “.5.*(a + i)[ j ].j) value displays the x(i.*(a[ i ] + j). For example.actually a pointer to the first element in i th row.2. (*(ptr + i) +j) is a pointer to jth element in ith row *(*(ptr+i) + j)) refers to the content available in ith row.j) value displays the x(i. (p+0) + 1 (p+1) + 0 if it is used to represent 0th row and 1st column if it is used to represent 1st row and 0th column and results in p+1. multi dimensional arrays can be represented by pointer in the following two ways: Pointer to a group of arrays Array of pointers Pointer to a group of arrays A two dimensional array. Therefore. int *pa=&a[0][0].j) value Example 15.3.j++) printf(“\t%d”. for example. Page 119 ©Copyright 2007. refers to the entire row . int a[3][2] can be represented by a pointer as follows: int (*p)[2] p is a pointer points to a set of one dimensional array.19 main() { int i.4. displays the x(i.i++) { for (j=0.*(*(ptr + i) +j).i<2. a single pointer is used and it needs to know how many columns are there in a row. Note: First dimension need not be specified but the second dimension has to be specified.j<3. each with 2 elements. j. So. Cognizant Technology Solutions. All Rights Reserved C3: Protected . it results in a problem. int a[2][3]={1. Here.

the address of the array is assigned to this pointer.21 (1) (2) *p[3] (*p)[3] declares p as an array of 3 pointers declares p as a pointer to a set of one dimensional array of 3 elements Pointers and Strings Character pointer is a pointer. *ptr[2] . Page 120 ©Copyright 2007. We can declare a character pointer as follows: char *p = NULL. int a[2][2] can be represented as int *ptr[2] Here.4} .2. /* ptr[0] is now pointing to the 0th row ( & a[0][0]) */ ptr[1] = a[1]. Cognizant Technology Solutions. we have 2 pointers ptr[0]. } } Output: 1 4 2 5 3 6 Array of Pointers Multi dimensional array can also be expressed in terms of an array of pointers. /* ptr[1] is now pointing to the 1st row ptr[0] + 0 ptr[0] + 1 ptr[1] + 0 ptr[1] + 1 = 1000 = 1002 = 1004 = 1006 *(ptr[0] + 0) *(ptr[0] + 1) *(ptr[1] + 0) *(ptr[1] + 1) = = = = 1 2 3 4 ( & a[1][0]) */ Example 15. which can hold the address of a character variable. Thus. ptr[1] and each pointer can point to a particular row . Example 15.Problem Solving and C Programming printf(“\n”). it refers to the address of the 0th element.3. p = name.20 int a[2][2] = {1. only one indirection is enough to represent a particular element. ptr[0] = a[0]. When an array is referenced by its name. All Rights Reserved C3: Protected . if we have a character array declared as: char name[30] = {“Data Structures”}. Once the pointer is declared. Suppose.

Cognizant Technology Solutions. Pointer automatically gets incremented to the next location. The above printf statements produce the outputs as follows: Character output = D String output = Data Structures The reason for the output produced by the second printf statement is because of the %s format specifier.3} . it refers the content of the address pointed by the pointer variable. Conventional array declaration: char name[10][10]. string can be represented by either as a one-dimensional character array or a character pointer. Now issue the following printf statements and check the output: printf(“Character output = %c\n”. The above statement allocates variable length block of memory and occupies only 14 bytes. An array of character pointers offers a convenient method for storing strings.1. printf(“String output = %s”. This array occupies 30 bytes and the row length is fixed.2. Array of character pointers : char *name[10]. which will print the string till it encounters a ‘\0’ character. If the elements of array are string pointers. Character-type pointer variable can be assigned an entire string as a part of its variable declaration. *p). “ABC” . “xyz”}. *p). valid invalid Thus. char *p = “string” . Each pointer is used to represent a particular string. Ragged Arrays Consider the following array declaration. “ABCD”} . a set of initial values can be specified as part of the array declaration. “rstu”. int *p = {0. make it a pointer to a string of varying length.Problem Solving and C Programming The statement assigns the address of the 0th element to p. “AB” . All Rights Reserved C3: Protected . char names[3][10] = { “abcde”. When a pointer variable is referred with the indirection operator. An advantage is that a fixed block of memory need not be reserved in advance. It declares 4 Page 121 ©Copyright 2007. char *name[4] = { “A” . Instead of making each row a fixed number of characters.

Constant pointer to non-constant data always points to the same memory locations and the data at that location can be modified through the pointer. Arrays of this type are referred as Ragged arrays (used only in the initialization of string arrays). The value cannot be modified. Cognizant Technology Solutions. Pointer variable ‘pa’ can take any other address and value of ‘a’ can be changed using pointer even though it is constant variable. The following example explains the pointer variable to a constant variable: Example 15. Example 15. Constant Pointer The pointer variable can be a constant.Problem Solving and C Programming pointers each pointing to a string. int *pa = &a. /* suspicious pointer conversion. substantial saving in memory.22 (1) char *ps = “xyz”. string ‘s’ is stored in 4 bytes. *(name + 1) will access the string AB * (name + 2) will access the string ABC *(*(name + i) +j) refers the jth character in ith string *(*(name+3)+3) refers D in the string “ABCD” Memory organization – String Pointers Example 15.24 int a. In the above example. pointer ‘ps’ is stored in 2 bytes and ‘ps’ contains the address of the string that requires 4 bytes. Pointers variables that are declared ‘const’ must be initialized when they are declared. Page 122 ©Copyright 2007. A pointer variable can take the address of a non-constant data and constant data. Wise to avoid such assignments */ Variable ‘a’ is a constant variable. Thus. Constant pointer to constant data always points to the same memory location and the data at that memory location cannot be modified. Pointer to a constant The address of a constant variable can be assigned to a pointer variable. (2) char s[ ] = “xyz”.23 const int a=10. All Rights Reserved C3: Protected . int *const pa = &a.

getchar(). num2 += *pnum. But it is needed. All Rights Reserved C3: Protected . *pnum = 2. ++num2. printf ("\nnum1 = %ld num2 = %ld *pnum = %ld *pnum + num2 = %ld\n". Page 123 ©Copyright 2007.25 int b. *pnum.55. The generic pointer can be made to point any data type. Problem Statement: Write a program to change the value of variable through pointer Code: //Change value of variable through pointer #include <stdio.h> int main(void) { long num1 = 0.26 int a. pab=&a. Example 15. num1. *pnum + num2). long num2 = 0. long *pnum = NULL. pab=&b. Cognizant Technology Solutions. in order to know the size and value of the data item. float b. when dereferencing the content using void pointer. pnum = &num2. num2. Type casting is not needed during address assignment. *(int *) pab =100. pnum = &num1. Generic Pointer (void Pointer / Pointer to void) The type void * is used to declare generic pointers. ++*pnum. Try It Out 1. *(float *) pab = 105. const int * const pb = &b. void *pab.Problem Solving and C Programming Example 15.

Now the value at pnum is 4 and num2 is 4.c> to obtain soft copy of the program code How It Works: This program gives a hands-on on usage of pointer.num2. int i1=4.Problem Solving and C Programming return 0. #include <stdio. %16u %d\n".i5=0. printf("Address for(j=0. int *b.h> main(){ int *a[5]. now the value of num2 is 1. a[3]=&i4.value at pnum 2. Then the value of num1 is 2.j++) { printf("%16u a[j]. First two integer variable num1 and num2 and a pointer to an integer are declared. Page 124 ©Copyright 2007. Then assign the value of 2 to pnum. Address in array Value\n").j<5. Print all the values num1. Increment the value of num2. All Rights Reserved C3: Protected . a[4]=&i5. Then num2 equals the num2 _ value at pnum i. } Refer File Name: <sesh15_1.a[j]. the array elements is the pointer.i2=3. } printf("using pointer\n"). 1+2 = 3(value of num2) Assign the address of num2 to pnum and do increment of value at pnum.i4=1.i3=2. Problem Statement: Write a program to use array of pointers Code: //In the pointer array.e. Initialize num1 and num2 to 0 Assign the address of num1 to pointer pnum. a[1]=&i2.a[j]). a[2]=&i3. int j. a[0]=&i1. Cognizant Technology Solutions.

j<5. 2. } getchar(). There are two ways to represent multi dimensional arrays by means of pointers: o Single pointer points to set of arrays o Array of pointers Strings can easily be represented using pointer – Ragged arrays. free() function is used to de-allocate the memory. for( j=0.c> to obtain soft copy of the program code How It Works: This program explains the usage of array of pointers. State whether the following are true or false a. b++. Summary Pointer is a variable which can hold the address of another variable. Address of the memory location can be assigned to ordinary variables c. See the difference. Test your Understanding 1. malloc(). calloc() functions are used to allocate memory dynamically. All Rights Reserved C3: Protected . Declare five integer variable and and store their address in the array.*b. Pointer can point to an array of any dimensions. Pointer variable can only contain an address b.j++) { printf("value of elements %d %16lu\n".Problem Solving and C Programming b = a. Pointer can refer to the content of the memory location by & operator d. What is the use of generic pointers? Page 125 ©Copyright 2007. & operator is used to refer the address of a variable and * operator is used for dereferencing the pointer. } Refer File Name: <sesh15_2. Then print the value in the array by using array indices and using pointers. Declare an array of integer pointers. Cognizant Technology Solutions.b).*b. Each element of array is an pointer which holds the address of an integer varaiable. Size of the pointer variable is equivalent to the size of the data item it points.

Since c points to b. Generic pointers (void pointers) can point to data items of any type. b = (int *)**c. false. **c=5. n[24]=200. calloc(). Page 126 ©Copyright 2007. **c = &b. this statement is equivalent to assigning 5 to a.sizeof(str2). calloc() will both allocate the memory dynamically. } 4. Given the following declaration: int a. What is the output of the following code? main( ) { char *str1=”abcd”. printf("\n%d. 100. printf(“%d %d %d”. 300 4. sizeof(str1). The third statement castes **c. The first statement assigns 4 to a. n[0]=100. *n. false 2. char str2[]=”abcd”.Problem Solving and C Programming 3. this is same as assigning 5 to the location pointed to by b. What is the output of the following statements? a=4. } 6. 3. 5. *b = &a . because values cannot be assigned to pointers.%d". All Rights Reserved C3: Protected . sizeof(“abcd”)). True. Answers: 1. *(n+24)+*(n+0) ). 2 5 5 6. malloc(). What is the output of the following code? main() { int n[25]. The second statement assigns 5 to the location pointed to by the location pointed to by c. Since b points to a. 5. The result is meaningless. Differentiate malloc() . assign the value to a. but the difference is calloc() will return a contiguous memory location and initializes it to 0. false. which is value of a. into type int *. Cognizant Technology Solutions.

} /* will print 20 */ /* function prototype . a). change(p). you will be able to: How to use Pointers with functions How to use Pointers with structures How to implement Dynamic memory allocation in creating a linked lists. printf(‘’ %d ‘’ .Problem Solving and C Programming Session 17: Pointers Learning Objectives After completing this session.2: Function returning pointer main() { int *p .1: Passing pointers as argument main() { int a =5 . p =&a. Functions and Pointers Pointers can be passed to a function as arguments and a function can also return a pointer to the calling program. Cognizant Technology Solutions.function returning an integer pointer */ int *assign() Page 127 ©Copyright 2007. } void change(int *q) { *q = 10. /* pointer p is passed to a function – call by reference */ /* prints 10 */ printf(“ %d “ . int *assign() . All Rights Reserved C3: Protected . /* function prototype */ void change(int *). *p. *p) . } /* q is a pointer which will point to the memory location pointed by p */ Example 17. p = assign() . Example 17.

} int *big (int *x . else return (y). *p.. rather than an entire array. p = add. void (*p)(int x. } It is possible to pass a portion of an array. x + y). General Form: return-type (* function_pointer_name)(argument list. makes the pointer to point to the function add() Note: function name specifies the starting address.) Suppose we have a function as. main() { int a=10. int y).3: Function receiving pointers and returning pointer int *big (int * .Problem Solving and C Programming { int a . printf (“%d”. which will speeds up the execution. All Rights Reserved C3: Protected . int y) { printf(“Value = %d”. int *). /* addr. *q = &a. of a is returned */ /* addr. void add(int x. Function Pointer Function will also have a memory address like other variables.*p). } Example 17. } Pointer to this function is declared as. b=20. So. *q = 20 . ‘p’ is a pointer which can point to a function having two integer arguments and returning an integer value. of b is returned */ /* address of the variable a or b will be stored in p */ Page 128 ©Copyright 2007. we can have a pointer variable to point to the starting location of a function and can execute the function by means of the pointer variable. p = big (&a. return q . &b). to a function using pointers. int *y) { if (*x > *y) return (x). Cognizant Technology Solutions.

(*abc)(). Cognizant Technology Solutions. which can hold an address of a variable of the type ‘student’. char name[20]. will call the function add() with parameters 10.67}.6 struct stud { int rollnum. /* calling the function by function pointer */ } void abc() { printf(“function”). *ptr . To make ‘ptr’ to point to the structure ‘student’. 95. float avg.Problem Solving and C Programming (*p)(10. func_ptr = display. In this declaration.20 /*invokes the function display */ Example 17. Example 17. (*func_ptr) (). It will be useful when an entire structure is passed to a function via call by reference. int (*func_ptr) ().20). ‘ptr’ is a pointer type variable. Example 17. Page 129 ©Copyright 2007. we can write as ptr = &student.4 int display(). struct stud student={101. Pointer declaration to a structure is as follows: struct student *ptr. } Output: functionfunction Structures and Pointers Structure variable can be declared as pointers. 1. }. abc(). All Rights Reserved C3: Protected .5 main() { void abc().”raja”. int semester.

arrays can be represented in terms of pointers and an initial memory location can be allocated to pointer variable by means of this memory allocation functions. and then release this memory when it is no longer required. int *p. float salary. ptr->semester. char gender. Dynamic Memory Allocation Conventional arrays are static in nature. ptr->name. Thus. It is used to build various kinds of linked data structures. p = (int *) malloc ( 10 * sizeof(int)) . C supports dynamic memory allocation through the following functions: malloc(). because size has to be mentioned in the declaration statement itself and fixed block of memory is reserved during the compilation.8 struct employee { char name[20]. Cognizant Technology Solutions. ptr->avg). Self-Referential structures A structure containing a member that is a pointer to the same structure type is called selfreferential structures. Page 130 ©Copyright 2007. memberfieldname (OR) pointer -> memberfieldname Example 17. Example 17. free() These functions provides the ability to reserve as much memory as may required during program execution. calloc () . struct employee *empptr. ptr->rollnum.Problem Solving and C Programming Accessing a member through pointer variable The notation for referring a member field of a structure pointed by a pointer is as follows: (*pointer). All Rights Reserved C3: Protected .7 printf(“ %d \t %s \t %d \t %f “.

/* memory is allocated to individual pointers */ b[i] = (int *)malloc( 3 * sizeof(int)). c[i] = (int *)malloc( 3 * sizeof(int)). printf("\n enter the values of second matrix"). for(i=0. i<3. Example 17. j++) printf("\t%d". sizeof(int)). *b[3] . The starting address is pointed by the pointer ‘p’. i<3. free() will take a void pointer. for(i=0. j++) scanf("%d". j<3. j++) scanf("%d". int i. i++) for(j=0. j++) *(c[i]+j) = *(a[i]+j) + *(b[i]+j). A one dimensional dynamic array can be declared using pointers as follows: int *p. a[i]+j). for(i=0 . This can be used to allocate space for arrays and structures. i<3. i<3. This will return 10 continuous memory blocks of 2 bytes each and initializes them to 0. *(c[i]+j)). i<3. for(i=0. b[i]+j). for(i=0. which can hold 10 integers. p = (int *) calloc (10. } printf(" \n enter the values of matrix 1 \n").Problem Solving and C Programming The above program constructs will return memory block of 20 bytes. i++ for(j=0. i++) for(j=0. j<3. j<3. All Rights Reserved C3: Protected .j. } Page 131 ©Copyright 2007. free(p) will release the memory pointed by a pointer variable ‘p’. Cognizant Technology Solutions. j<3. i++) { a[i] = (int *)malloc( 3 * sizeof(int)). *c[3].9: Program for adding two matrices using array of pointers void main() { int *a[3] . i++) for(j=0.

beyond 3 levels. printer. To access the value we can use either **p2 or Advantages It gives direct control over memory and thus we can play around with memory by all possible means. it will provide enhanced performance Pass by reference is possible only through the usage of pointers. it makes the program difficult to understand and may cause the illegal memory references *p1 addr. int **p.*p1. it cause memory leakages If not used properly. video memory.ptr1 value int x.**p2.10 addr. Page 132 ©Copyright 2007. For example. represents 2 dimensional array In the above declaration p is a pointer variable.Problem Solving and C Programming Chain of Pointers Multi dimensional arrays can be declared using pointer to pointer representation and memory can be allocated dynamically. Cognizant Technology Solutions. Example 17. All Rights Reserved C3: Protected . The following declaration is perfectly valid: int *****p. However. Useful while returning multiple values from a function Allocation and freeing of memory can be done wherever required and need not be done in advance(Dynamic Memory Allocation) Limitations If the allocated memory is not freed properly. we can refer to any part of the hardware like keyboard. there is no restriction imposed by the compiler as to how many levels we can go about in using a pointer.ptr2 x=100. As such. it will make the code highly complex and un-maintainable. p2=&p1. p1=&x. etc directly As working with pointers is like working with memory. which holds the address of another integer pointer.

declare a variable using card structure and pointer variable pointing to card structure. getchar(). aCard.face.suit ). return 0.c> to obtain soft copy of the program code How It Works: Declare a structure card having face and suit as two pointers to char. All will print the same. Cognizant Technology Solutions. aCard. Problem Statement: Write a program to access structure using pointers Code: #include <stdio. ( *cardPtr ).h> struct card { char *face. " of ".suit = "Spades". int main() { struct card aCard. cardPtr->face.Problem Solving and C Programming Try It Out 1. printf( "%s%s%s\n%s%s%s\n%s%s%s\n".face = "Ace".face. } Refer File Name: <sesh17_1. cardPtr->suit. char *suit. Print the values of card structure in three different forms.suit. ( *cardPtr ). Assign the values of face and suit of card structure. In the main program. " of ". struct card *cardPtr. aCard. cardPtr = &aCard. " of ". }. All Rights Reserved C3: Protected . Page 133 ©Copyright 2007. aCard.

temp = p. printf("The data values in the list are\n"). struct node *link. struct node *insert(struct node *p. exit(0). while (temp-> link != p) temp = temp-> link. if(p!= NULL) Page 134 ©Copyright 2007. }. if(p==NULL){ p=(struct node *)malloc(sizeof(struct node)). temp-> link = p. if(p==NULL) { printf("Error\n"). exit(0). if(temp -> link == NULL){ printf("Error\n"). int n){ struct node *temp.h> # include <stdlib. } void printlist ( struct node *p ) { struct node *temp. Problem Statement: Write a program to insert values in a linked list Code: # include <stdio.h> struct node { int data. temp-> data = n. temp-> link = (struct node *)malloc(sizeof(struct node)). } return (p).Problem Solving and C Programming 2. Cognizant Technology Solutions. All Rights Reserved C3: Protected . p-> link = p. } temp = temp-> link. } else { temp = p. } p-> data = n.

start = insert ( start. int x. Then allocate memory and assign data as 2 and link pointing to the same pointer p. In the main program. printf("The created list is\n"). 1 ). Then returns the pointer back. printlist ( start ). 4 ). Cognizant Technology Solutions. declare a pointer variable start pointing to struct node and initialize to NULL. getchar().as it is first time. 2). start = insert ( start. Then returns back the pointer.Problem Solving and C Programming { do { printf("%d\t". start = insert ( start. again insert() function is called with the returned pointer from previous call and the value as 2. Page 135 ©Copyright 2007. so it will allocate memory and assign the value of data as 1 and the link pointing to the same pointer p. 3 ). } Refer File Name: <sesh17_2. In the insert function. struct node *start = NULL .c> to obtain soft copy of the program code How It Works: Declare a structure node with data as the one of the member and the link as the other member which is a pointer to same structure which will hold the address of next node. temp=temp->link. In the main program. } void main() { int n. so it goes to the else part and traverse the linked list till the last node. Now the start pointer is not NULL. } else printf("The list is empty\n"). All Rights Reserved C3: Protected .temp->data). the start pointer will be NULL. start = insert ( start. } while (temp!= p). Call a function insert() and pass the start pointer and the value 1 as argument to the function.

Cognizant Technology Solutions. calloc() functions are used to allocate memory dynamically. & operator is used to refer the address of a variable and * operator is used for dereferencing the pointer.Problem Solving and C Programming Same is continued for next two insert function call. **c = &b. using do while loop traverse through the linked list and print all the values. malloc(). Summary Pointer is a variable which can hold the address of another variable. There are two ways to represent multi dimensional arrays by means of pointers: o Single pointer points to set of arrays o Array of pointers Strings can easily be represented using pointer – Ragged arrays. In the printlist() function. Test your Understanding 1. Now four data’s has been inserted in to the linked list. Pointer variable can only contain an address b. In the main program call the printlist() function to print all the data in the linked list. *b = &a . All Rights Reserved C3: Protected . Address of the memory location can be assigned to ordinary variables c. Pointer can point to an array of any dimensions. free() function is used to de-allocate the memory. What is the use of generic pointers? 3. Pointer can refer to the content of the memory location by & operator d. n[24]=200. *n. } 4. 2. *(n+24)+*(n+0) ). What is the output of the following code? main() { int n[25]. b = (int *)**c. State whether the following are true or false a. n[0]=100. Page 136 ©Copyright 2007. What is the output of the following statements? a=4. **c=5. Given the following declaration: int a. Size of the pointer variable is equivalent to the size of the data item it points.%d". printf("\n%d.

300 4. Generic pointers (void pointers) can point to data items of any type. Differentiate malloc() . The result is meaningless. Answers: 1. The second statement assigns 5 to the location pointed to by the location pointed to by c. All Rights Reserved C3: Protected . printf(“%d %d %d”. but the difference is calloc() will return a contiguous memory location and initializes it to 0. because values cannot be assigned to pointers. Since b points to a. Cognizant Technology Solutions. 3. this is same as assigning 5 to the location pointed to by b. Since c points to b. } 6. char str2[]=”abcd”.Problem Solving and C Programming 5. sizeof(str1). The first statement assigns 4 to a. 2 5 5 6. calloc() will both allocate the memory dynamically. false. malloc(). calloc(). What is the output of the following code? main( ) { char *str1=”abcd”. Page 137 ©Copyright 2007. this statement is equivalent to assigning 5 to a. assign the value to a. false. True. 5. 100.sizeof(str2). into type int *. false 2. The third statement castes **c. which is value of a. sizeof(“abcd”)).

All Rights Reserved C3: Protected . #endif #ifdef.: : : ) type name main() { declarations statements } type fnc(arg1. #ifndef name defined? line continuation char include library file include user file name text replacement text text replacement macro Example.: : : ) { declarations statements return value.B) ((A)>(B) ? (A) : (B)) undefine quoted string in replace concatenate args and rescan conditional execution is name defined. } /* */ main(int argc. #elif. #define max(A. Cognizant Technology Solutions. #else. char *argv[]) exit(arg) C Preprocessor #include <filename> #include "filename" #define #define name(var) #undef name # ## #if. not defined? defined(name) \ function declarations external variable declarations main routine local variable declarations function definition local variable declarations comments main with args terminate execution Page 138 ©Copyright 2007.Problem Solving and C Programming Syntax Summary Program Structure/Functions type fnc(type1.

\" "abc: : : de" type name=value type name[]={value1.: : : } char name[]="string" char int float double short long signed unsigned *int.Problem Solving and C Programming Data Types/Declarations character (1 byte) integer float (single precision) float (double precision) short (16 bit integer) long (32 bit integer) positive and negative only positive pointer to int. \. float enumeration constant constant (unchanging) value declare external variable register variable local to source file no value structure create name by data type t size of an object (type is size_t) size of a data type (type is size_t) Initialization initialize variable initialize array initialize char string Constants long (suffix) float (suffix) exponential form octal (prefix zero) hexadecimal (prefix zero-ex) character constant (char. All Rights Reserved C3: Protected . tab. \t. \b \\. ‘\ooo’. hex) newline. ‘\xhh’ \n. \r. Cognizant Technology Solutions. *float enum const extern register static void struct typedef typename sizeof object sizeof(type name) Page 139 ©Copyright 2007. backspace special characters string constant (ends with \0) L or l F or f e 0 0x or 0X ‘a’. octal. \?. cr.

!. modulus (remainder) add. divide. != & ^ | && structure template declaration of members type *name *f() (*pf)() void * NULL *pointer &name name[dim] name[dim1][dim2]….x and p->x are the same union member : b Operators (grouped by precedence) structure member operator structure pointer increment. Arrays & Structures declare pointer to type declare function returning pointer to type type declare pointer to function returning type type generic pointer type null pointer object pointed to by pointer address of object name array multi-dim array Structures struct tag { declarations }. &name (type) expr sizeof *. struct tag name name. logical not. -+. minus. <<. -. ~ *pointer. <= ==. >> >.member pointer -> member Ex. /. address of object cast expression to type size of an object multiply. create structure member of structure from template member of pointed to structure single value. >=. subtract left. % +. (*p). decrement plus. right shift [bit ops] comparisons comparisons bitwise and bitwise exclusive or bitwise or (incl) logical and name.member pointer->member ++. Cognizant Technology Solutions.Problem Solving and C Programming Pointers. bitwise not indirection via pointer. multiple type structure bit field with b bits Page 140 ©Copyright 2007. All Rights Reserved C3: Protected . <.

for Next iteration of while. for go to Label Return value from function Flow Constructions if statement .h> <stdio.Problem Solving and C Programming logical or conditional expression assignment operators expression evaluation separator || expr1 ? expr2 : expr3 +=. *=. default: statement } ANSI Standard Libraries <assert. Flow of Control Statement terminator Block delimiters Exit from switch. All Rights Reserved C3: Protected .h> <float. …… . all others group left to right.h> <setjmp. expr3) statement do statement while(expr ).h> <stddef.h> <time. {} break continue goto label label: return expr while statement for statement do statement switch statement if (expr) statement else if (expr) statement else statement while (expr) statement for (expr 1. conditional expression and assignment operators group right to left. Unary operators.h> <limits.h> <locale.h> Page 141 ©Copyright 2007.h> <signal. Cognizant Technology Solutions.h> <stdarg.h> <errno.h> <ctype.h> <string. do. while. switch (expr) { case const1: statement1 break.h> <stdlib. -=.h> <math. case const2: statement2 break. do. expr2.

n) strcmp(cs.c. cr.ct.n) strcat(s. t are strings and cs.c) memcpy(s.n) memmove(s.ct) strncmp(cs.c. tab.c) strrchr(cs.n) memset(s. Cognizant Technology Solutions.ct.n) memcmp(cs.n) strchr(cs.h> Consider s. vtab Checks whether c is a upper case letter Checks whether c is a hexadecimal digit Convert c to lower case Convert c to upper case String Operations <string.Problem Solving and C Programming Character Class Tests <ctype.n) Functionalities Returns the length of s Copies ct to s Copies up to n chars to s Concatenate ct after s Concatenate up to n chars Compares cs to ct Compares only first n chars Pointer to first c in cs Pointer to last c in cs Copy n chars from ct to s Copy n chars from ct to s (may overlap) Compare n chars of cs with ct Pointer to first c in first n chars of cs Put c into first n chars of cs Page 142 ©Copyright 2007.h> Functions isalnum(c) isalpha(c) iscntrl(c) isdigit(c) isgraph(c) islower(c) isprint(c) ispunct(c) isspace(c) isupper(c) isxdigit(c) tolower(c) toupper(c) Functionalities Checks whether c is alphanumeric Checks whether c is alphabetic Checks whether c is a control character Checks whether c is a decimal digit Checks whether c is a printing character (not incl space) Checks whether c is a lower case letter Checks whether c is a printing character (incl space) Checks whether c is a printing char except space.ct. letter. form feed.ct) strncpy(s. newline. All Rights Reserved C3: Protected . ct are constant strings Functions strlen(s) strcpy(s.ct.ct. digit Checks whether c is a Space.ct) strncat(s.n) memchr(cs.ct.

Problem Solving and C Programming

Input/Output <stdio.h> Standard I/O Standard input stream Standard output stream Standard error stream End of file Get a character Print a character Print formatted data Print to string s Read formatted data Read from string s Read line to string s (< max chars) Print string s File I/O Declare file pointer Pointer to named file Get a character Write a character Write to file Read from file Close file Non-zero if error Non-zero if EOF Read line to string s (< max chars) Write string s FILE *fp fopen("name","mode") Where modes: r (read), w (write), a (append) getc(fp) putc(chr ,fp) fprintf(fp,"format",arg 1,: : : ) fscanf(fp,"format",arg 1,: : : ) fclose(fp) ferror(fp) feof(fp) fgets(s,max,fp) fputs(s,fp) stdin stdout stderr EOF getchar() putchar(chr ) printf("format ",arg 1,..) sprintf(s,"format ",arg 1,… ) scanf("format ",&name1,… ) sscanf(s,"format ",&name1,…. ) gets(s,max) puts(s)

Page 143 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Codes for Formatted I/O: + Space 0 w p m h c

"%-+ 0w:pmc" left justify print with sign print space if no sign pad with leading zeros min field width precision conversion character: short, l long, L long double conversion character: d,i integer u unsigned c single char s char string f double e,E exponential o octal x,X hexadecimal p pointer n number of chars written g,G same as f or e,E depending on exponent

Standard Utility Functions <stdlib.h> Function Type Absolute value of int n Absolute value of long n Quotient and remainder of ints n,d Quotient and remainder of longs n,d Pseudo-random integer [0,RAND_MAX] Set random seed to n Terminate program execution Pass string s to system for execution abs(n) labs(n) div(n,d) returns structure with div_t.quot and div_t.rem ldiv(n,d) returns structure with ldiv_t.quot and ldiv_t.rem rand() srand(n) exit(status) system(s) Functions

Page 144 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

Problem Solving and C Programming

Conversions Function Type Convert string s to double Convert string s to integer Convert string s to long Convert prefix of s to double Convert prefix of s (base b) to long Convert prefix of s (base b) to unsigned long Storage Allocation Function Type Allocate storage Change size of object Deal locate space Mathematical Functions <math.h> Arguments and returned values are double Function Type Trig functions Inverse trig functions a Arctan (y/x) Hyperbolic trig functions Exponentials and logs Exponentials and logs (2 power) Division and remainder Powers Rounding Functions sin(x), cos(x), tan(x) sin(x), acos(x), atan(x) atan2(y,x) sinh(x), cosh(x), tanh(x) exp(x), log(x), log10(x) ldexp(x,n), frexp(x,*e) modf(x,*ip), fmod(x,y) pow(x,y), sqrt(x) ceil(x), floor(x), fabs(x) Functions malloc(size), calloc(nobj,size) realloc(pts,size) free(ptr) atof(s) atoi(s) atol(s) strtod(s,endp) strtol(s,endp,b) strtoul(s,endp,b) Functions

Page 145 ©Copyright 2007, Cognizant Technology Solutions, All Rights Reserved C3: Protected

x. then the precision argument. Note: when using the * with the width and/or precision specifier. u. If the value overflows the width of the field. then the next argument (which must be an int type) specifies the width of the field.Problem Solving and C Programming Conversion Specifier for ‘printf’ statement A conversion specifier begins with the % character. i. Flags: + Value is left justified (default is right justified). Page 146 ©Copyright 2007. the width argument comes first.precision] Defines the amount of precision to print for a number type (optional). Width: The width of the field is specified here with a decimal value. g. # Alternate form: Conversion Character Result o X or x E. Result will always have a decimal point. This is useful only with a width specifier. then the rest of the field is padded with spaces (unless the 0 flag is specified). [. e. and G leading zeros are used to pad the field width instead of spaces.sign. g. If the value is not large enough to fill the width. Negative values still show the sign. Nonzero value will have 0x or 0X prefixed to it. then the field is expanded to fit the value. For d. e. Default is to just show the . f. After the % character come the following in this order: [flags] [width] Control the conversion (optional). Overrides the space flag. X. Overrides the 0 flag. Trailing zeros will not be removed. then the value to be converted. o. space Causes a positive value to display a space for the sign. E. Precision overrides this flag. The type of conversion to be applied (required). f. or G G or g 0 Precision is increased to make the first digit a zero. [modifier] [type] Overrides the size (type) of the argument (optional). If a * is used in place of the width specifer. Defines the number of characters to print (optional). All Rights Reserved C3: Protected . Forces the sign (+ or -) to always be shown. Cognizant Technology Solutions.

For s type all characters in string are print up to but not including the null character. Note: when using the * with the width and/or precision specifier. G Specifies that the pointer points to a long int. X Value is first converted to a short int or unsigned short i nt. [. For g or G types the precision is assumed to be 1. or . E types specifies the number of digits after the decimal point. For f. u. For g or G types specifies the number of significant digits to print. g. o. All Rights Reserved C3: Protected . n e. then the precision argument. [modifier] h h l l L [type] Effect d. x. then the value to be converted. u. i. the width argument comes first. f. 6 for f. i. X types the default precision value is used unless the value is zero in which case no characters are printed. If a * is used. Cognizant Technology Solutions.precision] (none) Default precision values: Result 1 for d. o. The precision can be given as a decimal value or as an asterisk (*). Precision does not affect the c type.0 For d. n Specifies that the pointer points to a short int.n Modifier: A modifier changes the way a conversion specifier type is interpreted. u. . Page 147 ©Copyright 2007. For s type specifies the maximum number of characters to print. then the next argument (which is of an int type) specifies the precision. o. i. u. . x. o. For d. o. E types. For g or G types all significant digits are shown. x. e. Specifies the number of digits after the decimal point. u.) to distinguish itself from the width specifier. E. e. X types. Value is first converted to a long double. d. X Value is first converted to a long int or unsigned long int . i. x. x.Problem Solving and C Programming Precision: The precision begins with a dot (. For f. X types then at least n digits are printed (padding with zeros if necessary). i. e. The minimum number of digits to appear. E types no decimal point character or digits are printed.

b. All Rights Reserved C3: Protected . c. e. F. Type unsigned int printed in decimal. Type double printed as [-]ddd. String is printed according to precision (no precision prints entire string). Output Type unsigned int printed in hexadecimal as dddd using a. The exponent contains at least two digits. d. E Type signed int. C. f. Type double printed as [-]d. Cognizant Technology Solutions.dddeñdd where there is one digit printed before the decimal (zero only if the value is zero). Prints the value of a pointer (the memory location it holds). Type char. [type] d. i o u x X f e. G c s p n % Conversion specifier for ‘fscanf()’ An input field is specified with a conversion specifier which begins with the % character.ddd. Type unsigned int printed in octal. B. A % sign is printed. No characters are printed. Type double printed as type e or E if the exponent is less than -4 or greater than or equal to the precision. If type is E then the exponent is printed with a capital E. Decimal point character appears only if there is a nonzero decimal digit. [type] The type of conversion to be applied (required). The argument must be a pointer to an int. Type unsigned int printed in hexadecimal as dddd using A. E. Otherwise printed as type f. Defines the maximum number of characters to read (optional). Stores the number of characters printed thus far in the int. D.Problem Solving and C Programming Conversion specifier type: The conversion specifier specifies what type the argument is to be treated as. Single character is printed. [modifier] Overrides the size (type) of the argument (optional). g. After the % character come the following in this order: [*] [width] Assignment suppressor (optional). Trailing zeros are removed. Page 148 ©Copyright 2007. Type pointer to array.

tab. All Rights Reserved C3: Protected . Digits 0 through 9 or A through Z or a through z. Digits 0 through 9 and the sign (+ or -). If the input is smaller than the width specifier (i. or form feed). Then one or more digits. g e. then it is base 8 (octal). The argument is a double. u. g Specifies that the pointer points to a long int. Modifier: A modifier changes the way a conversion specifier type is interpreted. then it is base 10. Type float. vertical tab. Inputs a sequence of non-white space characters (space. E. The input must be in base 8 (octal). Finally ended with an optional signed exponent value g. carriage return.e. Digits 0 through 9 only. If the first character is a digit from 1 to 9. then it is base 16 (hexadecimal). X e. The array must be large enough to hold the sequence plus a null character appended to the end. o u x. n e. x The argument is a long int or unsigned long int . Type signed int. The input must be in base 10 (decimal). i. then what was read thus far is converted and stored in the variable. f. The argument is a long double. o. Begins with an optional sign. it reaches a nonconvertible character).< /td> n Specifies that the pointer points to a short int. u. Digits 0 through 7 only. o. Type unsigned int. s Type character array. d. followed by an optional decimal-point and decimal value. i. f. It also controls what a valid convertible character is (what kind of characters it can read so it can convert to something compatible). Cognizant Technology Solutions. new line. Width: The maximum width of the field is specified here with a decimal value. If the first digit is a zero and the second character is an x or X. f. x The argument is a short int or unsigned short int. [type] d i Input Type signed int represented in base 10. [modifier] h h l l l L [type] Effect d. Page 149 ©Copyright 2007. If the first digit is a zero and the second digit is a digit from 1 to 7. Type unsigned int. The base (radix) is dependent on the first two characters. Type unsigned int. G designated with an e or E. The characters 0x or 0X may be optionally prefixed to the value. Conversion specifier type: The conversion specifier specifies what type the argument is. The input must be in base 16 (hexadecimal).Problem Solving and C Programming Assignment suppressor: Causes the input field to be scanned but not stored in a variable.

If no width field is specified. Allows a search set of characters.] Input Type character array. No characters are read from the input stream. Type character array. Requires a matching % sign from the input. Inputs the number of characters specified in the width field. Allows input of only those character encapsulated in the brackets (the scan set). Cognizant Technology Solutions. c p n % Page 150 ©Copyright 2007. A null character is appended to the end of the array. then the scan set is inverted and allows any ASCII character except those specified between the brackets. On some systems a range can be specified with the dash character (-). By specifying the beginning character.Problem Solving and C Programming [type] [. No null character is appended to the array. and an ending character a range of characters can be included in the scan set.. The argument must be a pointer to an int. If the first character is a carrot (^). Stores the number of characters read thus far in the int.. a dash. Inputs a memory address in the same fashion of the %p type produced by the printf function. Pointer to a pointer. then 1 is assumed. All Rights Reserved C3: Protected .

se/c/bwk-tutor.liu. All Rights Reserved C3: Protected .Dromey.acm. Eastern Economy Edition Al Kelley.bell-labs. “How to solve it by Computer”. Third Edition.edu/webmonkeys/book/c_guide/ Books Deitel & Deitel.uiuc. Fourth Edition.Problem Solving and C Programming References Websites http://refcards.G. “A Book on C”. “Programming in C”. Tata McGraw Hill R.com/cm/cs/who/dmr/chist.html http://www. Ira Pohl.html#introduction http://www.com/refcards/c/c-refcard-letter. Prentice Hall Byron Gottfried. Cognizant Technology Solutions.pdf http://cm. “C How to Program”.lysator. Pearson Education Asia Page 151 ©Copyright 2007.

Problem Solving and C Programming STUDENT NOTES: Page 152 ©Copyright 2007. All Rights Reserved C3: Protected . Cognizant Technology Solutions.

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master Your Semester with a Special Offer from Scribd & The New York Times

Cancel anytime.