0% found this document useful (0 votes)
47 views33 pages

ICS103: Programming in C: Top-Down Design With Functions

This document provides an introduction to functions in C programming. It discusses library functions and code reuse, top-down design using structure charts, and different types of functions including functions without arguments or results, functions with input arguments and a single result, and testing functions using driver programs. Mathematical functions from the standard math library are presented as examples.

Uploaded by

darwinvargas2011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views33 pages

ICS103: Programming in C: Top-Down Design With Functions

This document provides an introduction to functions in C programming. It discusses library functions and code reuse, top-down design using structure charts, and different types of functions including functions without arguments or results, functions with input arguments and a single result, and testing functions using driver programs. Mathematical functions from the standard math library are presented as examples.

Uploaded by

darwinvargas2011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 33

ICS103: Programming in C

Top-Down Design with Functions

Muhamed F. Mudawar
OUTLINE
 Introduction to Functions
 Library Functions and Code Reuse
 Top-Down Design and Structure Charts
 Functions without Arguments or Results
 Function Prototypes, Definitions, and Function Calls
 Functions with Input Arguments and a Single Result
 Testing Functions and Function Data Area
2
 Advantages of Functions and Common Errors
INTRODUCTION TO FUNCTIONS
 So far, we know how to use operators: + – * / % to
form simple arithmetic expressions
 However, we are not yet able to write many other
mathematical expressions we are used to
 For example, we cannot yet represent any of the
following expressions in C: 𝑥 , 𝑒 𝑥 , log 𝑥
 C does not have operators for square root, exponential,
log, sine, etc.
 Instead, C provides program units called functions to
carry out these and other mathematical operations 3
INTRODUCTION TO FUNCTIONS
A function is like a box that
receives input arguments and
returns a result value
 For example: y = sqrt(x);
 x is the input argument
 The result value is assigned to y
 For example: y = sqrt(16.0);
 The result value is 4.0
 The math library provides many standard functions in C
4
LIBRARY FUNCTIONS AND CODE REUSE
 The primary goal of software engineering is to write error-
free code.
 Reusing code that has already been written and tested is
one way to achieve this.
C promotes code reuse by providing library functions.
 Input/Output functions: printf, scanf , etc.
 Mathematical functions: sqrt, exp, log, etc.
 String functions: strlen, strcpy, strcmp, etc.
5
 Appendix B lists many C standard library functions
SQUARE ROOT PROGRAM

