Transcript Lect21.ppt

Functions, Part 2 of 2
Topics
• Functions That Return a Value
• Parameter Passing
• Local Variables
• Header Files
Reading
• Sections 5.1 - 5.7
CMSC 104, Lecture 21
1
Functions Can Return Values
/****************************************************************************
** averageTwo - calculates and returns the average of two numbers
** Inputs: num1 - an integer value
**
num2 - an integer value
** Outputs: the floating point average of num1 and num2
*****************************************************************************/
float averageTwo (int num1, int num2)
{
float average ; /* average of the two numbers */
average = (num1 + num2) / 2.0 ;
return average ;
}
CMSC 104, Lecture 21
2
Using averageTwo
#include <stdio.h>
float averageTwo (int num1, int num2) ;
int main ( )
{
float ave ;
int value1 = 5, value2 = 8 ;
ave = averageTwo (value1, value2) ;
printf (“The average of %d and %d is %f\n”, value1, value2, ave) ;
return 0 ;
}
float averageTwo (int num1, int num2)
{
float average ;
average = (num1 + num2) / 2.0 ;
return average ;
}
CMSC 104, Lecture 21
3
Parameter Passing
• Actual parameters are the parameters that
appear in the function call.
average = averageTwo (value1, value2) ;
• Formal parameters are the parameters that
appear in the function header.
float averageTwo (int num1, int num2)
• Actual and formal parameters are matched by
position. Each formal parameter receives the
value of its corresponding actual parameter. (I.e.:
The variables that are passed to the function are matched
with the formal parameters in the order they are passed)
CMSC 104, Lecture 21
4
Parameter Passing (con’t)
• Corresponding actual and formal
parameters do not have to have the same
name, but they may.
• Corresponding actual and formal
parameters must be of the same data type,
with some exceptions.
CMSC 104, Lecture 21
5
Local Variables
• Functions only “see” (have access to) their
own local variables. This includes main( ) .
• Formal parameters are declarations of local
variables. The values passed are assigned to
those variables.
• Other local variables can be declared within
the function body.
CMSC 104, Lecture 21
6
Parameter Passing and Local Variables
#include <stdio.h>
float averageTwo (int num1, int num2) ;
int main ( )
{
float ave ;
int value1 = 5, value2 = 8 ;
float averageTwo (int num1, int num2)
{
float average ;
average = (num1 + num2) / 2.0 ;
return average ;
}
ave = averageTwo (value1,
value2) ;
printf (“The average of “) ;
printf (“%d and %d is %f\n”,
value1, value2, ave) ;
return 0 ;
}
value1
value2
5
8
int
int
CMSC 104, Lecture 21
ave
num1
float
int
num2
int
average
float
7
Same Name, Still Different Memory Locations
#include <stdio.h>
float averageTwo (int num1, int num2) ;
int main ( )
{
float average ;
int num1 = 5, num2 = 8 ;
float averageTwo (int num1, int num2)
{
float average ;
average = (num1 + num2) / 2.0 ;
return average ;
}
average = averageTwo (num1,
num2) ;
printf (“The average of “) ;
printf (“%d and %d is %f\n”,
num1, num2, average) ;
return 0 ;
}
num1
num2
5
8
int
int
CMSC 104, Lecture 21
average
float
num1
int
num2
int
average
float
8
Changes to Local Variables Do NOT
Change Other Variables with the Same Name
#include <stdio.h>
void addOne (int number) ;
int main ( )
{
int num1 = 5 ;
addOne (num1) ;
printf (“In main: “) ;
printf (“num1 = %d\n”, num1) ;
return 0 ;
}
num1
5
int
CMSC 104, Lecture 21
void addOne (int num1)
{
num1++ ;
printf (“In addOne: “) ;
printf (“num1 = %d\n”, num1) ;
}
num1
int
OUTPUT
In addOne: num1 = 6
In main: num1 = 5
9
Header Files
• Header files contain function prototypes for
all of the functions found in the specified
library.
• They also contain definitions of constants
and data types used in that library.
CMSC 104, Lecture 21
10
Commonly Used Header Files
Header File
<stdio.h>
<math.h>
<stdlib.h>
<time.h>
<ctype.h>
<string.h>
others
CMSC 104, Lecture 21
Contains Function Prototypes for:
standard input/output library functions
and information used by them
math library functions
conversion of numbers to text, text to
numbers, memory allocation, random
numbers, and other utility functions
manipulating the time and date
functions that test characters for certain
properties and that can convert case
functions that manipulate character strings
see Chapter 5 of text
11
Using Header Files
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ( )
{
float side1, side2, hypotenuse ;
printf(“Enter the lengths of the right triangle sides: “) ;
scanf(“%f%f”, &side1, &side2) ;
if ( (side1 <= 0) || (side2 <= 0) {
exit (1) ;
}
hypotenuse = sqrt ( (side1 * side1) + (side2 * side2) ) ;
printf(“The hypotenuse = %f\n”, hypotenuse) ;
return 0 ;
}
CMSC 104, Lecture 21
12
Math Library
• double sqrt (double x);
returns the square root of x
• double pow (double x, double y)
o x raised to the y power
• pow (3.0, 2.0) is 9.0
• pow (8.0, 1.0 / 3) is 2.0
• double sin (double x)
o trigonometric sine of x (x in radians)
• All math library functions take doubles as arguments and
return doubles
o
CMSC 104, Lecture 21
13
Common stdlib functions
• void exit (int x);
prematurely ends program execution
• void srand (unsigned int x);
o “seeds” the random number generator with an
unsigned integer that is used to start the calculations
that generate the pseudo-random number
• srand (200);
• int rand (void);
o returns an unsigned pseudo-random integer in the
range of 0 to 65535 or 0 to 4294967295 depending on
the size of an integer on the system your on
o num = rand( );
o
CMSC 104, Lecture 21
14
Manipulating what rand() returns
• Since rand( ) returns unsigned integers in a large
range, we often have to manipulate the return value
to suit our purposes
• Suppose we want only random numbers in the
range from 0 to 5
o num = rand ( ) % 6
• How about 1 to 6?
o num = 1 + rand( ) % 6;
• How about 5 to 20?
o num = 5 + rand ( ) % 16;
CMSC 104, Lecture 21
15
srand ( ) and rand ( )
• The pseudo-random number generator needs an
unsigned int as it’s seed
• Although it produces what appear to be random
numbers, if we use the same seed, we get the
same sequence of random numbers
• To get different random numbers each time we
run our program, we have to give a different seed
each time
CMSC 104, Lecture 21
16
srand ( ) and rand ( )
#include <stdio.h>
#include <stdlib.h>
#define SEED 67
main ( )
{
int i, num;
srand (SEED);
for (i = 0; i < 5; i++)
{
num = rand ( );
num = 1 + num % 6;
printf (“%d\n”, num);
}
}
CMSC 104, Lecture 21
Since we are always
using the value 67 to seed the
generator, the same numbers
will be produced whenever we
run our program.
17
<time.h>
• One of the most useful functions in the time
library is the time( ) function
• It returns the time of day as seconds
• Since this number is different every time we call
it, a common use is as a seed for the random
number generator
• Each time we run our program, a different
sequence of random numbers will be produced
• srand (time ( NULL) ) ;
CMSC 104, Lecture 21
18
Data Types and Conversion Specifiers
Data Type
float
double
long double
int
long int
unsigned int
unsigned long int
short int
char
CMSC 104, Lecture 21
printf
conversion
%f
%f
%Lf
%d
%ld
%u
%lu
%hd
%c
scanf
conversion
%f
%lf
%Lf
%d
%ld
%u
%lu
%hd
%c
19