Transcript
Page 1: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

1

Functions and Structured Programming

Page 2: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

2

Structured Programming

• Structured programming is a problem-solving strategy and a programming methodology.– The construction of a program should embody top-

down design of the overall problem into finite subtasks.

• Each subtask can be coded directly as a function.

• These functions can be used in main to solve the overall problem.

Page 3: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

3

Functions• Functions are the building blocks of C

and the place where all program activity occurs. Function topics include:

– Function types – Function variables – Function arguments– Function scopes– Return values– Function prototypes– Recursion

Page 4: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

4

General syntax:

ret-type function-name (parameter list) {

   body of the function return (expression)

}

• A function may return any type of data except an array.

• The parameters receive the values of the arguments when the function is called.

Page 5: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

5

VOID used to indicate:

A. - No Return Value.

B. - No Parameters or Arguments.

* This allows Type compatibility to be handled by the compiler.

void Fname (void)

Not Return No Received

a Value. Values.

Page 6: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

6

• A variable is a named location in memory that is used to hold a value that can be modified by the program.

• All variables must be declared before they can be used.

Variables

Page 7: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

7

• Where variables are declared:

– Inside functions:local variables

– Outside of all functions:global variables

– In the definition of function parameters:formal parameters

Page 8: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

8

Local variable

• Declared inside a function.• Can be used only by statements

that are inside the block in

which the variables are declared.• A local variable is created upon

entry into its block and destroyed

upon exit.

void func1(void){  int x;   x = 10;}

void func2(void){  int x;   x = -199;}

Page 9: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

9

void f(void){  int t;   scanf("%d", &t);  

if(t==l) {    char s[80]; /* this is created only upon entry into this block */      /* do something . . . */  }   /* s not known here */}

Page 10: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

10

#include <stdio.h>int main(void){  int  x;   x = 10;  

if(x == 10) {    int  x;  /*  this masks the outer x */   x = 99;    printf("Inner x: %d\n", x); 99  }

  printf("Outer x: %d\n", x);  10 return 0;}

Local variables

are stored on the

run-time stack.

Page 11: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

11

• The value will be

assigned to the

variable each time

the block of code

in which it is

declared is entered.

#include <stdio.h>void f(void);int main(void){  int i;   for(i=0; i<10; i++)  f();   return 0;}

void f(void){  int j = 10;   printf("%d ", j);   j++; /* this line has no lasting effect */}

Page 12: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

12

Global Variables

• They are known throughout the program in which they are defined.

• They will hold their value throughout the program execution.

• They are declared outside of any function

• Storage for global variables is in a fixed

region and not the run-time stack.

Page 13: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

13

#include <stdio.h>

int count; /* GLOBAL */  

void func1(void);void func2(void);

int main(void){  count = 100;  func1();   printf("count is %d", count); return 0;}

void func1(void){  int temp;   temp = count;  func2();  printf("count is %d", count); }

void func2(void){  int count;   /* LOCAL */ for(count=l; count<10; count++)    putchar('.'); printf("count is %d", count);}

Page 14: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

14

• Avoid using unnecessary global variables.

– They take up memory the entire time your program is executing.

– Using a global variable where a local variable will do makes a function less general.

– Using a large number of global variables can lead to program errors.

Page 15: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

15

Function Parameters• General form:

fun-name(type varname1, type varname2,…. )

• All function parameters must be declared individually, each including both the type and name.

• Parameters behave like any other local variable.

void f(int i, int k, int j) /* correct */void f(int i, k, float j)   /* wrong */

Page 16: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

16

The Scope of a Function

• Each function is a discrete block of code.

• A function's code is private to that function and cannot be accessed by any statement in any other function except through a call to that function.

Page 17: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

17

• Variables that are defined within a function are local variables. Such variables are freed from memory when their function completes execution.

• Therefore, a local variable cannot hold its value between function calls.

• A global variable has extern storage class. We will see the impact of this later.

Page 18: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

18

• The formal parameters to a function also fall within the function's scope.

– A parameter is known throughout the entire

function. – A parameter comes into existence when the

function is called and is destroyed when the function is exited,( I.e., the Extent of the variable).

• A function cannot be defined within a function(no nested-functions).

Page 19: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

19

Communication with a Function

• Two ways that arguments can be passed to a function.

– Call by Value.

– Call by Reference.

Page 20: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

20

Call by Value* When an Argument (variable, constant, or

expression) is passed to a matching parameter (declared in Function Heading), A Copy of the Argument is made and is passed to the parameter.

Arguments Parametersin calling in called

Module. Module.* Changes made to the parameter have no effect on

