Fundamentals of Programming C - - PowerPoint PPT Presentation

fundamentals of programming c session 11
SMART_READER_LITE
LIVE PREVIEW

Fundamentals of Programming C - - PowerPoint PPT Presentation

Fundamentals of Programming C Session # 11 By: Saeed Haratian Fall 2015 Outlines Structured Programming Summary Program Modules in C Math Library Functions Function


slide-1
SLIDE 1

بميـــحرلا نحنحنرلا للوللوا مــس

Fundamentals of Programming

C

Session # 11

By: Saeed Haratian Fall 2015

slide-2
SLIDE 2

Outlines

 Structured Programming Summary  Program Modules in C  Math Library Functions  Function Definitions  Function Prototypes

slide-3
SLIDE 3

Structured Programming Summary

 Figure 4.17 summarizes the control statements discussed previously.  Small circles are used in the figure to indicate the single entry point and the single exit point of each statement.  Connecting individual flowchart symbols arbitrarily can lead to unstructured programs.  Therefore, the programming profession has chosen to combine flowchart symbols to form a limited set of control statements, and to build only structured programs by properly combining control statements in two simple ways.  For simplicity, only single-entry/single-exit control statements are used—there is only one way to enter and only one way to exit each control statement.

slide-4
SLIDE 4

Structured Programming Summary …

slide-5
SLIDE 5

Structured Programming Summary …

slide-6
SLIDE 6

Structured Programming Summary …

 Connecting control statements in sequence to form structured programs is simple—the exit point of one control statement is connected directly to the entry point of the next, i.e., the control statements are simply placed one after another in a program—we have called this “control-statement stacking.”  The rules for forming structured programs also allow for control statements to be nested.

slide-7
SLIDE 7

Structured Programming Summary …

 Figure 4.18 shows the rules for forming structured programs.  The rules assume that the rectangle flowchart symbol may be used to indicate any action including input/output.

slide-8
SLIDE 8

Structured Programming Summary …

 Figure 4.19 shows the simplest flowchart.

slide-9
SLIDE 9

Structured Programming Summary …

 Applying the rules of Fig. 4.18 always results in a structured flowchart with a neat, building-block appearance.  Repeatedly applying Rule 2 to the simplest flowchart (Fig. 4.19) results in a structured flowchart containing many rectangles in sequence (Fig. 4.20).  Notice that Rule 2 generates a stack of control statements; so we call Rule 2 the stacking rule.

slide-10
SLIDE 10

Structured Programming Summary …

slide-11
SLIDE 11

Structured Programming Summary …

 Rule 4 generates larger, more involved, and more deeply nested structures.  The flowcharts that emerge from applying the rules in Fig. 4.18 constitute the set of all possible structured flowcharts and hence the set of all possible structured programs.  It’s because of the elimination of the goto statement that these building blocks never overlap one another.  The beauty of the structured approach is that we use only a small number of simple single-entry/single-exit pieces, and we assemble them in only two simple ways.  Figure 4.22 shows the kinds of stacked building blocks that emerge from applying Rule 2 and the kinds of nested building blocks that emerge from applying Rule 3.

slide-12
SLIDE 12

Structured Programming Summary …

slide-13
SLIDE 13

Structured Programming Summary …

 The figure also shows the kind of overlapped building blocks that cannot appear in structured flowcharts (because of the elimination of the goto statement).  If the rules in Fig. 4.18 are followed, an unstructured flowchart (such as that in Fig. 4.23) cannot be created.  If you’re uncertain whether a particular flowchart is structured, apply the rules of Fig. 4.18 in reverse to try to reduce the flowchart to the simplest flowchart.  If you succeed, the original flowchart is structured; otherwise, it’s not.  Structured programming promotes simplicity.

slide-14
SLIDE 14

Structured Programming Summary …

slide-15
SLIDE 15

Structured Programming Summary …

slide-16
SLIDE 16

Structured Programming Summary …

 Bohm and Jacopini showed that only three forms of control are needed:

 Sequence  Selection  Repetition

 Sequence is straighforward.  In fact, it’s straightforward to prove that the simple if statement is sufficient to provide any form of selection.  It’s straightforward to prove that the while statement is sufficient to provide any form of repetition.

slide-17
SLIDE 17

Structured Programming Summary …

 Combining these results illustrates that any form of control ever needed in a C program can be expressed in terms of only three forms

  • f control:

 sequence  if statement (selection)  while statement (repetition)

 And these control statements can be combined in only two ways— stacking and nesting.  Indeed, structured programming promotes simplicity.

slide-18
SLIDE 18

Program Modules in C

 Most computer programs that solve real-world problems are much larger than the programs presented in the first few chapters.  Experience has shown that the best way to develop and maintain a large program is to construct it from smaller pieces or modules, each

  • f which is more manageable than the original program.

 This technique is called divide and conquer.  This chapter describes the features of the C language that facilitate the design, implementation, operation and maintenance of large programs.  The functions printf, scanf and pow that we’ve used in previous chapters are Standard Library functions.

slide-19
SLIDE 19

