Programming in C and Data Structures                                               Module 3
FUNCTIONS
 A function as series of instructions or group of statements with one specific purpose.
 A function is a program segment that carries out some specific, well defined task.
 A function is a self contained block of code that performs a particular task.
4.1 Types of functions
 C functions can be classified into two types,
   1. Library functions /pre defined functions /standard functions /built in functions
   2. User defined functions
1. Library functions /pre defined functions /standard functions/Built in Functions
 These functions are defined in the library of C compiler which are used frequently in
   the C program.
 These functions are written by designers of c compiler.
 C supports many built in functions like
      Mathematical functions
      String manipulation functions
      Input and output functions
      Memory management functions
      Error handling functions
 EXAMPLE:
      pow(x,y)-computes xy
      sqrt(x)-computes square root of x
      printf()- used to print the data on the screen
      scanf()-used to read the data from keyboard.
2. User Defined Functions
 The functions written by the programmer /user to do the specific tasks are called user
   defined function(UDF’s).
 The user can construct their own functions to perform some specific task. This type of
   functions created by the user is termed as User defined functions.
                   Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                19
Programming in C and Data Structures                                                      Module 3
4.2 Elements of User Defined Function
The Three Elements of User Defined function structure consists of :
      1. Function Definition
      2. Function Declaration
      3. Function call
1. Function Definition:
       A program Module written to achieve a specific task is called as function definition.
       Each function definition consists of two parts:
       i.     Function header
      ii.     Function body
            General syntax of function definition
  Function Definition Syntax                              Function Definition Example
  datatypefunctionname(parameters)                        void add()
  {                                                       {
              declaration part;                                  int sum,a,b;
              executable part;                                   printf(“enter a and b\n”);
              return statement;                                  scanf(“%d%d”,&a,&b);
                                                                 sum=a+b;
                                                                 printf(“sum is %d”,sum);
  }                                                       }
 i.         Function header
            Syntax
      datatype functionname(parameters)
       It consists of three parts
            a) Datatype:
                  The data type can be int,float,char,double,void.
                  This is the data type of the value that the function is expected to return to
                     calling function.
            b) functionname:
                  The name of the function.
                       Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                    20
Programming in C and Data Structures                                                   Module 3
                 It should be a valid identifier.
          c) parameters
                 The parameters are list of variables enclosed within parenthesis.
                 The list of variables should be separated by comma.
          Ex: void add( int a, int b)
       In the above example the return type of the function is void
         the name of the function is add and
       The parameters are 'a' and 'b' of type integer.
ii.       Function body
       The function body consists of the set of instructions enclosed between { and } .
       The function body consists of following three elements:
          a) declaration part: variables used in function body.
          b) executable part: set of Statements or instructions to do specific activity.
          c) return : It is a keyword,it is used to return control back to calling function.
                      If a function is not returning value then statement is:
                                                     return;
                      If a function is returning value then statement is:
                                                return value;
      2. Function Declaration
       The process of declaring the function before they are used is called as function
          declaration or function prototype.
           function declaration Consists of the data type of function, name of the function
             and parameter list ending with semicolon.
              Function Declaration Syntax
              datatypefunctionname(type p1,type p2,………type pn);
              Example
              int       add(int a, int b);
              void      add(int a, int b);
            Note: The function declaration should end with a semicolon ;
                     Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                  21
Programming in C and Data Structures                                                 Module 3
3. Function Call:
        The method of calling a function to achieve a specific task is called as function
             call.
        A function call is defined as function name followed by semicolon.
        A function call is nothing but invoking a function at the required place in the
             program to achieve a specific task.
       Ex:
       void main()
       {
                add( ); // function call without parameter
       }
   4.3 Formal Parameters and Actual Parameters
      Formal Parameters:
    The variables defined in the function header of function definition are called
       formal parameters.
       All the variables should be separately declared and each declaration must be
       separated by commas.
    The formal parameters receive the data from actual parameters.
      Actual Parameters:
    The variables that are used when a function is invoked)in function call) are called
       actual parameters.
       Using actual parameters, the data can be transferred from calling function.
       to the called function.
    The corresponding formal parameters in the function definition receive them.
    The actual parameters and formal parameters must match in number and type of
       data.
                     Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                  22
