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