functions a group of declarations and statements that is assigned a name effectively, a named...
TRANSCRIPT
![Page 1: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/1.jpg)
Functions
a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value
a sub-program when we write our program we always
define a function named main inside main we can call other functions
which can themselves use other functions, and so on…
![Page 2: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/2.jpg)
Example - Square #include <stdio.h>
double square(double a) { return a*a;}
int main(void) { double num;
printf("enter a number\n"); scanf("%lf",&num);
printf("square of %g is %g\n",num,square(num));
return 0;}
This is a function defined outside main
Here is where we call the function square
![Page 3: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/3.jpg)
Why use functions?
they can break your problem down into smaller sub-tasks easier to solve complex problems
they make a program much easier to read and maintain abstraction – we don’t have to know how a
function is implemented to use it generalize a repeated set of instructions
we don’t have to keep writing the same thing over and over
![Page 4: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/4.jpg)
Characteristics of Functions
return-type name(arg_type1 arg_name1, arg_type2 arg_name2, …)
{function body;return value;
}
double square(double a){
return a*a;}
int main(void){
…}
![Page 5: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/5.jpg)
Return Statement
Return causes the execution of the function to terminate and usually returns a value to the calling function
The type of the value returned must be the same as the return-type defined for the function (or a ‘lower’ type)
If no value is to be returned, the return-type of the function should be set to ‘void’
![Page 6: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/6.jpg)
Factorials galore#include <stdio.h>
int factorial(int n){
int i, fact = 1;
for (i=2; i<=n; i++) fact *= i;
return fact;}
int main(void){ int num;
printf("enter a number\n"); scanf("%d",&num);
printf("%d!=%d\n",num,factorial(num));
return 0;}
![Page 7: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/7.jpg)
A Detailed Example
Write a program that receives a nominator and a denominator from the user, and displays the reduced form of the number.
For example, if the input is 6 and 9, the program should display 2/3.
![Page 8: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/8.jpg)
Example – solution (step I)#include <stdio.h>
int main(void){
int n, d;
printf("Please enter nominator and denominator: ");scanf("%d%d", &n, &d);
Calculate n’s and d’s Greatest Common Divisor
printf("The reduced form of %d/%d is %d/%d", n, d, n/gcd, d/gcd);
return 0;}
![Page 9: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/9.jpg)
Example – solution (step II)#include <stdio.h>
int main(void){
int n, d, g;
printf("Please enter nominator and denominator: ");scanf("%d%d", &n, &d);
g = gcd(n, d);
printf("The reduced form of %d/%d is %d/%d", n, d, n/g, d/g);
return 0;}
![Page 10: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/10.jpg)
Example – solution (step III)/* Returns the greatest common divisor of its two
parameters. Assumes both are positive. The function uses the fact that the if r = mod(y, x) then the gcd of y and x equals the gcd of x and r. */
int gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
![Page 11: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/11.jpg)
GCD – step by stepint main(void){
int n, d, g;
printf("Please enter … : ");scanf("%d%d", &n, &d);
g = gcd(n, d);
printf("The reduced form…", n, d, n/g, d/g);
return 0;}
n d g
6 9 ---
![Page 12: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/12.jpg)
GCD – step by stepint main(void){
int n, d, g;
printf("Please enter … : ");scanf("%d%d", &n, &d);
g = gcd(n, d);
printf("The reduced form…", n, d, n/g, d/g);
return 0;}
n d g
6 9 ---
![Page 13: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/13.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp6 9 ---
![Page 14: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/14.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp6 9 ---
![Page 15: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/15.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp6 9 6
![Page 16: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/16.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp3 9 6
![Page 17: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/17.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp3 6 6
![Page 18: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/18.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp3 6 6
![Page 19: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/19.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp3 6 3
![Page 20: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/20.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp0 6 3
![Page 21: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/21.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp0 3 3
![Page 22: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/22.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp0 3 3
![Page 23: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/23.jpg)
GCD – step by stepint gcd(int x, int y){
int tmp;
while(x > 0){
tmp = x;x = y % x;y = tmp;
}return y;
}
x y tmp0 3 3
![Page 24: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/24.jpg)
GCD – step by stepint main(void){
int n, d, g;
printf("Please enter … : ");scanf("%d%d", &n, &d);
g = gcd(n, d);
printf("The reduced form…", n, d, n/g, d/g);
return 0;}
n d g
6 9 3
![Page 25: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/25.jpg)
Example – Complete Solution
gcd.c
![Page 26: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/26.jpg)
Exercise
Input – An integer n
Output – The n’th fibonacci number
Note – Use an appropriately defined function
![Page 27: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/27.jpg)
Solution
fibonacci_func.c
![Page 28: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/28.jpg)
Exercise
Write a program that gets a positive integer from the user and prints all the prime numbers from 2 up to that integer.
(Use a function that returns 1 if its parameter is prime, 0 otherwise)
![Page 29: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/29.jpg)
Solution
is_prime_func.c
![Page 30: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/30.jpg)
Exercise Newton was the first to notice that for
any positive n, and when x0=1, the following series converges to sqrt(n) –
Use this fact to write a program that accepts a positive number and outputs its square root Hint – the thousandth element of
Newton’s series is a good-enough approximation
![Page 31: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/31.jpg)
Solution
sqrt.c
![Page 32: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/32.jpg)
The Great Void Sometimes there’s no reason for a function to
return a value In these cases, the function return type should
be ‘void’ If the ‘return’ keyword is used within such a
function it exits the function immediately. No value needs be specified
Calling ‘return’ in a function returning void is not obligatory
If the function receives no parameters, the parameter list should be replaced by ‘void’
![Page 33: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/33.jpg)
Examplevoid ShowHelp(void){
printf("This function explains what this program does…\n");printf("Yadayadayada");
/* …. */}
int main(void){
char choice;
printf("Please enter your selection: ");scanf("%c", &choice);
if (choice==‘h’) ShowHelp();else if /* Program continues … */
}
![Page 34: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/34.jpg)
Pass-by-value
Function arguments are passed to the function by copying their values rather than giving the function direct access to the actual variables
A change to the value of an argument in a function body will not change the value of variables in the calling function
Example – add_one.c
![Page 35: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/35.jpg)
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
a b
34 1
Main() memory state
![Page 36: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/36.jpg)
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
a b
34 1
Main() memory state
![Page 37: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/37.jpg)
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
a b
34 1
Main() memory state
b
1
add_one memory state
![Page 38: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/38.jpg)
a b
34 1
Main() memory state
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
b
2
add_one memory state
![Page 39: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/39.jpg)
a b
34 1
Main() memory state
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
b
2
add_one memory state
![Page 40: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/40.jpg)
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
a b
2 1
Main() memory state
![Page 41: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/41.jpg)
add_one – step by stepint add_one(int b){
b=b+1;return b;
}
int main(void){
int a=34,b=1;
a=add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
a b
2 1
Main() memory state
![Page 42: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/42.jpg)
Riddle me this#include <stdio.h>
int factorial(int n){
int fact = 1;
while (n>1) { fact *= n; n--; }
return fact;}
int main(void){ int n;
printf("enter a number\n"); scanf("%d",&n);
printf("%d!=%d\n", n, factorial(n));
/* What will this print? */ printf("n = %d\n", n); return 0;}
![Page 43: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/43.jpg)
Scope of variables
A variable declared within a function is unrelated to variables declared elsewhere, even if they have the same name
A function cannot access variables that are declared in other functions
Example – scope.c
![Page 44: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/44.jpg)
Wrong way to do itint add_one(int b){
a=b+1;}
int main(void){
int a=34,b=1;
add_one(b);
printf("a = %d, b = %d\n", a, b);return 0;
}
![Page 45: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/45.jpg)
Function Declaration
Most software projects in C are composed of more than one file
We want to be able to define the function in one file, and to use it in all files
For this reason, the function must be declared in every file in which it’s called, before it’s called for the first time
the declaration contains: the function name the data types of the arguments (their names are
optional) the data type of the return value
![Page 46: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/46.jpg)
Function Declaration#include <stdio.h>
int factorial(int a); /* Function Declaration! */
int main(void){ int num;
printf("enter a number\n"); scanf("%d",&num);
printf("%d!=%d\n",num,factorial(num));
return 0;}
int factorial(int a){ int i,b=1; for(i=1; i<=a; i++) b=b*i; return b;}
![Page 47: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/47.jpg)
Function Declaration
stdio.h actually contains a large set of function declarations
The #include directive tells the compiler to insert these declarations into the file, so that these functions could be called
![Page 48: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/48.jpg)
The math library
A collection of mathematical functions Need to include the header file math.h
(#include <math.h>) Use functions of the library, e.g.
double s,p;
s=sqrt(p); Declared in math.h :
double sqrt ( double x );
![Page 49: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/49.jpg)
The math library
sin(x), cos(x), tan(x) x is given in radians
asin(x), acos(x), atan(x) log(x) sqrt(x) pow(x,y) – raise x to the yth power. ceil(x), floor(x) …and more
![Page 50: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/50.jpg)
Exercise
Write a function that uses the formula
2/6=1/1+1/4+1/9+1/16+…+1/n2 (where n goes to infinity)
in order to approximate . The function should accept an argument n which determines the number of terms in the formula. It should return the approximation of .
Write a program that gets an integer n from the user, and approximate using n terms of the above formula.
![Page 51: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/51.jpg)
Solution
pi.c
![Page 52: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/52.jpg)
Exercise
Modify the previous function that approximates . The function should accept an argument specifying the desired accuracy, and keep adding terms until the contribution of the next term drops below this level.
Write a program that gets a (small) double, epsilon, from the user, and approximates within this function.
![Page 53: Functions a group of declarations and statements that is assigned a name effectively, a named statement block usually has a value a sub-program when we](https://reader036.vdocuments.mx/reader036/viewer/2022081519/56649d005503460f949d1aa9/html5/thumbnails/53.jpg)
Solution
pi_eps.c