This document discusses functions in C programming. It covers functions that do and do not return values, global vs local variables, passing parameters by value and reference, functions that return multiple values, and recursive functions. Examples are provided to illustrate calculating item prices and quantities using functions, averaging test marks by passing arguments by reference, and counting vowels and consonants in a string by returning multiple values from a function. The key topics covered are functions, parameters, return values, and how values are passed between functions.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
66 views25 pages
Ekt120 Week06 Functions2
This document discusses functions in C programming. It covers functions that do and do not return values, global vs local variables, passing parameters by value and reference, functions that return multiple values, and recursive functions. Examples are provided to illustrate calculating item prices and quantities using functions, averaging test marks by passing arguments by reference, and counting vowels and consonants in a string by returning multiple values from a function. The key topics covered are functions, parameters, return values, and how values are passed between functions.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 25
UniMAP SemII-09/10 EKT120: Computer Programming 1
Week 6 Functions (2)
UniMAP SemII-09/10 EKT120: Computer Programming 2 Outline Recall - sample application functions that do not return value functions that return a value Recall global variable vs. local variable Passing parameters in functions :- Pass by value Functions that return more than one value Sample application-functions that return more than one value Passing parameters in functions :- Pass by reference Sample application Recursive function 3 Sample application Write a C program that reads item code and quantity, then calculates the payment. Use functions: menu print item code menu determine_price determine price based on item code calc - calculate payment print_result print payment Think!! Which function returns no value and which function returns a value. What argument names do I want to feed in as parameters and what to return?? EKT120: Computer Programming 4 Sample application #include <stdio.h>
int main() { int code,qty; float price,pay; menu(); printf("Enter item code and quantity: "); scanf("%d %d", &code,&qty); price = determine_price(code); pay = calc(price,qty); print_result(pay); return 0; }
UniMAP SemII-09/10 5 Code Item Price 1 Papaya 1.00 2 Melon 2.00 3 Durian 3.00 Others 4.00 Enter item code and quantity: 1 3 Payment is 3.00 *************************** Code Item Price 1 Papaya 1.00 2 Melon 2.00 3 Durian 3.00 Others 4.00 Enter item code and quantity: 9 3 Payment is 12.00
UniMAP SemII-09/10 EKT120: Computer Programming 6 Global Variable vs. Local Variable #include <stdio.h> void menu(); float determine_price(int); float calc(float,int); void print_result(float); int code,qty;float price,pay; int main() { menu(); printf("Enter item code and quantity:"); scanf("%d %d", &code,&qty); price= determine_price(code); pay=calc(price,qty); print_result(pay); return 0; } void menu( ) { printf("Code\tItem\tPrice\n"); printf("1\tPapaya\t1.00\n"); printf("2\tMelon\t2.00\n"); printf("3\tDurian\t3.00\n"); printf("\tOthers\t4.00\n"); } float determine_price(int code) { code--; switch(code) { case 1:price=1.00;break; case 2:price=2.00;break; case 3:price=3.00;break; default:price=4.00; } return(price); } float calc(float price,int quantity) { pay=pay+1; pay=price*quantity; return(pay); } void print_result(float pay) { printf("Payment is %.2f\n", pay); }
Output: Code Item Price 1 Papaya 1.00 2 Melon 2.00 3 Durian 3.00 Others 4.00 Enter item code and quantity: 1 4 Payment is 16.00
Output: Code Item Price 1 Papaya 1.00 2 Melon 2.00 3 Durian 3.00 Others 4.00 Enter item code and quantity: 3 1 Payment is 2.00 modification However, sometimes we need to do some modifications from inside a function, using global variable will make things worse!!! UniMAP SemII-09/10 EKT120: Computer Programming 7 Pass by Value If a parameter is passed by value, then the value of the original data is copied into the functions parameter (scope: local variable(s)) In other words, it (i.e. local variable) has its own copy of the data changes to copy do not change original data During program execution, it (i.e. local variable) will manipulate the data stored in its own memory space UniMAP SemII-09/10 EKT120: Computer Programming 8 Pass by Value (Example) #include <stdio.h> void fun1(int,int); //function prototype int main(void) { int a=5, b=10; printf("Before fun 1\n); printf(" a = %d b = %d\n, a,b); fun1(a, b); //function call printf("\nAfter fun 1\n); printf(" a = %d b = %d\n, a,b); return 0; }
void fun1(int aa,int bb) //function definition { aa++; bb--; printf("\n\nInside fun 1\n)"; printf("aa = %d bb = %d\n, aa,bb); } Output Before fun 1 a = 5 b = 10
Inside fun 1 aa = 6 bb = 9
After fun 1 a = 5 b = 10
UniMAP SemII-09/10 EKT120: Computer Programming 9 Functions that return more than one value When we talk about functions that return more than one value it also means that we want to pass arguments by reference passes addresses (references), NOT value or data allows direct manipulation changes will affect original data
UniMAP SemII-09/10 EKT120: Computer Programming 10 Functions that return more than one value There are cases where you need to manipulate the value of an external variable from inside a function, thus we pass the value by reference UniMAP SemII-09/10 EKT120: Computer Programming 11 Sample application Write a C program that calculates and prints average of 2 test marks. Your program should have functions: read read 2 test marks calc_avg calculate average of two test marks print - print average UniMAP SemII-09/10 EKT120: Computer Programming 12 Sample application #include <stdio.h> void read_marks(float*,float*); float calc_avg(float,float); void print(float);
void print(float average) { printf("\nAverage marks are :%.2f\n",average); }
Output Enter marks for test1 and test2 : 70 80 Average marks are : 75.00 Function that returns more than one value - arguments are passed by reference UniMAP SemII-09/10 EKT120: Computer Programming 13 Pass by Reference A functions parameter that receives the location (memory address) of the corresponding actual variables When we attach * (star) after the arg_type in the parameter list of a function, then the variable following that arg_type is passed by reference It stores the address of the actual variable, NOT the value During program execution to manipulate the data, the address stored will direct control to the memory space of the actual variable Syntax: In function protoype and function definition, put the * (star) after the data type Example : void read_marks(float *,float *); In function call, put the &(ampersand) before the argument name to be passed by reference Example : read_marks(&marks1,&marks2);
UniMAP SemII-09/10 EKT120: Computer Programming 14 Pass by Reference Pass by reference is useful in two situations: when you want to return more than one value from a function when the value of the actual parameter needs to be changed UniMAP SemII-09/10 EKT120: Computer Programming 15 Sample application Write a C program that reads character and calculates numbers of vowel and consonant Your program should have function: read read character find_count_vc determine and calculate number of vowel or consonant print - print number of vowel or consonant
16 Sample application #include <stdio.h> #include <string.h> char read(); void find_count_vc(char, int*, int*); void print(int,int); int main() { char ch, choice; int count_v=0,count_c=0; do { ch = read(); find_count_vc(ch, &count_v, &count_c); printf("Do you want to continue? "); scanf("%c", &choice); getchar(); }while((choice == 'y') ||(choice =='Y')); print(count_v,count_c); return 0; }
void find_count_vc(char ch1, int *vowel, int *consonant) { switch(ch1) { case 'A': case 'a': case 'E': case 'e': case 'I': case 'i': case 'O': case 'o': case 'U': case 'u': *vowel = *vowel +1;break; default: *consonant = *consonant + 1; } }
void print(int vowel, int consonant) { printf("Number of vowel : %d\n", vowel); printf("Number of consonant : %d\n", consonant); } Enter character : f Do you want to continue?y Enter character : I Do you want to continue?y Enter character : k Do you want to continue?n Number of vowel : 1 Number of consonant : 2 Functions that return more than one value i.e. arguments are passed by reference UniMAP SemII-09/10 EKT120: Computer Programming 17 Pass by Reference (Example) #include <stdio.h> void fun1(int, int*); //function prototype int main(void) { int a=5,b=10; printf("Before fun 1\n); printf("a = %d b = %d,a,b); fun1(a, &b); //function call printf(\n\nAfter fun 1\n); printf("a = %d b = %d\n,a,b); return 0; } void fun1(int aa, int * bb) //function definition { aa++; *bb--; printf("\n\nInside fun 1\n); printf("aa = %d bb = %d,aa,bb); }
Output Before fun 1 a=5 b = 10
Inside fun 1 aa = 6 bb = 9
After fun 1 a = 5 b = 9
UniMAP SemII-09/10 EKT120: Computer Programming 18 Recursive Functions Recursion is a term describing functions which are called by themselves (functions that call themselves) Recursive function has two parts i.e. base case and not base case If not base case, the function breaks the problem into a slightly smaller, slightly simpler, problem that resembles the original problem and Launches a new copy of itself to work on the smaller problem, slowly converging towards the base case Makes a call to itself inside the return statement Eventually the base case gets solved and then that value works its way back up to solve the whole problem Recursion is very useful in mathematical calculations and in sorting of lists UniMAP SemII-09/10 EKT120: Computer Programming 19 Recursive Functions Example: factorial n! = n * ( n 1 ) * ( n 2 ) * * 1 Recursive relationship: ( n! = n * ( n 1 )! ) 5! = 5 * 4! 4! = 4 * 3! Base case (1! = 0! = 1) UniMAP SemII-09/10 EKT120: Computer Programming 20 Recursive Functions(Example) Factorial
Factorial(4) 4 * Factorial(3) 3 * Factorial(2) 2 * Factorial(1) 1 Value 1 is returned 2 * 1 = 2 is returned 3 * 2 = 6 is returned 4 * 6 = 24 is returned UniMAP SemII-09/10 EKT120: Computer Programming 21 Recursive Functions(Example)
#include <stdio.h> int Factorial(int);
void main() { int n=4; printf(Factorial %d is %d,n, Factorial(n)); }
int Factorial(int n) { if(n <= 1) //base case return 1; else return ( n * Factorial(n-1)); }
Call function name itself
UniMAP SemII-09/10 EKT120: Computer Programming 22 Recursive Functions (Example) Fibonacci series: 0, 1, 1, 2, 3, 5, 8... Each number is the sum of two previous numbers Example of a recursive formula: fib(n) = fib(n-1) + fib(n-2)