Program Modules in C …

 You can write your own functions to define tasks that may be used at many points in a program.  These are sometimes referred to as programmer-defined functions.  The statements defining the function are written only once, and the statements are hidden from other functions.  Functions are invoked by a function call, which specifies the function name and provides information (as arguments) that the called function needs to perform its designated task.  A common analogy for this is the hierarchical form of management.  A boss (the calling function or caller) asks a worker (the called function) to perform a task and report back when the task is done.

slide-20
SLIDE 20

Program Modules in C …

 For example, a function needing to display information on the screen calls the worker function printf to perform that task, then printf displays the information and reports back—or returns—to the calling function when its task is completed.  The boss function does not know how the worker function performs its designated tasks.  The worker may call other worker functions, and the boss will be unaware of this.  We’ll soon see how this “hiding” of implementation details promotes good software engineering.  Note that worker1 acts as a boss function to worker4 and worker5.  Relationships among functions may differ from the hierarchical structure shown in this figure.

slide-21
SLIDE 21

Program Modules in C …

slide-22
SLIDE 22

Math Library Functions

 Math library functions allow you to perform certain common mathematical calculations.  Functions are normally used in a program by writing the name of the function followed by a left parenthesis followed by the argument (or a comma-separated list of arguments) of the function followed by a right parenthesis.  For example, a programmer desiring to calculate and print the square root of 900.0 might write

printf( "%. "%.2f" f", sqrt( , sqrt( 900.0 900.0 ) ); ) );

slide-23
SLIDE 23

Math Library Functions …

 When this statement executes, the math library function sqrt is called to calculate the square root of the number contained in the parentheses (900.0).  The number 900.0 is the argument of the sqrt function.  The preceding statement would print 30.00.  The sqrt function takes an argument of type double and returns a result of type double.  All functions in the math library that return floating point values return the data type double.  Note that double values, like float values, can be output using the %f conversion specification.

slide-24
SLIDE 24

Math Library Functions …

slide-25
SLIDE 25

Math Library Functions …

slide-26
SLIDE 26

Functions

 Functions allow you to modularize a program.  All variables defined in function definitions are local variables— they’re known only in the function in which they’re defined.  Most functions have a list of parameters that provide the means for communicating information between functions.  A function’s parameters are also local variables of that function.  With good function naming and definition, programs can be created from standardized functions that accomplish specific tasks, rather than being built by using customized code.  This is known as abstraction.  We use abstraction each time we use standard library functions like printf, scanf and pow.

slide-27
SLIDE 27

Functions

 There are several motivations for “functionalizing” a program.  The divide-and-conquer approach makes program development more manageable.  Another motivation is software reusability—using existing functions as building-blocks to create new programs.  Software reusability is a major factor in the object-oriented programming movement that you’ll learn more about when you study languages derived from C, such as C++, Java and C# (pronounced “C sharp”).  A third motivation is to avoid repeating code in a program.  Packaging code as a function allows the code to be executed from several locations in a program simply by calling the function.

slide-28
SLIDE 28

Functions …

slide-29
SLIDE 29

Function Definition

 Each program we’ve presented has consisted of a function called main that called standard library functions to accomplish its tasks.  We now consider how to write custom functions.  Consider a program that uses a function square to calculate and print the squares of the integers from 1 to 10 (Fig. 5.3).

slide-30
SLIDE 30

Function Definition …

slide-31
SLIDE 31

Function Definition …

slide-32
SLIDE 32

Function Definition …

 Function square is invoked or called in main within the

printf statement (line 14)

printf( "%d " "%d ", square( x ) ); , square( x ) ); /* function call */ /* function call */

 Function square receives a copy of the value of x in the

parameter y (line 22).

 Then square calculates y * y (line 24).  The result is passed back to function printf in main where

square was invoked (line 14), and printf displays the result.

 This process is repeated 10 times using the for repetition

statement.

slide-33
SLIDE 33

Function Definition …

 The definition of function square shows that square

expects an integer parameter y.

 The keyword int preceding the function name (line 22)

indicates that square returns an integer result.

 The return statement in square passes the result of the

calculation back to the calling function.

slide-34
SLIDE 34

Function Definition …

 Line 5

int int square( square( int int y ); ); /* function prototype */ /* function prototype */

is a function prototype.

 The int in parentheses informs the compiler that square

expects to receive an integer value from the caller.

 The int to the left of the function name square informs the

compiler that square returns an integer result to the caller.

 The compiler refers to the function prototype to check that calls

to square (line 14) contain the correct return type, the correct number of arguments, the correct argument types, and that the arguments are in the correct order.

slide-35
SLIDE 35

Function Definition …

 The format of a function definition is

return-value-type function-name( parameter-list ) { definitions statements }

 The function-name is any valid identifier.  The return-value-type is the data type of the result returned to the

caller.

 The return-value-type void indicates that a function does not

return a value.

 Together, the return-value-type, function-name and parameter-list

are sometimes referred to as the function header.

slide-36
SLIDE 36

Function Definition …

slide-37
SLIDE 37

Function Definition …

 The parameter-list is a comma-separated list that specifies the

parameters received by the function when it’s called.

 If a function does not receive any values, parameter-list is void.  A type must be listed explicitly for each parameter.  The definitions and statements within braces form the function

body.

 The function body is also referred to as a block.  Variables can be declared in any block, and blocks can be

nested.

 A function cannot be defined inside another function.

slide-38
SLIDE 38

Function Definition …

slide-39
SLIDE 39

Function Definition …

slide-40
SLIDE 40

Function Defin ition …

slide-41
SLIDE 41

Function Definition …

 There are three ways to return control from a called function

to the point at which a function was invoked.

 If the function does not return a result, control is returned

simply when the function-ending right brace is reached, or by executing the statement

return;

 If the function does return a result, the statement

return expression;

returns the value of expression to the caller.

slide-42
SLIDE 42

Function Definition …

 Our second example uses a programmer-defined function

maximum to determine and return the largest of three integers (Fig. 5.4).

 Three integers are passed to maximum (line 19), which

determines the largest integer.

 This value is returned to main by the return statement in

maximum (line 37).

slide-43
SLIDE 43

Function Definition …

slide-44
SLIDE 44

Function Definition …

slide-45
SLIDE 45

Function Definition …

slide-46
SLIDE 46

Function Definition …

slide-47
SLIDE 47

Function Prototypes

 One of the most important features of C is the function

prototype.

 This feature was borrowed by the C standard committee

from the developers of C++.

 A function prototype tells the compiler the type of data

returned by the function, the number of parameters the function expects to receive, the types of the parameters, and the order in which these parameters are expected.

 The compiler uses function prototypes to validate function

calls.

slide-48
SLIDE 48

Function Prototypes …

 Previous versions of C did not perform this kind of

checking, so it was possible to call functions improperly without the compiler detecting the errors.

 Such calls could result in fatal execution-time errors or

nonfatal errors that caused subtle, difficult-to-detect logic errors.

 The function prototype for maximum in Fig. 5.4 (line 5) is

/* function prototype */ /* function prototype */ int int maximum( maximum( int int x, x, int int y, y, int int z ); z );

 This function prototype states that maximum takes three

arguments of type int and returns a result of type int.

slide-49
SLIDE 49

Function Proto types…

slide-50
SLIDE 50

Function Prototypes…

 A function call that does not match the function prototype is

a compilation error.

 An error is also generated if the function prototype and the

function definition disagree.

 For example, in Fig. 5.4, if the function prototype had been

written

void void maximum( maximum( int int x, x, int int y, y, int int z ); z );

the compiler would generate an error because the void return type in the function prototype would differ from the int return type in the function header.

slide-51
SLIDE 51

Function Prototypes…

 Another important feature of function prototypes is the

coercion of arguments, i.e., the forcing of arguments to the appropriate type.

 For example, the math library function sqrt can be called

with an integer argument even though the function prototype in <math.h> specifies a double argument, and the function will still work correctly.

 The statement

printf( "%. "%.3f\n" n", sqrt( , sqrt( 4 ) ); ) );

correctly evaluates sqrt( 4 ), and prints the value 2.000.

 The function prototype causes the compiler to convert the

integer value 4 to the double value 4.0 before the value is passed to sqrt.

slide-52
SLIDE 52

Function Prototypes…

 In general, argument values that do not correspond precisely

to the parameter types in the function prototype are converted to the proper type before the function is called.

 These conversions can lead to incorrect results if C’s

promotion rules are not followed.

 The promotion rules specify how types can be converted to

  • ther types without losing data.

 In our sqrt example above, an int is automatically

converted to a double without changing its value.

 However, a double converted to an int truncates the

fractional part of the double value.

slide-53
SLIDE 53

Function Prototypes…

 Converting large integer types to small integer types (e.g.,

long to short) may also result in changed values.

 The promotion rules automatically apply to mixed-type

expressions containing values of two or more data types.

 The type of each value in a mixed-type expression is

automatically promoted to the “highest” type in the expression (actually a temporary version of each value is created and used for the expression—the original values remain unchanged).

 Figure 5.5 lists the data types in order from highest type to

lowest type with each type’s printf and scanf conversion specifications.

slide-54
SLIDE 54

Function Prototypes…

slide-55
SLIDE 55

Function Prototypes…

 Converting values to lower types normally results in an incorrect

value.

 Therefore, a value can be converted to a lower type only by

explicitly assigning the value to a variable of lower type, or by using a cast operator.

 Function argument values are converted to the parameter types in

a function prototype as if they were being assigned directly to variables of those types.

 If our square function that uses an integer parameter (Fig. 5.3)

is called with a floating-point argument, the argument is converted to int (a lower type), and square usually returns an incorrect value.

 For example, square( 4.5 ) returns 16, not 20.25.

slide-56
SLIDE 56

Function Prototypes…

 If there is no function prototype for a function, the compiler

forms its own function prototype using the first occurrence of the function—either the function definition or a call to the function.

 This typically leads to warnings or errors, depending on the

compiler.

slide-57
SLIDE 57

Function Prototypes…