Chapter 8
_________
Working with
Functions
1-1
Defining a function
#include <stdio.h>
int main (void) {
printf (“Programming is fun.\n”);
return 0;
}
______________________________________
Here is a function that does the same
thing:
void printMessage (void) {
printf (“Programming is fun.\n”);
}
1-2
Writing a function in C ( 1 )
#include <stdio.h>
void printMessage (void) {
printf (“Programming is fun.\n”);
}
int main (void) {
printMessage ();
return 0;
}
______________________________________
Programming is fun
1-3
Writing a function in C ( 2 )
#include <stdio.h>
int main (void) {
printf
printf
printf
printf
printf
(“Programming
(“Programming
(“Programming
(“Programming
(“Programming
is
is
is
is
is
fun.\n”);
fun.\n”);
fun.\n”);
fun.\n”);
fun.\n”);
return 0;
}
___________________________________________
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
1-4
Writing a function in C ( 2 )
#include <stdio.h>
// void data type actually defines absence
of a data type
void printMessage (void) {
printf (“Programming is fun.\n”);
}
int main (void) {
printMessage
printMessage
printMessage
printMessage
printMessage
();
();
();
();
();
return 0;
}
___________________________________________
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
1-5
Writing a function in C ( 2 )
#include <stdio.h>
// void data type actually defines absence
of a data type
void printMessage (void) {
printf (“Programming is fun.\n”);
}
int main (void) {
for (int i = 1; i <= 5; i++)
printMessage ();
return 0;
}
___________________________________________
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
Programming is fun.
1-6
Function arguments and local variables
// Function calculates nth triangular number
#include <stdio.h>
//formal parameters, with types
void calculateTriangularNumber (int n) {
// local variables
int i, triangularNumber = 0;
for (i = 1; i <= n; ++i)
triangularNumber += i;
printf (“Triangular number %i is %i \n",
n, triangularNumber);
}
int main (void) {
// Actual parameters (arguments) passing,
// just values no types
calculateTriangularNumber ( 10 );
calculateTriangularNumber ( 20 );
calculateTriangularNumber ( 30 );
return 0;
}
_____________________________________________
Triangular number 10 is 55
Triangular number 20 is 210
1-7
Returning function results
// Function calculates nth triangular number
#include <stdio.h>
int calculateTriangularNumber (int n) {
int i, triangularNumber = 0;
for (i = 1; i <= n; ++i) {
triangularNumber += i;
return triangularNumber;
}
int main (void) {
int result;
result = calculateTriangularNumber ( 10 );
printf (“Triangular number %i is %i \n",
10, result);
result = calculateTriangularNumber ( 20 );
printf (“Triangular number %i is %i \n",
20, result);
return 0;
}
_____________________________________________
Triangular number 10 is 55
Triangular number 20 is 210
1-8
Returning function results ( B )
// Function calculates nth triangular number
#include <stdio.h>
int calculateTriangularNumber (int n) {
// local variables
int i, triangularNumber = 0;
for (i = 1; i <= n; ++i) {
triangularNumber += i;
return triangularNumber;
}
int main (void) {
printf (“Triangular number %i is %i \n",
10, calculateTriangularNumber (10));
printf (“Triangular number %i is %i \n",
20, calculateTriangularNumber (20));
return 0;
}
_____________________________________________
Triangular number 10 is 55
Triangular number 20 is 210
1-9
Program 8.5: GCD of two +ve integers
#include <stdio.h>
void gcd (int u, int v) {
int temp;
printf (“The GCD of %i and %i is ”,
u, v);
while ( v != 0 ) {
temp = u % v;
u = v;
v = temp;
}
printf (“%i.\n”, u)
}
int main (void) {
gcd (150, 35);
gcd (1026, 405);
gcd (83, 240);
return 0;
}
___________________________________________
The GCD of 150 and 35 is 5
The GCD of 1026 and 405 is 27
The GCD of 83 and 240 is 1
1-10
Program 8.6: GCD of two +ve integers
#include <stdio.h>
int gcd (int u, int v) {
int temp;
while ( v != 0 ) {
temp = u % v;
u = v;
v = temp;
}
return u;
}
int main (void) {
int result = gcd (150, 35);
printf (“The GCD of %i and %i is %i”,
150, 35, result);
printf (“The GCD of 1026 and 405 is %i”,
, gcd (1026, 405));
return 0;
}
___________________________________________
The GCD of 150 and 35 is 5
The GCD of 1026 and 405 is 27
1-11
Program 8.7: Calculating absolute value
#include <stdio.h>
float absVal (float x) {
if (x < 0)
return -x; // Can have more than one
return x; // return stmnts in a function
}
int main (void) {
float f1 = -15.5, f2 = 20.0; f3 = -5.0;
int i1 = -716;
float result;
printf (“Abs value of %.2f is %.2f\n“,
f1, absVal(f1));
result = absVal(f2) + absVal(f3);
printf (“result = %.2f\n“, result);
result = absVal ((float) i1);
printf (“result = %.2f\n“, result);
result = absVal(i1) / 4;
printf (“result = %.2f\n“, result);
return 0;
}
1-12
___________________________________________
Functions calling functions calling
functins calling . . . .
#include <stdio.h>
/* Declare all functions in your program (inside the calling function or
outside any function), even if they are defined before they are called.
*/
int minimum (int values[10]) {
. . . . .
}
int main (void) {
int scores [10], i;
printf(“Enter the ten scores\n”);
for (i = 0; i < 10; ++i)
scanf (“%i”, &scores[i]);
printf(“Minimum score = %i\n”,
minimum (scores));
return 0;
}
1-13
Prog 8.9 (1): MINIMUM value in an Array
#include <stdio.h>
/* Declare all functions in your program (inside the calling function or
outside any function), even if they are defined before they are called.
*/
int minimum (int values[10]) {
int i, minValue = values [0];
for (i = 1; i < 10; ++i) {
if ( values [i] < minValue )
minValue = values [i];
}
return minValue;
}
int main (void) {
int scores [10], i;
printf(“Enter the ten scores\n”);
for (i = 0; i < 10; ++i)
scanf (“%i”, &scores[i]);
printf(“Minimum score = %i\n”,
minimum (scores));
return 0;
}
1-14
Prog 8.9 (2) : MINIMUM value in an Array
#include <stdio.h>
/* Declare all functions in your program (inside the calling function or
outside any function), even if they are defined before they are called.
*/
int main (void) {
int score [10], i;
int minimum (int values[10]);
printf(“Enter the ten scores\n”);
for (i = 0; i < 10; ++i)
scanf (“%i”, &scores[i]);
printf(“Minimum score = %i\n”,
minimum (scores));
return 0;
}
int minimum (int values[10]) {
int i, minValue = values [0];
for (i = 1; i < 10; ++i) {
if ( values [i] < minValue )
minValue = values [i];
}
return minValue;
}
1-15
Prog 8.10: MINIMUM value in an Array
#include <stdio.h>
// formal parameters
int minimum (int values[],
int numOfElmnts) {
int i, minValue = values [0];
for (i = 1; i < numOfElmnts; ++i) {
if ( values [i] < minValue )
minValue = values [i];
}
return minValue;
}
int main (void) {
int array1 [6] = {157, -28, -37, 26
260, 10};
int array2 [9] = {12, 45, 1, 10, 5,
-100, -3, 3, 2};
int minimum (int values[],
int numOfElmnts);
printf(“array1 minimum = %i\n”,
minimum (array1, 6));
// actual parameters
printf(“array2 minimum = %i\n”,
minimum (array2, 9));
return 0;
}
1-16
Prog 8.11: Changing array elements in
functions (passing params by reference)
#include <stdio.h>
// formal parameters
void multiplyBy2 (float formalArray[],
int n) {
for (int i = 0; i < n; ++i)
formalArray[i] = formalArray[i] * 2;
}
___________________________
int main (void) {
float floatValues [4] =
{1.222f, -3.7f, 6.2f, 8.55f};
int i;
void multiplyBy2 (float array[], int n);
multiplyBy2 (floatValues,
4);
for (i = 0; i < 4; ++i)
printf(“%.2f ”, floatValues [i]);
return 0;
}
___________________________________________
2.44, -7.40, 12.40, 17.10
1-17
Prog 8.12: Sorting an array into
ascending order
#include <stdio.h>
void sort (int a[], int n) {
int i, j, temp;
for (i = 0; i < n-1; ++i)
for (j = i + 1; j < n; ++j)
if (a[i) < a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
int main (void) {
int array[8] =
{34, -5, 6, 0, 12, 100, 56, -9};
void sort (int a[], int n);
sort (array, 16);
for (int i = 0; i < 8; ++i)
printf(“%i “, array[i]);
printf(“\n“);
return 0;
}
_______________________________________
-9 -5 0 6 12 34 56 100
1-18
Prog 8.13 (A): Multidimensional arrays
and functions
#include <stdio.h>
int main (void) {
int sampleMatrix[3][5] =
{
{ 7, 16, 55, 13, 12},
{12, 10, 52, 0, 7},
{-2, 1, 2, 4, 9},
};
void displayMatrix
(int matrix [][], int row, int col);
void scalarMuliply
(int matrix [][], int row, int col,
int scalar);
displayMatrix (sampleMatrix, 3, 5);
scalarMuliply (sampleMatrix, 3, 5, 2);
displayMatrix (sampleMatrix, 3, 5);
scalarMuliply (sampleMatrix, 3, 5,
-1);
displayMatrix (sampleMatrix, 3, 5);
return 0;
}
1-19
Prog 8.13 (B): Multidimensional arrays
and functions
void scalarMuliply (int matrix [][],
int rows, int cols, int scalar);
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
matrix [i][j] *= scalar;
}
void displayMatrix (int matrix [][],
int rows, int cols){
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j)
printf(“%5i”, matrix [i][j]);
printf(“\n”);
}
}
1-20
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )