Presentation is loading. Please wait.

Presentation is loading. Please wait.

1. Function prototype Function prototype is a declaration; indicates the function exists Should have function name, return type and parameter Placed before.

Similar presentations


Presentation on theme: "1. Function prototype Function prototype is a declaration; indicates the function exists Should have function name, return type and parameter Placed before."— Presentation transcript:

1 1

2 Function prototype Function prototype is a declaration; indicates the function exists Should have function name, return type and parameter Placed before main () Tells compiler that the function will be defined later #include /* function prototype */ double product(double x, double y); int main() { double var1 = 3.0, var2 = 5.0; double ans; /*function call*/ ans = product(var1, var2); printf("var1 = %.2lf\n" "var2 = %.2lf\n",var1,var2); printf("var1*var2 = %lf\n", ans); } /* function definition */ double product(double x, double y) { double result; result = x * y; return result; } 2

3 Consists of a function name followed by an argument expression list enclosed in parentheses Function call has the following form: (exp, exp...) main is the calling function product is the called function #include /* function prototype */ double product(double x, double y); int main() { double var1 = 3.0, var2 = 5.0; double ans; /*function call*/ ans = product(var1, var2); printf("var1 = %.2lf\n" "var2 = %.2lf\n",var1,var2); printf("var1*var2 = %lf\n", ans); } /* function definition */ double product(double x, double y) { double result; result = x * y; return result; } 3

4 #include /* function prototype */ double product(double x, double y); int main() { double var1 = 3.0, var2 = 5.0; double ans; /*function call*/ ans = product(var1, var2); printf("var1 = %.2lf\n" "var2 = %.2lf\n",var1,var2); printf("var1*var2 = %lf\n", ans); } /* function definition */ double product(double x, double y) { double result; result = x * y; return result; } Function definition includes the body of a function Function definition has the following form: (arg_type arg_name,...) { … statements … } 4

5 Number, order and type of parameters in the argument list of a function call and function definition MUST match. 5 int sum(int, int); //function prototype int sum(int num1, int num2) //function definition sum(x,y); //function call

6 //This program sums up two numbers #include int sum(int,int); //function prototype int main(){ int x,y,result; printf(“Enter x and y: ”); scanf(“%d %d”, &x, &y); result = sum(x,y); //function call printf(“Sum is : %d”,result); return 0; } int sum(int num1, int num2){ //function definition int add; add = num1+num2; return add; } 6

7 //This program sums up two numbers #include void sum_print(int, int); //function prototype int main(){ int x,y; printf(“Enter x and y: ”); scanf(“%d %d”, &x, &y); sum_print(x,y); //function call return 0; } void sum_print(int num1, int num2){ //function definition int add; add = num1+num2; printf(“Sum is: %d”,add); } 7

8 1. Global variable These variables are declared outside all functions, at the top of a source file. Declarations not placed in any functions Life time of a global variable is the entire execution period of the program. Can be accessed by any function defined below the declaration 8 //Compute Area & Perimeter of a circle #include float pi = 3.14159; /* Global */ int main() { floatrad;/* Local */ printf( “Enter the radius “ ); scanf(“%f”, &rad); if ( rad > 0.0 ) { float area = pi * rad * rad; float peri = 2 * pi * rad; printf( “Area = %f\n”, area ); printf( “Peri = %f\n”, peri ); } else printf( “Negative radius\n”); printf( “Area = %f\n”, area ); return 0; } //Compute Area & Perimeter of a circle #include float pi = 3.14159; /* Global */ int main() { floatrad;/* Local */ printf( “Enter the radius “ ); scanf(“%f”, &rad); if ( rad > 0.0 ) { float area = pi * rad * rad; float peri = 2 * pi * rad; printf( “Area = %f\n”, area ); printf( “Peri = %f\n”, peri ); } else printf( “Negative radius\n”); printf( “Area = %f\n”, area ); return 0; }

9 2. Local variables These variables are declared inside some functions (in a block { … }) Life time is the entire execution period of the function in which it is defined. Cannot be accessed by any other function  scope is within its block In general variables declared inside a block are accessible only in that block. 9 //Compute Area & Perimeter of a circle #include float pi = 3.14159; /* Global */ int main() { float rad; /* Local */ printf( “Enter the radius “ ); scanf(“%f”, &rad); if ( rad > 0.0 ) { float area = pi * rad * rad; float peri = 2 * pi * rad; printf( “Area = %f\n”, area ); printf( “Peri = %f\n”, peri ); } else printf( “Negative radius\n”); printf( “Area = %f\n”, area ); return 0; } //Compute Area & Perimeter of a circle #include float pi = 3.14159; /* Global */ int main() { float rad; /* Local */ printf( “Enter the radius “ ); scanf(“%f”, &rad); if ( rad > 0.0 ) { float area = pi * rad * rad; float peri = 2 * pi * rad; printf( “Area = %f\n”, area ); printf( “Peri = %f\n”, peri ); } else printf( “Negative radius\n”); printf( “Area = %f\n”, area ); return 0; }

