Functions
Indranil Sen Gupta
Department of Computer Science & Engg.
Indian Institute of Technology
Kharagpur
Programming and Data Structure
Introduction
Function
A self-contained program segment that carries
out some specific, well-defined task.
Some properties:
Every C program consists of one or more
functions.
One of these functions must be called main.
Execution of the program always begins by carrying out
the instructions in main.
A function will carry out its intended action
whenever it is called or invoked.
Programming and Data Structure
In general, a function will process information
that is passed to it from the calling portion of
the program, and returns a single value.
Information is passed to the function via special
identifiers called arguments or parameters.
The value is returned by the return statement.
Some function may not return anything.
Return data type specified as void.
Programming and Data Structure
#include
<stdio.h>
int factorial (int m)
{
int i, temp=1;
for (i=1; i<=m; i++)
temp = temp * i;
return (temp);
}
main()
{
int n;
for (n=1; n<=10; n++)
printf (%d! = %d \n,
n, factorial (n));
}
Output:
1! = 1
2! = 2
3! = 6 .. upto 10!
Programming and Data Structure
Why Functions?
Functions
Allows one to develop a program in a modular
fashion.
Divide-and-conquer approach.
All variables declared inside functions are
local variables.
Known only in function defined.
There are exceptions (to be discussed later).
Parameters
Communicate information between functions.
They also become local variables.
Programming and Data Structure
Benefits
Divide and conquer
Manageable program development.
Construct a program from small pieces or components.
Software reusability
Use existing functions as building blocks for new
programs.
Abstraction: hide internal details (library functions).
Programming and Data Structure
Defining a Function
A function definition has two parts:
The first line.
The body of the function.
return-value-type function-name (parameter-list )
{
declarations and statements
}
Programming and Data Structure
The first line contains the return-value-type, the
function name, and optionally a set of commaseparated arguments enclosed in parentheses.
Each argument has an associated type declaration.
The arguments are called formal arguments or formal
parameters.
Example:
int
gcd (int A, int B)
The argument data types can also be declared on the next
line:
int
int
gcd (A, B)
A, B;
Programming and Data Structure
The body of the function is actually a compound
statement that defines the action to be taken by
the function.
int gcd (int A, int B)
{
int temp;
while ((B % A) != 0) {
temp = B % A;
B = A;
A = temp;
}
return (A);
}
Programming and Data Structure
BODY
When a function is called from some other
function, the corresponding arguments in
the function call are called actual arguments
or actual parameters.
The formal and actual arguments must match in
their data types.
Point to note:
The identifiers used as formal arguments are
local.
Not recognized outside the function.
Names of formal and actual arguments may differ.
Programming and Data Structure
10
#include
<stdio.h>
/* Compute the GCD of four numbers */
main()
{
int n1, n2, n3, n4, result;
scanf (%d %d %d %d, &n1, &n2, &n3, &n4);
result = gcd ( gcd (n1, n2), gcd (n3, n4) );
printf (The GCD of %d, %d, %d and %d is %d \n,
n1, n2, n3, n4, result);
}
Programming and Data Structure
11
Function Not Returning Any Value
Example: A function which prints if a
number if divisible by 7 or not.
void
{
if
div7 (int n)
((n % 7) == 0)
printf (%d is divisible by 7, n);
else
printf (%d is not divisible by 7, n);
return;
OPTIONAL
Programming and Data Structure
12
Returning control
If nothing returned
return;
or, until reaches right brace
If something returned
return expression;
Programming and Data Structure
13
Some Points
A function cannot be defined within another
function.
All function definitions must be disjoint.
Nested function calls are allowed.
A calls B, B calls C, C calls D, etc.
The function called last will be the first to return.
A function can also call itself, either directly or
in a cycle.
A calls B, B calls C, C calls back A.
Called recursive call or recursion.
Programming and Data Structure
14
#include <stdio.h>
int A;
void main()
{ A = 1;
myProc();
printf ( "A = %d\n", A);
}
Variable
Scope
Output:
void myProc()
{ int A = 2;
while( A==2 )
{
int A = 3;
printf ( "A = %d\n", A);
break;
}
printf ( "A = %d\n", A);
}
Programming and Data Structure
-------------A=3
A=2
A=1
15
Math Library Functions
Math library functions
perform common mathematical calculations
#include <math.h>
Format for calling functions
FunctionName (argument);
If multiple arguments, use comma-separated list
printf ("%f", sqrt(900.0));
Calls function sqrt, which returns the square root of its
argument.
All math functions return data type double.
Arguments may be constants, variables, or expressions.
Programming and Data Structure
16
Math Library Functions
double acos(double x)
double asin(double x)
double atan(double x)
double atan2(double y, double x)
double ceil(double x)
double floor(double x)
double cos(double x)
double cosh(double x)
double sin(double x)
double sinh(double x)
double tan(double x)
double tanh(double x)
double exp(double x)
double fabs (double x )
double log(double x)
double log10 (double x )
double pow (double x, double y)
double sqrt(double x)
Compute arc cosine of x.
Compute arc sine of x.
Compute arc tangent of x.
Compute arc tangent of y/x.
Get smallest integral value that exceeds x.
Get largest integral value less than x.
Compute cosine of angle in radians.
Compute the hyperbolic cosine of x.
Compute sine of angle in radians.
Compute the hyperbolic sine of x.
Compute tangent of angle in radians.
Compute the hyperbolic tangent of x.
Compute exponential of x.
Compute absolute value of x.
Compute log to the base e of x.
Compute log to the base 10 of x.
Compute x raised to the power y.
Compute the square root of x.
Programming and Data Structure
17
Function Prototypes
Usually, a function is defined before it is called.
main() is the last function in the program.
Easy for the compiler to identify function
definitions in a single scan through the file.
However, many programmers prefer a top-down
approach, where the functions follow main().
Must be some way to tell the compiler.
Function prototypes are used for this purpose.
Only needed if function definition comes after use.
Programming and Data Structure
18
Function prototypes are usually written at the
beginning of a program, ahead of any functions
(including main()).
Examples:
int gcd (int A, int B);
void div7 (int number);
Note the semicolon at the end of the line.
The argument names can be different; but it is a good
practice to use the same names as in the function
definition.
Programming and Data Structure
19
Example:: main calls ncr, ncr calls fact
#include <stdio.h>
int ncr (int n, int r)
{
return (fact(n) / fact(r) / fact(n-r));
}
int ncr (int n, int r);
int fact (int n);
main()
{
int i, m, n, sum=0;
scanf (%d %d, &m, &n);
for (i=1; i<=m; i+=2)
sum = sum + ncr (n, i);
int fact (int n)
{
int i, temp=1;
for (i=1; i<=n; i++)
temp *= i;
return (temp);
}
printf (Result: %d \n, sum);
}
Programming and Data Structure
20