Programming in C and Data Structures                                                        Module 3
      Differences between Actual and Formal Parameters
               Actual Parameters                        Formal Parameters
  Actual parameters are also called as Formal                parameters      are     also
  argument list.                                 called as dummy parameters.
  Ex: add(m,n)                                   Ex:int add(int a, int b)
  The variables used in function call are The variables defined in function
  called as actual parameters                    header      are    called         formal
                                                 parameters
  Actual parameters are used in calling Formal parameters are used in
  function when a function is called or the function header of a called
  invoked                                        function.
  Ex: add(m,n)                                   Example:
  Here,    m   and    n   are   called   actual int add(int a, int b)
  parameters                                     { ………..
                                                 }
                                                 Here, a and b are called formal
                                                 parameters.
  Actual parameters sends data to the Formal parameters receive data
  formal parameters                              from the actual parameters.
  Example:
4.4    Categories of the functions
       1. Function with no parameters and no return values
       2. Function with no parameters and return values.
       3. Function with parameters and no return values
       4. Function with parameters and return values
1. Function with no parameters and no return values
                   Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                23
Programming in C and Data Structures                                                 Module 3
1. Function with no parameters and no return values
    (void function without parameter)
Calling function                                 Called function
/*program to find sum of two numbers
using function*/
#include<stdio.h>                                void add ( )
void add( );                                     {
void main( )                                            int sum;
{                                                       printf(“enter a and b values\n”);
       add( );                                          scanf(“%d%d”,&a,&b);
}                                                       sum=a+b;
                                                        printf(“\n The sum is %d”, sum);
                                                        return;
                                                 }
 In this category no data is transferred from calling function to called function,
    hence called function cannot receive any values.
 In the above example,no arguments are passed to user defined function add( ).
 Hence no parameter are defined in function header.
 When the control is transferred from calling function to called function a ,and b
    values are read,they are added,the result is printed on monitor.
 When return statement is executed ,control is transferred from called function/add
    to calling function/main.
                   Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                24
Programming in C and Data Structures                                                 Module 3
2. Function with parameters and no return values
    (void function with parameter)
Calling function                                     Called function
/*program to find sum of two numbers
using function*/
#include<stdio.h>
void add(int m, int n);
void main()                                                 void add(int a, int b)
{                                                           {
       int m,n;                                                   int sum;
       printf(“enter values for m and n:”);                       sum = a+b;
       scanf(“%d %d”,&m,&n);                                      printf(“sum is:%d”,sum);
       add(m,n);                                                   return;
}                                                           }
 In this category, there is data transfer from the calling function to the called
    function using parameters.
 But there is no data transfer from called function to the calling function.
 The values of actual parameters m and n are copied into formal parameters a and b.
 The value of a and b are added and result stored in sum is displayed on the screen
    in called function itself.
                   Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                25
Programming in C and Data Structures                                                       Module 3
3. Function with no parameters and with return values
Calling function                                        Called function
/*program to find sum of two numbers
using function*/
       #include<stdio.h>                                int add( ) /* function header */
       int add();
                                                        {
       void main()
       {                                                       int a,b,sum;
                int result;                                    printf(“enter values for a and
                result=add( );                                 b:”);
                printf(“sum is:%d”,result);                    scanf(“%d %d”,&a,&b);
       }                                                       sum= a+b;
                                                               return sum;
                                                        }
    In this category there is no data transfer from the calling function to the
       called function.
          But, there is data transfer from called function to the calling function.
    No arguments are passed to the function add( ). So, no parameters are defined in
       the function header
    When the function returns a value, the calling function receives one value from
       the called function and assigns to variable result.
    The result value is printed in calling function.
                      Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                   26