10 Passing parameters in functions :- Pass by value Functions that return more than one value and its sample application Passing parameters in functions :- Pass by reference and its application Recursive function 10

11 Write a C program that reads item code and quantity, then calculates the payment. Use functions: fnMenu – print item code menu fnDeterminePrice – determine price based on item code fnCalc - calculate payment fnPrintResult – print payment 11 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??

12 12 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; }

13 13 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } void fnMenu() { 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"); }

14 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } 14 void fnMenu() { 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"); } Code Item Price 1 Papaya 1.00 2 Melon 2.00 3 Durian 3.00 Others 4.00 OUTPUT:

15 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } 15 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 OUTPUT:

16 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } 16 float fnDeterminePrice(int iItemCode) { float fPricing; switch(iItemCode) { case 1: fPricing = 1.00;break; case 2: fPricing = 2.00;break; case 3: fPricing = 3.00;break; default:fPricing = 4.00; } return fPricing; }

17 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } 17 float fCalc(float fItemPrice, int iQuality) { float fTotal; fTotal = fItemPrice*iQuantity; return fTotal; }

18 #include void fnMenu(); float fnDeterminePrice(int); float fnCalc(float,int); void fnPrintResult(float); int main() {int iCode,iQty; float fPriceUnit,fPay; fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fPriceUnit = fnDeterminePrice(iCode); fPay = fnCalc(fPriceUnit,iQty); fnPrintResult(fPay); return 0; } 18 void fnPrintResult(float fPayment) { printf("Payment is %.2f\n", fPayment); } 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 OUTPUT:

19 19 #include void fnMenu(); void fnDeterminePrice(); void fnCalc(); void fnPrintResult(); int iCode,iQty; float fPriceUnit,fPay; int main() { fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fnDeterminePrice(); fnCalc(); fnPrintResult(); return 0; } void fnDeterminePrice() { switch(iCode) { case 1: fPriceUnit=1.00; break; case 2: fPriceUnit=2.00; break; case 3: fPriceUnit=3.00; break; default:fPriceUnit=4.00; }

20 20 #include void fnMenu(); void fnDeterminePrice(); void fnCalc(); void fnPrintResult(); int iCode,iQty; float fPriceUnit,fPay; int main() { fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fnDeterminePrice(); fnCalc(); fnPrintResult(); return 0; } void fCalc() { fPay = fPriceUnit*iQty; }

21 21 #include void fnMenu(); void fnDeterminePrice(); void fnCalc(); void fnPrintResult(); int iCode,iQty; float fPriceUnit,fPay; int main() { fnMenu(); printf("Enter item code and quantity:"); scanf("%d %d", &iCode,&iQty); fnDeterminePrice(); fnCalc(); fnPrintResult(); return 0; } void fnPrintResult() { printf("Payment is %.2f\n", fPay); } 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 OUTPUT:

22 If a parameter is passed by value, then the value of the original data is copied into the function’s 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 only manipulate the data stored in its own memory space 22

23 #include void fnFun1(int,int); //function prototype int main() { int iA=5, iB=10; printf("Before function1\n“); printf(" iA = %d iB = %d\n”, iA,iB); fnFun1(iA, iB); //function call printf("\nAfter function1\n“); printf(" iA = %d iB = %d\n”, iA,iB); return 0; } void fnFun1(int iAA,int iBB) //function definition { ++iAA; --iBB; printf("\n\nInside fnFun1\n)"; printf(“iAA = %d iBB = %d\n”, iAA,iBB); } 23

24 #include void fnFun1(int,int); //function prototype int main() { int iA=5, iB=10; printf("Before fnFun1\n“); printf(" iA = %d iB = %d\n”, iA,iB); fnFun1(iA, iB); //function call printf("\nAfter fnFun1\n“); printf(" iA = %d iB = %d\n”, iA,iB); return 0; } void fnFun1(int iAA,int iBB) //function definition { ++iAA; --iBB; printf("\n\nInside fnFun1\n)"; printf(“iAA = %d iBB = %d\n”, iAA,iBB); } 24 OUTPUT Before fnFun 1 iA = 5 iB = 10 Inside fnFun 1 iAA = 6 iBB = 9 After fnFun 1 iA = 5 iB = 10

25 When we talk about functions that return more than one value it refers to passing arguments by reference passes addresses (references), NOT value or data allows direct manipulation changes will affect original data 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 25