6
SQUARE ROOT PROGRAM (CONT'D)

7
SOME MATHEMATICAL LIBRARY FUNCTIONS
Function Header file Argument Result Example
abs(x) <stdlib.h> int int abs(-5) is 5
fabs(x) <math.h> double double fabs(-2.3) is 2.3
sqrt(x) <math.h> double double sqrt(2.25) is 1.5
exp(x) <math.h> double double exp(1.0) is 2.71828
log(x) <math.h> double double log(2.71828) is 1.0
log10(x) <math.h> double double log10(100.0) is 2.0
pow(x,y) <math.h> double, double pow(2.0,3.0) is 8.0
double returns xy
sin(x) <math.h> double double sin(PI/2.0) is 1.0
cos(x) <math.h> double double cos(PI/3.0) is 0.5
tan(x) <math.h> double double tan(PI/4.0) is 1.0
8
ceil(x) <math.h> double double ceil(45.2) is 46.0
floor(x) <math.h> double double floor(45.2) is 45.0
USING MATH LIBRARY FUNCTIONS
#include <math.h>
 Computing the roots of: ax2 + bx + c = 0
delta = b*b – 4*a*c;
root1 = (-b + sqrt(delta))/(2.0 * a);
root2 = (-b - sqrt(delta))/(2.0 * a);
 Computing the unknown side of a triangle
 a2
= b2 + c2 – 2 b c cos()
a = sqrt(b*b + c*c -
2*b*c*cos(alpha));
9
 alpha must be in radians
NEXT . . .
 Introduction to Functions
 Library Functions and Code Reuse
 Top-Down Design and Structure Charts
 Functions without Arguments or Results
 Function Prototypes, Definitions, and Function Calls
 Functions with Input Arguments and a Single Result
 Testing Functions and Function Data Area
10
 Advantages of Functions and Common Errors
TOP-DOWN DESIGN
 Algorithms are often complex
 To solve a problem, the programmer must break it into
sub-problems at a lower level
 This process is called top-down design
 Examples:

Drawing
Simple
Diagrams
11
STRUCTURE CHARTS
 Structure Charts show the relationship between the
original problem and its sub-problems.
 Thesub-problem (Draw a triangle) can also be refined. It
has its own sub-problems at level 2.

12
FUNCTIONS WITHOUT ARGUMENTS
 One way to achieve top-down design is to define a function
for each sub-program.
 Forexample, one can define functions to draw a circle,
intersecting lines, base line, and a triangle.
 To draw a circle, call the function:
draw_circle(); /* No argument, No result */
 To draw a triangle, call the function:
draw_triangle(); /* No argument, No result */
13
 The above draw functions have no arguments
FUNCTIONS TO DRAW
A STICK FIGURE
NO ARGUMENT
NO RESULT

14
15
FUNCTION PROTOTYPES
 A function must be declared before it can be used in a program.
 To do this, you can add a function prototype before main to tell the
compiler what functions you are planning to use.
 A function prototype tells the C compiler:
1. The result data type that the function will return
2. The function name
3. Information about the arguments that the function expects
 Function prototypes for draw_circle and sqrt
void draw_circle(void);
16

double sqrt(double x);


FUNCTION PROTOTYPES
Before main function

Draws
This
Stick
Figure
17
FUNCTION DEFINITION
 A function prototype tells the compiler what arguments the function
takes and what it returns, but NOT what it does
 A function definition tells the compiler what the function does
 Function Header: Same as the prototype, except it does not end
with a semicolon ;
 Function Body: enclosed by { and } containing variable
declarations and executable statements

No Result
No Argument

18
PLACEMENT OF FUNCTIONS IN A PROGRAM
 In general, declare all function prototypes at the
beginning (after #include and #define)
 This is followed by the main function
 After that, we define all of our functions
 However, this is just a convention
 As long as a function’s prototype appears before it is
used, it doesn’t matter where in the file it is defined
 The order we define functions in a program does not
19
have any impact on how they are executed
EXECUTION ORDER OF FUNCTIONS
 Program execution always starts in main function
 Executionorder of functions is determined by the order
of the function call statements
 Atthe end of a function, control returns immediately
after the point where the function call was made

function call

20
NEXT . . .
 Introduction to Functions
 Library Functions and Code Reuse
 Top-Down Design and Structure Charts
 Functions without Arguments or Results
 Function Prototypes, Definitions, and Function Calls
 Functions with Input Arguments and a Single Result
 Testing Functions and Function Data Area
21
 Advantages of Functions and Common Errors
FUNCTIONS AND ARGUMENTS
 We use arguments to communicate with the function
 Two types of function arguments:
 Input arguments: pass data from the caller to the function
 Output arguments: pass results from the function back to the
caller [chapter 6]
 Types of Functions
 No input arguments (void) and no value returned (void)
 Input arguments, but no value returned (void)
 Input arguments and single value returned
22
 Input arguments and multiple values returned [chapter 6]
FUNCTION WITH INPUT ARGUMENT BUT
NO RETURN VALUE
 void print_rboxed(double rnum);
 Display its double argument rnum in a box
 void function  No return value

Sample Run

23
FORMAL AND ACTUAL PARAMETERS
 Formal Parameter
An identifier that represents a parameter in a function prototype or
definition.
Example: void print_rbox(double rnum);
The formal parameter is rnum of type double
 Actual Parameter (or Argument)
An expression used inside the parentheses of a function call
Example: print_rbox(x+y); /* function call */
Actual argument is the value of the expression x+y
 Parametersmake functions more useful. Different 24

arguments are passed each time a function is called.


FUNCTIONS WITH INPUT ARGUMENTS AND
A SINGLE RESULT VALUE
/* area of a circle */
double circle_area(double r)
{
return (PI * r * r);
}

/* diagonal of rectangle */
double rect_diagonal(double l, double w)
{
double d = sqrt(l*l + w*w);
return d;
}
25
 Functions in the math library are of this category
TESTING FUNCTIONS USING DRIVERS
A function is an independent program module

 It should be tested separately to ensure correctness

A driver function is written to test another function


 Input or define the arguments

 Call the function

 Display the function result and verify its correctness


26
 We can use the main function as a driver function
TESTING FUNCTION rect_diagonal
/* Testing rect_diagonal function */
int
main(void)
{
double length, width; /* of a rectangle */
double diagonal; /* of a rectangle */

printf("Enter length and width of rectangle> ");


scanf("%lf%lf", &length, &width);
diagonal = rect_diagonal(length, width);
printf("Result of rect_diagonal is %f\n", diagonal);
return 0; 27
}
THE FUNCTION DATA AREA
 Each time a function call is executed, an area of memory is
allocated for formal parameters and local variables
 Local Variables: variables declared within a function body
 Function Data Area: Formal Parameters + Local Variables
 Allocated when the function is called
 Can be used only from within the function
 No other function can see them
 The function data area is lost when a function returns
28
 It is reallocated when the function is called again
EXAMPLE OF FUNCTION DATA AREAS
diagonal = rect_diagonal(length, width);

Function Function
main rect_diagonal
Data Area Data Area
length l
pass
1.5 1.5

width w
pass
2.0 2.0

diagonal d
return
? 2.5 29
ARGUMENT LIST CORRESPONDENCE
 The Number of actual arguments used in a call to a
function must be equal to the number of formal
parameters listed in the function prototype.
 The Order of the actual arguments used in the function
call must correspond to the order of the parameters
listed in the function prototype.
 Each actual argument must be of a data Type that can
be assigned to the corresponding formal parameter 30

with no unexpected loss of information.


ADVANTAGES OF FUNCTIONS
 A large problem can be better solved by breaking it up
into several functions (sub-problems)
 Easier to write and maintain small functions than
writing one large main function
 Once you have written and tested a function, it can be
reused as a building block for a large program
 Well written and tested functions reduce the overall
length of the program and the chance of error
 Useful functions can be bundled into libraries 31
PROGRAMMING STYLE
 Each function should begin with a comment that
describes its purpose, input arguments, and result
 Include comments within the function body to describe
local variables and the algorithm steps
 Place prototypes for your own functions in the source file
before the main function
 Place the function definitions after the main function in
any order that you want 32
COMMON PROGRAMMING ERRORS
 Remember to use #include directive for every
standard library from which you are using functions
 For each function call:
 Provide the required Number of arguments
 Make sure the Order of arguments is correct
 Make sure each argument is the correct Type or that
conversion to the correct type will not lose information.
 Document and test every function you write
 Do not call a function and pass arguments that are out
of range. A function will not work properly when 33
passing invalid arguments: sqrt(-1.0)

You might also like