Programming in C and Data Structures                                                      Module 3
4. Function with parameters and with return values
Calling function                                       Called function
/*program to find sum of two numbers
using function*/
      #include<stdio.h>
      int add();
                                                       int add(int a, int b) /* function header */
      void main()
                                                       {
      {
             int result,m,n;                                  int sum;
             printf(“enter values for m and                   sum= a+b;
             n:”);                                            return sum;
             scanf(“%d %d”,&m,&n);                     }
             result=add(m,n);
             printf(“sum is:%d”,result);
      }
    In this category, there is data transfer between the calling function and called
      function.
    When Actual parameters values are passed, the formal parameters in called
      function can receive the values from the calling function.
    When the add function returns a value, the calling function receives a value from
      the called function.
    The values of actual parameters m and n are copied into formal parameters a and
      b.
    Sum is computed and returned back to calling function which is assigned to
      variable result.
4.5   Passing parameters to functions or Types of argument passing
      The different ways of passing parameters to the function are:
    Pass by value or Call by value
    Pass by address or Call by address
   1. Call by value:
                     Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                  27
Programming in C and Data Structures                                                            Module 3
    In call by value, the values of actual parameters are copied into formal parameters.
    The formal parameters contain only a copy of the actual parameters.
    So, even if the values of the formal parameters changes in the called function, the
      values of the actual parameters are not changed.
    The concept of call by value can be explained by considering the following program.
      Example:
      #include<stdio.h>
      void swap(int a,int b);
      void main()
      {
                         int m,n;
                         printf("enter values for a and b:");
                         scanf("%d %d",&m,&n);
                         printf("the values before swapping are m=%d n=%d \n",m,n);
                         swap(m,n);
                         printf("the values after swapping are m=%d n=%d \n",m,n);
                  }
      void swap(int a, int b)
          {
                         int temp;
                         temp=a;
                         a=b;
                         b=temp;
              }
       Execution starts from function main( ) and we will read the values for variables
                      m and n, assume we are reading 10 and 20 respectively.
       We will print the values before swapping it will print 10 and 20.
                     The function swap( ) is called with actual parameters m=10 and n=20.
       In the function header of function swap( ), the formal parameters a and b
                      receive the values 10 and 20.
       In the function swap( ), the values of a and b are exchanged.
                                Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                             28
Programming in C and Data Structures                                                          Module 3
                     But, the values of actual parameters m and n in function main( ) have not been
                      exchanged.
       The change is not reflected back to calling function.
   2. Call by Address
       In Call by Address, when a function is called, the addresses of actual
                      parameters are sent.
                     In the called function, the formal parameters should be declared as pointers
                      with the same type as the actual parameters.
       The addresses of actual parameters are copied into formal parameters.
       Using these addresses the values of the actual parameters can be changed.
       This way of changing the actual parameters indirectly using the addresses of
                      actual parameters is known as pass by address.
      Example:
      #include<stdio.h>
      void swap(int a,int b);
      void main()
      {
                        int m,n;
                        printf("enter values for a and b:");
                        scanf("%d %d",&m,&n);
                        printf("the values before swapping are m=%d n=%d \n",m,n);
                        swap(&m,&n);
                        printf("the values after swapping are m=%d n=%d \n",m,n);
                  }
      void swap(int*a, int*b)
          {
                        int temp;
                        temp=*a;
                        *a=*b;
                        *b=temp;
              }
NOTE:
                              Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                           29
Programming in C and Data Structures                                                              Module 3
      Pointer: A pointer is a variable that is used to store the address of another variable.
      Syntax: datatype *variablename;
      Example: int *p;
      #include<stdio.h>
      void main()
      {
             inta ,*p;
             p=&a;
      }
      In the above program p is a pointer variable, which is storing the address of variable a.
Differences between Call by Value and Call by reference
                  Call by Value                                          Call by Address
 When a function is called the values When a function is called the addresses of
 of variables are passed              variables are passed
 The type of formal parameters should The type of formal parameters should be
 be same as type of actual parameters same as type of actual parameters, but
                                      they have to be declared as pointers.
 Formal parameters contains                   the Formal parameters contain the addresses
 values of actual parameters                      of actual parameters.
4.6   Scope and Life time of a variable
      Scope of a variable is defined as the region or boundary of the program in which
      the variable is visible. There are two types
      (i) Global Scope
      (ii) Local Scope
        i.       Global Scope:
              The variables that are defined outside a block have global scope.
              That is any variable defined in global area of a program is visible from its
                 definition until the end of the program.
                For Example, the variables declared before all the functions are visible
                 everywhere in the program and they have global scope.
                      Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                        30