26 A function’s 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 have 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 fnReadMarks(float *,float *); In function call, put the &(ampersand) before the argument name to be passed by reference Example : fnReadMarks(&fMarks1,&fMarks2); 26

27 27 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

28 #include void fnFun1(int, int*); //function prototype int main(void) { int iA=5,iB=10; printf("Before fun 1\n”); printf(“iA = %d iB = %d”,iA,iB); fnFun1(iA, &iB); //function call printf(“\n\nAfter fun 1\n”); printf(“iA = %d iB = %d\n”,iA,iB); return 0; } void fnFun1(int iAA,int *iBB)//function definition { ++iAA; --*iBB; printf("\n\nInside fnFun1\n”); printf(“iAA = %d iBB = %d”,iAA,*iBB); } 28

29 #include void fnFun1(int, int*); //function prototype int main(void) { int iA=5,iB=10; printf("Before fun 1\n”); printf(“iA = %d iB = %d”,iA,iB); fnFun1(iA, &iB); //function call printf(“\n\nAfter fun 1\n”); printf(“iA = %d iB = %d\n”,iA,iB); return 0; } void fnFun1(int iAA,int *iBB)//function definition { ++iAA; --*iBB; printf("\n\nInside fnFun1\n”); printf(“iAA = %d iBB = %d”,iAA,*iBB); } 29 OUTPUT Output Before fnFun1 iA=5 iB = 10 Inside fnFun1 iAA = 6 iBB = 9 After fnFun1 iA = 5 iB = 9

30 Write a C program that calculates and prints average of 2 test marks. Your program should have functions: fnReadMarks – read 2 test marks fnCalcAvg – calculate average of two test marks fnPrint - print average 30

31 31 #include void fnReadMarks(float*,float*); float fnCalcAvg(float,float); void fnPrint(float); int main(void) { float fMarks1, fMarks2, fAvg; fnReadMarks(&fMarks1,&fMarks2); fAvg = fnCalcAvg(fMarks1,fMarks2); fnPrint(fAvg); return 0; } void fnReadMarks(float *fM1,float *fM2) { printf("Enter marks for test1 and test2 : "); scanf("%f %f", fM1,fM2); //notice no & } float fnCalcAvg(float fM1, float fM2) { return((fM1 + fM2)/2); } void fnPrint(float fAverage) { printf("\nAverage marks are :%.2f\n",fAverage); } Function that returns more than one value - arguments are passed by reference

32 32 #include void fnReadMarks(float*,float*); float fnCalcAvg(float,float); void fnPrint(float); int main(void) { float fMarks1, fMarks2, fAvg; fnReadMarks(&fMarks1,&fMarks2); fAvg = fnCalcAvg(fMarks1,fMarks2); fnPrint(fAvg); return 0; } void fnReadMarks(float *fM1,float *fM2) { printf("Enter marks for test1 and test2 : "); scanf("%f %f", fM1,fM2); //notice no & } float fnCalcAvg(float fM1, float fM2) { return((fM1 + fM2)/2); } void fnPrint(float fAverage) { printf("\nAverage marks are :%.2f\n",fAverage); } Enter marks for test1 and test2 : 70 80 Average marks are : 75.00 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

33 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 Useful in mathematical calculations and in sorting of lists 33

34 34 Example: factorial n! = n * ( n – 1 ) * ( n – 2 ) * … * 1 Recursive relationship: ( n! = n * ( n – 1 )! ) Example: 4! 4! = 4 * 3! 3! = 3 * 2! 2!=2*1! 1!=1*0! Base case (1! = 0! = 1)

35 35 Factorial of 4 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

36 36 #include int fnFactorial(int); void main() { int iN=4; printf(“Factorial %d is %d“,n, fnFactorial(n)); } int fnFactorial(int iN) { if(iN <= 1) //base case return 1; else return ( iN * fnFactorial(iN-1)); } Call function name itself

37 37 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) Fibonacci series of 3: fib(3) = fib(2) + fib(1) fib(2) = fib(1) + fib(0) fib(1) = 1 fib(0) = 0

38 38 Diagram of Fibonacci function: f( 3 ) f( 1 ) f( 2 ) f( 1 )f( 0 )return 1 return 0 return + + = 1 = 2

39 39 Sample code for fibonacci function long fnFibonacci( long lN ) { if ( lN == 0 || lN == 1 ) //base case return lN; else return fnFibonacci(lN–1)+ fnFibonacci(lN–2); }

40 40 Q & A!


Download ppt "1. Function prototype Function prototype is a declaration; indicates the function exists Should have function name, return type and parameter Placed before."

Similar presentations


Ads by Google