1 functions knowledge understanding of the structured design using function skills writing programs...
Post on 21-Dec-2015
234 views
TRANSCRIPT
1
FunctionsFunctions
KnowledgeUnderstanding of the structured design using function
SkillsWriting programs using user-defined functions and library functions
TK1913-C ProgrammingTK1913-C Programming 22
An approach used to handle complexity in solving problems based on the “divide and conquer” strategy
A larger problem (more complex) is broken up into smaller problems (less complex)
The solution to the problem (a module) consists of a combination of solutions for the smaller problems (sub-modules)
Each sub-module also has its own input(s) and output(s)
Structural DecompositionStructural Decomposition
TK1913-C ProgrammingTK1913-C Programming 33
The results of structural decomposition may be illustrated using a diagram called a structure chart
It is intended to show the structural relationship between sub-modules that construct the problem solution and the data flow between them
Structure ChartsStructure Charts
TK1913-C ProgrammingTK1913-C Programming 44
Read 3 letters Output the first letterFind the first letter
Find the first letterbetween the 2 letters
Find the first letterbetween the 2 letters
letter1,letter2,letter3
firstLetter
firstLetter
firstLetter
letter1,letter2,letter3
firstLetter
letter1,letter2
firstLetter,
letter3
Input 3 letters andoutput the first letter
by chronological order
TK1913-C ProgrammingTK1913-C Programming 55
Top-down design is a method of building
programs based on solution structures derived
from structured decomposition
Solution to every sub-problem in the structure
chart is usually coded as a function in a program
Function is a subprogram which carries out a
specific task
Top-Down DesignTop-Down Design
TK1913-C ProgrammingTK1913-C Programming 66
Functions designed, written or defined by
programmers
Every user-defined function must have a
definition and a declaration (prototype).
A function must be called in order to execute the
statements contained in its definition
Function prototypes are usually placed before
their definitions in a program
User-Defined FunctionsUser-Defined Functions
TK1913-C ProgrammingTK1913-C Programming 77
Program to display 3 lines of characters
Display character line
Example:
TK1913-C ProgrammingTK1913-C Programming 88
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( );}void displayLine( ) {
printf("#######\n");}
main( ) function
displayLine( ) function
TK1913-C ProgrammingTK1913-C Programming 99
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( );}void displayLine( ) {
printf("#######\n");}
displayLine( ) function prototype
displayLine( ) function
TK1913-C ProgrammingTK1913-C Programming 1010
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( );}void displayLine( ) {
printf("#######\n");}
Function head
TK1913-C ProgrammingTK1913-C Programming 1111
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( );}void displayLine( ) {
printf("#######\n");}
Function body
TK1913-C ProgrammingTK1913-C Programming 1212
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( ); }void displayLine( ) {
printf("#######\n");} Function call
- A call to displayLine( ) function
TK1913-C ProgrammingTK1913-C Programming 1313
Example:#include <stdio.h>void displayLine( );int main() {
int i;for (i=0; i < 3; i++)
displayLine( );}void displayLine( ) {
printf("#######\n");}
Another function call- a call to printf( ) library function
TK1913-C ProgrammingTK1913-C Programming 1414
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
0i
TK1913-C ProgrammingTK1913-C Programming 1515
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
0i
TK1913-C ProgrammingTK1913-C Programming 1616
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
0i
TK1913-C ProgrammingTK1913-C Programming 1717
#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
Example:
#######_
TK1913-C ProgrammingTK1913-C Programming 1818
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
0i
#######_
TK1913-C ProgrammingTK1913-C Programming 1919
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
1i
#######_
TK1913-C ProgrammingTK1913-C Programming 2020
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
1i
#######_
TK1913-C ProgrammingTK1913-C Programming 2121
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
1i
#######_
TK1913-C ProgrammingTK1913-C Programming 2222
#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
Example:
############## _
TK1913-C ProgrammingTK1913-C Programming 2323
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
1i
############## _
TK1913-C ProgrammingTK1913-C Programming 2424
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
2i
############## _
TK1913-C ProgrammingTK1913-C Programming 2525
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
2i
############## _
TK1913-C ProgrammingTK1913-C Programming 2626
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
2i
##############_
TK1913-C ProgrammingTK1913-C Programming 2727
#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
Example:
##################### _
TK1913-C ProgrammingTK1913-C Programming 2828
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
2i
##################### _
TK1913-C ProgrammingTK1913-C Programming 2929
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
3i
##################### _
TK1913-C ProgrammingTK1913-C Programming 3030
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
3i
##################### _
TK1913-C ProgrammingTK1913-C Programming 3131
Example:#include <stdio.h>void displayLine( );int main() {
int i;for ( i=0 ; i < 3 ; i++ )
displayLine( );}void displayLine( ) {
printf("#######\n");}
3i
##################### _
TK1913-C ProgrammingTK1913-C Programming 3232
To execute a function, it must first be called with the following information: Stating the function name Providing a certain information (parameter)
Syntax for a function call:function_name( actual_parameter_list );
function_name – the function name that is to be called actual_parameter_list – is a list of information which is
required to execute a function The number of parameters provided must be the same as
defined in the function definition
Function CallsFunction Calls
TK1913-C ProgrammingTK1913-C Programming 3333
A function prototype declares a certain information
pertaining to the function
C compiler uses the information in the function
prototype for compiling function calls in a program
Syntax for function prototyping:
data_type function_name( parameter_definition_list); This form is similar to the function definition head
Function PrototypesFunction Prototypes
TK1913-C ProgrammingTK1913-C Programming 3434
Function characteristics:
With parameters? Returns a value?
Function CharacteristicsFunction Characteristics
TK1913-C ProgrammingTK1913-C Programming 3535
A function which has no parameter and return value may be defined as follows:
void function_name() { local_variable _declaration;
executable_function_statements;}
Function which does not return any value
void
Function without any parameter
( )
Function Without Parameter Function Without Parameter and Not Returning Any Valueand Not Returning Any Value
TK1913-C ProgrammingTK1913-C Programming 3636
Example:#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
TK1913-C ProgrammingTK1913-C Programming 3737
Example:#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
TK1913-C ProgrammingTK1913-C Programming 3838
#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
Example:
_
width
height
area
???
???
???
TK1913-C ProgrammingTK1913-C Programming 3939
#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
Example:
12 8_
width
height
area
12
8
???
TK1913-C ProgrammingTK1913-C Programming 4040
#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
Example:
12 8_
width
height
area
12
8
96
TK1913-C ProgrammingTK1913-C Programming 4141
#include <stdio.h>void input_compute_and_output_area( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
Example:
12 8Area: 96_
width
height
area
12
8
96
TK1913-C ProgrammingTK1913-C Programming 4242
#include <stdio.h>void inputComputeAndOutputArea( );int main() {
inputComputeAndOutputArea( );}void inputComputeAndOutputArea( ) {
int width, height, area;scanf("%d%d", &width, &height);area = width * height;printf(“Area: %d\n", area);
}
Example:
12 8Area: 96_
TK1913-C ProgrammingTK1913-C Programming 4343
In structural decomposition, the solution to a sub-problem may require some specific data
Input 3 letters and output the first letter by chronological order
Read 3 letters Output first letterFind first letter
letter 1,letter 2,letter 3 first
letter
letter 1,letter 2,letter 3
firstletter
Function With ParametersFunction With Parameters
TK1913-C ProgrammingTK1913-C Programming 4444
For a C function, a parameter needs to be defined for each data to be handed by a caller
void outputFirstLetter(char firstLetter ) {printf(“First letter: %c\n", firstLetter);
}The caller to this function needs to hand a data of type char. In this function, the data is kept in a variable named firstLetter
Function With ParametersFunction With Parameters
TK1913-C ProgrammingTK1913-C Programming 4545
Parameter’s name is optional in function prototype
void displayArea(int width, int height) {printf(“Area: %d\n", width*height);
}
The following function prototypes are valid:
void displayArea(int width, int height);void displayArea(int, int);
Function With ParametersFunction With Parameters
Example:#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea(int width, int height) {
printf(“Area: %d\n", width * height);}
Example:#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea(int width, int height) {
printf(“Area: %d\n", width * height);}
???
???
rectWidth
rectHeight
_
Contoh:
#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea(int width, int height) {
printf(“Area: %d\n", width * height);}
7
8
rectWidth
rectHeight
7 8_
Example:
#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea(int width, int height) {
printf(“Area: %d\n", width * height);}
7
8
rectWidth
rectHeight
7 8_
Example:
#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea(int width, int height) {
printf(“Area: %d\n", width * height);}
7
8
rectWidth
rectHeight
7 8_
7
8
width
height
#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea( int width, int height) {
printf(“Area: %d\n", width * height);}
Example:
7 8Area: 56_
7
8
width
height
#include <stdio.h>void computeAndOutputArea(int width, int height);int main() {
int rectWidth, rectHeight;scanf(“%d%d”, &rectWidth, &rectHeight);computeAndOutputArea(rectWidth, rectHeight);
}void computeAndOutputArea( int width, int height) {
printf(“Area: %d\n", width * height);}
Example:
7 8Area: 56_
7
8
rectWidth
rectHeight
TK1913-C ProgrammingTK1913-C Programming 5353
In structural decomposition, the solution to a sub-problem may return a data/info
Input 3 letters and Output first letter
Read 3 letters Output first letterFind first letter
letter1,letter2,letter3
firstLetter
letter1,letter2,letter3
firstLetter
Function That Returns a ValueFunction That Returns a Value
TK1913-C ProgrammingTK1913-C Programming 5454
Besides receiving data from the caller, a function can also return a value to the caller.
Example:
int computeRectArea(int width, int height) {int area;area = width * height;return area;
}
Function That Returns a ValueFunction That Returns a Value
TK1913-C ProgrammingTK1913-C Programming 5555
The data type of the value being returned must
be specified in the function definition.return_type function_name(parameter_list) {
local_variable_definition;statements;
}
Value type being returned by the function
return_type
Function That Returns a ValueFunction That Returns a Value
TK1913-C ProgrammingTK1913-C Programming 5656
A function returns a value via a return statement
When a return statement is executed, program control is returned to the caller along with the return value
Example:int computeRectArea(int width, int height) {
int area;area = width * height;return area;
}
return Statementreturn Statement
Example:#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
???
???
rectWidth
rectHeight
???
rectArea
_
Example:#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
7
11
rectWidth
rectHeight
???
rectArea
7 11_
Example:#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
7
11
rectWidth
rectHeight
???
rectArea
7 11_
Example:#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
7
11
rectWidth
rectHeight
???
rectArea
7 11_
7 11
width height
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11_
7 11width height
77
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11_
7
11
rectWidth
rectHeight
77
rectArea
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11_
7
11
rectWidth
rectHeight
77
rectArea
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11_
7
11rectWidth
rectHeight
77
rectArea
77
area
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11_
77
area
7 11Rectangle area: 77_
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11Rectangle area: 77_
7
11
rectWidth
rectHeight
77
rectArea
#include <stdio.h>int computeArea(int width, int height);void outputArea(int area);int main() {
int rectWidth, rectHeight, rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeArea(rectWidth, rectHeight);outputArea(rectArea);
}int computeArea(int width, int height) {
return width * height;}void outputArea(int area) {
printf(“Rectangle area: %d\n", area);}
Example:
7 11Rectangle area: 77_
7
11
rectWidth
rectHeight
77rectArea
TK1913-C ProgrammingTK1913-C Programming 6969
In a function which does not return any value, the return statement (without expression) will result in the program control being returned to the caller.
return Statementreturn Statement
TK1913-C ProgrammingTK1913-C Programming 7070
Example:void displayLine(int length) {
int i = 0;while (1) {
if (i == length) {printf(“\n”);return;
}printf(“*”);i++;
}}
return Statementreturn Statement
TK1913-C ProgrammingTK1913-C Programming 7171
Variables which are defined in a function can only be used within that function. This type of variables is known as local variable.
Example,
void displayLine(int lineNum) {int i;for (i = 0; i < lineNum; i++)
printf("#########\n");}
Local variables
Local VariablesLocal Variables
TK1913-C ProgrammingTK1913-C Programming 7272
Local variable cannot be accessed outside the function which defines it
Local VariablesLocal Variables
int computeRectArea(int, int);int main() {
int rectWidth, rectHeight, rectArea;
scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeRectArea(rectWidth, rectHeight);printf(“Rectangle area: %d", area);
}int computeRectArea(int width, int height) {
int area;area = width * height;return area;
}
Local VariablesLocal Variables
int computeRectArea(int, int);int main() {
int rectWidth, rectHeight, rectArea;
scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeRectArea(rectWidth, rectHeight);printf(“Rectangle area: %d", area);
}int computeRectArea(int width, int height) {
int area;area = width * height;return area;
}
The local variable area is only for usage within function computeRectArea()-The function which defines it
Local VariablesLocal Variables
int computeRectArea(int, int);int main() {
int rectWidth, rectHeight;int rectArea;scanf("%d%d", &rectWidth, &rectHeight);rectArea = computeRectArea(rectWidth, rectHeight);printf(“Rectangle area: %d", area);
}int computeRectArea(int width, int height) {
int area;area = width * height;return area;
}
Variable area in function computeRectArea() cannot be accessed here.
ERROR!
Local VariablesLocal Variables