the argument. i.e., the parameter is implemented as a local variable which is initialized to the value passed from the Argument.

Page 21: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

21

Call by Reference• It is often convenient to have functions modify

the values of the variables referred to in the Argument list.

• The address of an argument is copied into the parameter.

• Inside the subroutine, the address is used to access the actual argument used in the call.

To effect call-by-reference we must use pointers in the Argument list & pass addresses of variables [see chap 8].

Page 22: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

22

#include <stdio.h>int sqr(int x);

int main(void){  int t=10;   printf("%d %d", sqr(t), t);   return 0;}

int sqr(int t){  t = t*t;  return t;}

Page 23: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

23

Placement of Functions:

Before the compiler sees a call to a function it wants to know the Number and Type of its Parameters and the type of the Return Value of the Function.

Two methods of doing so:

1. Place Function Before main function

2. Provide Function Prototype Before the call.

Page 24: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

24

#include <stdio.h>

void f(int a, int b){  printf(''%d ", a%b); Before Main}

int main (void){  f(10,3);   return 0;}

Page 25: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

25

In C - A Function call can appear Before the function is Defined (i.e., code of function):

* The called function can be defined later in the same file.

* The called function can be in another file.

IF the Function Prototype is provided Before the call.

Function Prototypes

Page 26: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

26

Func Prototype is “Heading” of function.

FP’s - Can be placed at the top of the File - typically above any Function Definitions But below :

#includes

#defines

This gives the FP’s File Visibility. Know throughout the file.

Page 27: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

27

Parameter Passing Call by Value

#include <stdio.h>

double average(int, int, int);

int main(void) {

int test1, test2, test3;

double avg;

scanf(“%d%d%d%d”, &test1, &test2, &test3);

avg = average(test1, test2, test3);

printf(“ The average is: %f”’, avg);

}

Page 28: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

28

/* This function returns the average of 3 exam scores which are passed call-by-value. */

double average(int exam1, int exam2, int exam3)

{ double testavg;

testavg = (exam1 + exam2 + exam3)/ 3;

return testavg;

}

Page 29: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

29

Arguments to main( )• Information is passed into the main( )

function via command line arguments.

• Two special built-in arguments, argc and argv, are used to receive command line arguments.– The argc parameter holds the number of

arguments on the command line and is an integer.

– The argv parameter is a pointer to an array of character pointers.

Page 30: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

30

#include <stdio.h>#include <stdlib.h>

int main(int argc, char *argv[] ){

  if(argc<2) {    printf(''You forgot to type your name.\n");    exit(1);  }  printf("Hello %s", argv[1]); 

  return 0;}

a.out JohnInput

Hello John

Page 31: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

31

Returning from a Function

• A function terminates execution and returns to the caller in two ways.

– Occurs when the last statement in the function has executed.

– Occurs when meet the return statement.

Page 32: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

32

• General form:

return expression;

• It causes an immediate exit from the function.– Returns program control to calling

environment.– Allows Returning of a value.

• The value of expression will become the return value of the function.

Page 33: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

33

Rules• You can use as many return statements as

you like within a function. However, the function will stop executing as soon as it encounters the first return.

/* Return 1 if c is part of string s; 0 otherwise. */

int is_in(char *s, char c){  while (*s)    if(*s==c) return 1;    else s++;  return 0;{

Page 34: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

34

• The } that ends a function also causes the function to return. It is the same as a return without any specified value. If this occurs within a non-void function, then the return value of the function is undefined.

• A function declared as void cannot contain a return statement that specifies a value.

Page 35: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

35

• As long as a function is not declared as void, it can be used as an operand in an expression.

x = power(y);

if(max(x,y) > 100) printf(''greater");

for(ch=getchar(); isdigit(ch); ) . . . ;

Page 36: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

36

The exit( ) Function

• General form

void exit(int return_code);

• This function causes immediate termination of

the entire program, forcing a return to the operating system.

• The value of return_code is returned to the calling process, which is usually the operating system.

Page 37: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

37

•Programmers frequently use exit when a mandatory condition for program execution is not satisfied.

#include <stdlib.h>

int main(void){  if(!virtual_graphics()) exit(1);  play();   . . .}

Page 38: 1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The

38

Recursion

• A function calls itself (circular definition).

/* recursive */int factr(int n) {  int answer;   if(n==l) return 1; /* recursive call */    answer = factr(n-l)*n;   return answer ;}

/* non-recursive */int fact(int n) {  int t, answer;   answer = 1; for(t=1; t<=n; t++)    answer=answer*t;   return answer;}


Recommended