Programming in C and Data Structures                                                       Module 3
           ii.      Local Scope
                 a. The variables that are defined inside a block have local scope.
                 b. They exist only from thepoint of their declaration until the end of the block.
                 c. They are not visible outside the block.
            Life Span of a variable
                  The life span of a variable is defined as the period during which a variable is
                    active during execution of a program.
           For Example
                  The life span of a global variable is the life span of the program.
                  The life span of local variables is the life span of the function, they are
                    created.
                  Storage Classes
                  There are following storage classes which can be used in a C Program:
                       i. Global variables
                       ii. Local variables
                      iii. Static variables
                      iv. Register variables
     i.          Global variables:
                  These are the variables which are defined before all functions in global area
                    of the program.
                  Memory is allocated only once to these variables and initialized to zero.
                  These variables can be accessed by any function and are alive and active
                    throughout the program.
                  Memory is deallocated when program execution is over.
    ii.          Local variables(automatic variables)
                  These are the variables which are defined within a functions.
                  These variables are also called as automatic variables.
                  The scope of these variables are limited only to the function in which they
                    are declared and cannot be accessed outside the function.
    iii.         Static variables
                  The variables that are declared using the keyword static are called static
                    variables.
                         Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                      31
Programming in C and Data Structures                                                     Module 3
              The static variables can be declared outside the function and inside the
                function. They have the characteristics of both local and global variables.
              Static can also be defined within a function.
                Ex:
                      static int a,b;
    iv.      Register variables
              Any variables declared with the qualifier register is called a register variable.
              This declaration instructs the compiler that the variable under use is to be
                stored in one of the registers but not in main memory.
              Register access is much faster compared to memory access.
                Ex:
                register int a;
                                                 Recursion
    Recursion is a method of solving the problem where the solution to a problem
          depends on solutions to smaller instances of the same problem.
    Recursive function is a function that calls itself during the execution.
    The two types of recursion are
          1.Direct Recursion
          2. Indirect Recursion
   1.Direct recursion
           A recursive function that invokes itself is said to have direct recursion.
           For example factorial function calls itself hence it is called direct recursion.
   2. Indirect recursion
           A function which contains call to another function which in turn contains calls
             another function, and so on.
Design of recursive function
           Any recursive function has two elements:
                       Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                    32
Programming in C and Data Structures                                                       Module 3
           i.       Base case
       ii.          General case
 i.    Base case
        The statement that solves the problem is called base case.
        Every recursive function must have at least one base case.
               It is a special case whose solution can be obtained without using recursion.
            A base case serves two purposes:
                    i). It act as a terminating condition.
                    ii). the recursive function obtains the solution from the base case it
       reaches.
 ii.   General case:
                 The statement that reduces the size of the problem is called general case.
                 This is done by calling the same function with reduced size.
                   In general recursive function of factorial problem can be written as
                    5!=5*4!
                                4!=4*3!
                                              3!=3*2!
                                                     2!=2*1!
                                                                    1!=1*0!
                                                                         0!==1 This is a base case
                                                                    1!=1*0!=1*1=1
                                                     2!=2*1!=2*1=2
                                       3!=3*2!, 3!=3*2=6
                          4!=4*3! , 4!=4*6=24
       5!=5*4!, 5*=24,
       120(answer)
           n!=                    1                        if n=0     // Base case
                         Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                      33
Programming in C and Data Structures                                                   Module 3
                             n* (n-1)!               Otherwise // General case
                                     Write (n-1)! as fact(n-1)
          n!=                   1                        if n=0     // Base case
                             n* fact(n-1)            Otherwise // General case
      Example 1.
      /******* Factorial of a given number using Recursion ******/
      #include<stdio.h>
      int fact(int n);
      void main( )
      {
                int num,result;
                printf("enter number:");
                scanf("%d",&num);
                result=fact(num);
                printf("The factorial of a number is: %d",result);
      }
      int fact(int n)
      {
                if(n==0)
                       return 1;
                else
                       return (n*fact(n-1));
      }
                       Prof Chandrika C N, Prof Nagashree C ,Department of CSE ,SVIT
                                                    34